Работа с драйвером SNMP - MQTT

Добрый день!

Как записать параметр по протоколу SNMP в устройство (в моём случае инвертор) из правил? (Из админки тоже не нашёл возможности.)

Команда через строку проходит:
snmpset -v 2c -c public 192.168.184.20 1.3.6.1.4.1.43943.1.2.14.78.0 i 122

В панели устройство значение вижу. Настройки:

Спойлер

{
“address”: “192.168.184.20”,
“enabled”: true,
“channels”: [
{
“control_type”: “voltage”,
“enabled”: true,
“name”: “XChannelTest1snmp”,
“oid”: “.1.3.6.1.4.1.43943.1.2.9.48.0”,
“poll_interval”: 10000,
“scale”: 1,
“units”: “V”
},
{
“control_type”: “value”,
“enabled”: true,
“name”: “Equalization timeout”,
“oid”: “.1.3.6.1.4.1.43943.1.2.14.78.0”,
“poll_interval”: 10000,
“scale”: 1,
“units”: “Минуты”
}
],
“community”: “public”,
“poll_interval”: 3000,
“name”: “Инвертор StarkCountry 5000 Solar”
}

Пробовал из правил, не проходит:

Спойлер

defineVirtualDevice(“SNMPControl”, {
title:“SNMPControl”,
cells: {
“Equalizationtimeout”: {
type:“range”,
value: 120,
max: 130,
min: 110
}
}
});

defineRule(“SNMPControlWrite”, {

whenChanged: ["SNMPControl/Equalizationtimeout"],
then: function (newValue, devName, cellName) {

	dev["snmp_192.168.184.20_public/Equalization timeout"] = newValue;

log(“123” + newValue);
}

});

(Записываемое значение и параметр взяты рабочие, но любые - пока разбираюсь как всем этим управлять)

Спасибо!

И ещё вопрос не по теме, но к пользователям, вдруг кто знает - производитель Stark Country похоже дал какой-то общий MIB файл, который с реальным выводом snmpwalk мало бьётся. Может кто знает что это за производитель и где можно найти mib под Stark Country 5000? Где-то слышал, что это очередной клон Voltronic.

Хотелось бы дополнить тему, что есть ещё одна проблема: толи с драйвером, толи с картой, но периодически выскакивают ошибки чтения:

Спойлер

ERROR: 2024/07/09 13:05:22 failed to poll snmp_192.168.184.20_public:upsBatEstChargeRemaining: Request ID mism atch
ERROR: 2024/07/09 13:05:22 failed to poll snmp_192.168.184.20_public:upsBatSecondsOnBattery: Request ID mismat ch
ERROR: 2024/07/09 13:05:52 failed to poll snmp_192.168.184.20_public:AC output active power: Request ID mismatch
ERROR: 2024/07/09 13:05:53 failed to poll snmp_192.168.184.20_public:upsBatPBatVoltage: Request ID mismatch

При чём по логу видно, что иногда это 2 параметра (1, 3 и т.п.), а иногда много. Всего я сейчас 13 параметров запрашиваю. С чем связано не знаю. Интервалы опроса менял - не помогает, что 1000мс, что 30000мс.

При чём ясно, что хоть он и ругается на неверный ID - идентификатор точно верный и порой обмен проходит без ошибок. Текущие настройки драйвера:

Спойлер

