SNMP Агент

Добрый день!
Установил SNMP-Агент. Запустил, но данные получаю STRING. Можно ли как-то их преобразовать в Integer? Если да, то подскажите пожалуйста и было бы замечательно, если были бы примеры

Добрый день.
Если источник отдает string - то преобразовать можно с помощью скрипта wb-rules например. Сам сервис - не преобразовывает значения.

Добрый день. А есть какой нибудь туториал по написанию скрипта?

Да, описание особенностей реализации стандартного JS тут: wb-rules/README.md at master · wirenboard/wb-rules · GitHub
Можно воспользоваться примерами.

То есть, после написания скрипта wb-rules, при запросе скрипта по SSH, вместо String будет выдавать Integer?

Так… Возможно я не совсем понимаю… Вы получаете на контроллере значения по SNMP и сервис публикует их в топики?

Я с контроллера передаю значения по SNMP. Я как понял стандартно значения передаются в строке. Мне нужно строку конвертировать в целочисленное значение

Так, теперь понятно.
Если использовать extend то snmpd отдает только string.
Для integer используется pass

В файл конфигурации добавил строку :
pass .1.3.6.1.4.1.2.10 /var/lib/snmp/mqtt-snmp_Status_QF.sh

Скрипт начинается : #!/bin/sh -f
При запуске snmpwalk ничего не происходит

Так… А что ожидается?
А что выдает скрипт на stdout, что он должен выдавать?
Можно глянуть в https://sourceforge.net/p/net-snmp/code/ci/master/tree/local/passtes как образец.

На stdout выдает следующее:
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.1 = STRING: “0”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.2 = STRING: “1”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.3 = STRING: “0”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.4 = STRING: “1”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.5 = STRING: “0”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.6 = STRING: “1”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.7 = STRING: “0”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.8 = STRING: “1”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.9 = STRING: “0”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.10 = STRING: “1”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.11 = STRING: “0”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.12 = STRING: “1”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.13 = STRING: “0”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.14 = STRING: “1”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.15 = STRING: “1”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.16 = STRING: “0”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.17 = STRING: “0”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.18 = STRING: “0”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.19 = STRING: “0”
.1.3.6.1.4.1.2.10.4.1.2.2.116.116.20 = STRING: “0”

К данной ссылке нет доступа

Во всех мануалах рекомендуют явно указывать шел:
pass .1.3.6.1.4.1.2.10 /bin/sh / var/lib/snmp/mqtt-snmp_Status_QF.sh

И при дебаге остановить сервис snmpd и запустить его в фореграунде с ключами : " snmpd -f -Lo -Ducd-snmp/pass"

Это я так понимаю это указывается, если используется один скрипт. А если скриптов 5 и из них один только для которого нужно получать int?

По-моему это эквивалентно указанию шелла в самом скрипте.

Для удобства - да, это нелишне.

Можно так (как раз пример из ссылки):

#!/bin/sh -f

PLACE=".1.3.6.1.4.1.8072.2.255"  # NET-SNMP-PASS-MIB::netSnmpPassExamples
REQ="$2"                         # Requested OID

#
#  Process SET requests by simply logging the assigned value
#      Note that such "assignments" are not persistent,
#      nor is the syntax or requested value validated
#  
if [ "$1" = "-s" ]; then
  echo $* >> /tmp/passtest.log
  exit 0
fi

#
#  GETNEXT requests - determine next valid instance
#
if [ "$1" = "-n" ]; then
  case "$REQ" in
    $PLACE|		\
    $PLACE.0|		\
    $PLACE.0.*|		\
    $PLACE.1)       RET=$PLACE.1.0 ;;     # netSnmpPassString.0

    $PLACE.1.*|		\
    $PLACE.2|		\
    $PLACE.2.0|		\
    $PLACE.2.0.*|	\
    $PLACE.2.1|		\
    $PLACE.2.1.0|	\
    $PLACE.2.1.0.*|	\
    $PLACE.2.1.1|	\
    $PLACE.2.1.1.*|	\
    $PLACE.2.1.2|	\
    $PLACE.2.1.2.0) RET=$PLACE.2.1.2.1 ;; # netSnmpPassInteger.1

    $PLACE.2.1.2.*|	\
    $PLACE.2.1.3|	\
    $PLACE.2.1.3.0) RET=$PLACE.2.1.3.1 ;; # netSnmpPassOID.1

    $PLACE.2.*|		\
    $PLACE.3)       RET=$PLACE.3.0 ;;     # netSnmpPassTimeTicks.0
    $PLACE.3.*|		\
    $PLACE.4)       RET=$PLACE.4.0 ;;     # netSnmpPassIpAddress.0
    $PLACE.4.*|		\
    $PLACE.5)       RET=$PLACE.5.0 ;;     # netSnmpPassCounter.0
    $PLACE.5.*|		\
    $PLACE.6)       RET=$PLACE.6.0 ;;     # netSnmpPassGauge.0

    *)         	    exit 0 ;;
  esac
else
#
#  GET requests - check for valid instance
#
  case "$REQ" in
    $PLACE.1.0|		\
    $PLACE.2.1.2.1|	\
    $PLACE.2.1.3.1|	\
    $PLACE.3.0|		\
    $PLACE.4.0|		\
    $PLACE.5.0|		\
    $PLACE.6.0)     RET=$REQ ;;
    *)         	    exit 0 ;;
  esac
fi

#
#  "Process" GET* requests - return hard-coded value
#
echo "$RET"
case "$RET" in
  $PLACE.1.0)     echo "string";    echo "Life, the Universe, and Everything"; exit 0 ;;
  $PLACE.2.1.2.1) echo "integer";   echo "42";                                 exit 0 ;;
  $PLACE.2.1.3.1) echo "objectid";  echo "$PLACE.99";                          exit 0 ;;
  $PLACE.3.0)     echo "timeticks"; echo "363136200";                          exit 0 ;;
  $PLACE.4.0)     echo "ipaddress"; echo "127.0.0.1";                          exit 0 ;;
  $PLACE.5.0)     echo "counter";   echo "42";                                 exit 0 ;;
  $PLACE.6.0)     echo "gauge";     echo "42";                                 exit 0 ;;
  *)              echo "string";    echo "ack... $RET $REQ";                   exit 0 ;;  # Should not happen
esac

Нет! проверено. С явным вызовом - работает. При надежде на шебанг - тихо ничего не делает.

Благодарю за помощь, буду разбираться

Благодарю, дополню документацию.