боДрый день!
Есть ли возможность определить для конкретного устройства в wb-rules наличие ошибок, например в виде dev[“msw2_10”][“CO2”][“error”] ?
боДрый день!
Есть ли возможность определить для конкретного устройства в wb-rules наличие ошибок, например в виде dev[“msw2_10”][“CO2”][“error”] ?
Нет, движок правил не отслеживает такие топики. Только внешний скрипт, который будет в топик виртуального устройства что-то записывать, при появлении meta/error
А можно из движка правил почитать топик?
Zeta, смотрите, могу порекомендовать относительно “костыльный” вариант. Кажется, он решает ваши проблемы.
Из движка правил вы можете вызывать внешние программы через runShellCommand, в том числе mosquitto_sub, а затем парсить вывод (см. https://github.com/contactless/wb-rules)
С этой утилитой (mosquitto_sub) есть проблема – у нее нет таймаутов. Если сообщения в топик не публикуются, она будет висеть и ничего не возвращать. Поэтому таймаут надо задавать извне, например, так:
timeout 1s mosquitto_sub -C 1 -v -t "/devices/wb-adc/controls/Vin"
Ключ “-С x
” – получить x сообщений и завершить работу.
Еще у нас есть пакет wb-mqtt-timestamper (https://github.com/contactless/wb-mqtt-timestamper)
Он публикует таймстемпы для всех топиков, на которые он подписан, в виде мета-тегов:
/devices/wb-adc/controls/5Vout/meta/ts 1550661751
То есть как только публикуется сообщение в топик, удовлетворяющий шаблону, wb-mqtt-timestamper дополнительно публикует временную метку.
Устанавливается командой apt-get install wb-mqtt-timestamper
Шаблон настраивается в файле /etc/defaults/wb-mqtt-timestamper
Будьте осторожны с метасимволом ‘#’, чтобы не подписаться на сообщения самого wb-mqtt-timestamper!
Да, довольно костыльно. Но спасибо за идею, может пригодится.
Думаю, напишем свой модуль для обработки ошибок.
Получился рабочий вариант обработки обрыва на линии?