{
“devices”: [
{
“address”: “192.168.184.20”,
“enabled”: true,
“name”: “Инвертор StarkCountry 5000 SOLAR INV”,
“community”: “public”,
“poll_interval”: 30000,
“snmp_timeout”: 10,
“snmp_version”: “2c”,
“channels”: [
{
“control_type”: “value”,
“enabled”: true,
“name”: “upsBatStatus”,
“oid”: “.1.3.6.1.4.1.43943.1.1.3.1.0”,
“scale”: 1,
“poll_interval”: 3000,
“units”: “”
},
{
“control_type”: “value”,
“enabled”: true,
“name”: “upsBatSecondsOnBattery”,
“oid”: “.1.3.6.1.4.1.43943.1.2.3.2.0”,
“scale”: 1,
“poll_interval”: 3001,
“units”: “секунды”
},
{
“control_type”: “value”,
“enabled”: true,
“name”: “upsBatEstChargeRemaining”,
“oid”: “.1.3.6.1.4.1.43943.1.2.3.4.0”,
“scale”: 1,
“poll_interval”: 3002,
“units”: “%”
},
{
“control_type”: “value”,
“enabled”: true,
“name”: “upsBatPBatVoltage”,
“oid”: “.1.3.6.1.4.1.43943.1.2.3.5.0”,
“scale”: 0.01,
“poll_interval”: 3003,
“units”: “В”
},
{
“control_type”: “value”,
“enabled”: true,
“name”: “upsBatPBatChargCurrent”,
“oid”: “.1.3.6.1.4.1.43943.1.2.3.9.0”,
“scale”: 1,
“poll_interval”: 3004,
“units”: “А”
},
{
“control_type”: “value”,
“enabled”: true,
“name”: “upsBatPBatDischargCurrent”,
“oid”: “.1.3.6.1.4.1.43943.1.2.3.11.0”,
“scale”: 0.1,
“poll_interval”: 3005,
“units”: “А”
},
{
“control_type”: “value”,
“enabled”: true,
“name”: “AC input frequency”,
“oid”: “.1.3.6.1.4.1.43943.1.2.4.4.0”,
“scale”: 0.1,
“poll_interval”: 3006,
“units”: “Гц”
},
{
“control_type”: “value”,
“enabled”: true,
“name”: “AC input voltage”,
“oid”: “.1.3.6.1.4.1.43943.1.2.4.8.1.2.0”,
“scale”: 0.1,
“poll_interval”: 3007,
“units”: “В”
},
{
“control_type”: “value”,
“enabled”: true,
“name”: “Output load percent”,
“oid”: “.1.3.6.1.4.1.43943.1.2.5.4.0”,
“scale”: 1,
“poll_interval”: 3008,
“units”: “%”
},
{
“control_type”: “value”,
“enabled”: true,
“name”: “AC output active power”,
“oid”: “.1.3.6.1.4.1.43943.1.2.5.3.0”,
“scale”: 1,
“poll_interval”: 3009,
“units”: “Вт”
},
{
“control_type”: “value”,
“enabled”: true,
“name”: “AC ouput apparent power”,
“oid”: “.1.3.6.1.4.1.43943.1.2.5.6.0”,
“scale”: 1,
“poll_interval”: 3010,
“units”: “ВА”
},
{
“control_type”: “value”,
“enabled”: true,
“name”: “AC output voltage”,
“oid”: “.1.3.6.1.4.1.43943.1.2.5.5.1.2.0”,
“scale”: 0.1,
“units”: “В”
},
{
“control_type”: “value”,
“enabled”: true,
“name”: “Equalization timeout”,
“oid”: “.1.3.6.1.4.1.43943.1.2.14.78.0”,
“scale”: 1,
“poll_interval”: 3011,
“units”: “минуты”
}
]
}
]
}

“poll_interval” в каналах даже попробовал поставить вразбежку, но существенного резальтата не увидел.

Третья особенность драйвера: если интервал сделать большим, то со временем параметры пропадают из раздела “устройства” в соответствующем виджете. Ощущение, что он не может их прочитать, они вываливаются из MQTT и уходят из виджета. А если опрашивать часто, то каналы с ошибками подсвечиваются красным до следующего этапа чтения, но не успевают исчезнуть из виджета.

Вопрос: как правильно производить чтение snmp канала в правилах? Попробовать считывать /meta/error? Или просто проверять устройство dev на существование прежде чем читать?)

GitHub - wirenboard/wb-mqtt-snmp: SNMP device to MQTT bridge follows Wiren Board MQTT Conventions не имеет функции “записи”.

Только вызовом системных команд: GitHub - wirenboard/wb-rules: Rule engine for Wiren Board

Да про это знаем, будет исправлено.

Вот это не совсем понятно. Что называете “виджетом”?
Подпишитесь на топик mqtt, покажите что в этот момент происходит.

к сожалению, не удалось повторить. Выглядело это так, что список:
image
на моих глазах то сокращался на пару параметров, то снова становился полным. И как раз тогда, когда интервал был большой. Сейчас попробовал, но не воспроизвелось. Сейчас подписка выводила значения параметров при их изменении.

оно не помешает пока при чтении значений из правил? Т.е. я читаю dev[‘snmp_192.168.184.20_public/upsBatPBatChargCurrent’], а он в этот момент красный - никаких неожиданностей не будет в скриптах?

Если в топик записать null - то он перестанет отображаться, да. Это штатное поведение…

Нет, не будет, ну разве что анализируете топик meta/error который и указывает на ошибки связи.

ясно, спасибо, буду пробовать.