Ad Widget

Collapse

шаблон modbus

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Kermestere
    Junior Member
    • Jan 2020
    • 12

    #46
    Отличный вариант Kos .
    Проверил пока что через ежесекундный watch- это то что надо ,работает на ура, и отключал устройства и навешивал несуществующие приборы.
    Супер!
    далее скрипт баш я зациклю и по мере опроса устройств с небольшой задержкой буду сэндить данные.
    Спасибо за помощь.

    Click image for larger version

Name:	mdbs.jpg
Views:	302
Size:	112.2 KB
ID:	394863

    Comment

    • shkiper
      Senior Member
      • Mar 2016
      • 123

      #47
      извиняюсь за задержку, мои пять копеек
      (на авторство не претендую, сам "честно взял" где-то, хотя там было немного про другое, но примерно похожее)

      сделаем так чтобы тоже самое получалось с помощью запроса ключа сервером, т.е. обычным путем
      исходные данные:
      у нас есть рабочая команда:
      md1=`~/modpoll/linux_i386/modpoll -b 57600 -d8 -s1 -p none -m rtu -l 100 -a1 -r14 -c1 /dev/ttyUSB0 -1 |grep 4]: |awk -F: {'print $2'}`
      нам надо что-бы соблюдались тайминги:
      1 - допустимая частота опроса конкретного устройства, это допустимый возраст данных для устройства, если данные младше его - то они считаются актуальными, допустим 5 сек, CACHE_DEV_TIME=5
      2 - допустимая частота запуска опроса шины, допустим 1 сек, CACHE_MODBUS_TIME=1

      Code:
      #!/bin/bash
      
      #id устройства в строке модпула
      dev_id=$1
      CACHE_DEV_TIME=5
      CACHE_MODBUS_TIME=1
      CACHE_FILE="/tmp/modbus_dev_${dev_id}.cache"
      NOW_TIME=`date '+%s'
      
      #смотрим возраст кэша устройства, есть ли он вообще
      if [ -f "${CACHE_FILE}" ]; then
        CACHE_DEV_AGE=`stat -c"%Y" "${CACHE_FILE}"`
      else
        CACHE_DEV_AGE=0
      fi
      
      #смотрим возраст последнего обращения к модбасу, т.е. самый старый кэш без привязки к устройству
      OLD_FILE= $(ls -lat /tmp | grep "modbus_dev_" | awk 'NR==1{print $9}')
      if [ -f "/tmp/${OLD_FILE}" ]; then
        CACHE_AGE_MB=`stat -c"%Y" "/tmp/${OLD_FILE}"`
      else
        CACHE_AGE_MB=0
      fi
      
      #сколько секунд назад опрашивался модбас
      DELTA_TIME_MB=$((${NOW_TIME} - ${CACHE_AGE_MB}))
      
      #сколько секунд назад опрашивалось нужное устройство
      DELTA_TIME_DEV=$((${NOW_TIME} - ${CACHE_DEV_AGE}))
      
      #если время тайминга модбаса не вышло, то подождать
      if [ ${DELTA_TIME_MB} -lt ${CACHE_MODBUS_TIME} ]; then
        sleep $((${CACHE_MODBUS_TIME} - ${DELTA_TIME}))
      
      #если кэш устройства устарел то опрашиваем модбас
        elif [ ${DELTA_TIME_DEV} -gt ${CACHE_DEV_TIME} ]; then
          DATACACHE=$(~/modpoll/linux_i386/modpoll -b 57600 -d8 -s1 -p none -m rtu -l 100 -${dev_id} -r14 -c1 /dev/ttyUSB0 -1 |grep 4]: |awk -F: {'print $2'})
          echo "" >> "${CACHE_FILE}"
          echo "${DATACACHE}" > "${CACHE_FILE}"
      fi
      
      RESULT=$(cat "${CACHE_FILE}")
      
      if [ "${RESULT}" ]; then
      echo "${RESULT}"
      fi
      в параметрах пишем примерно так
      Code:
      UserParameter=modbus[*],/etc/zabbix/modbas.sh "$1"
      проверить нет возможности, если ничего не перепутал, должно работать
      Last edited by shkiper; 12-02-2020, 09:48.

      Comment

      • Zbbixuser
        Member
        • Jun 2021
        • 45

        #48
        Все привет. Есть вопрос по созданию шаблона для узлов, опрашиваемых по modbus, но не простого, а создающего прототипы данных и прототипы триггеров. Modbus у меня работает хорошо, но вот в ручную создавать элементы данных из адресов очень тяжело и напряжно, если устройств скажем десяток и считывает большой диапазон значений. Хотелось бы узнать, можно ли сделать прототипы триггеров, которые берут количество элементов данных из макросов и так же генерируют прототипы триггеров? Я смотрел примеры где прототипы элеметнов данных создаются в основном по SNMP, но в данном случае SNMP нету, а все данные я могу указать при создании узла через макрос. Что я только не пробовал, ничего не помогает. Может у кого есть идеи?

        Comment

        Working...