Dec 20 10:18:45 wb wb-rules[5255]: INFO: [engine] Starting sync loop
Dec 20 10:18:46 wb wb-rules[5255]: INFO: [rule info] m1w2=null
Даже если поменять файл, чтобы wb-rules его перечитало, значение не появляется (не было новых значений от температурного сенсора):
Dec 20 10:19:19 wb wb-rules[5255]: INFO: [rule info] m1w2=null
Dec 20 10:19:20 wb wb-rules[5255]: INFO: reloading file: /etc/wb-rules/rules.js
Температура у сенсора m1w2 может очень долгое время не обновляться и скрипт термостата не может из-за этого корректно работать, думая что ошибка с датчиком, т.к. значение null.
Ожидаемое поведение, чтобы объект dev отдавал retained значение после запуска.
// place your rules here or add more .js files in this directory
log("m1w2_207={}", dev["wb-m1w2_207/External Sensor 1"]);
log("m1w2_104={}", dev["wb-m1w2_104/External Sensor 1"]);
log("msw={}", dev["wb-msw-v3_176/Temperature"]);
log("ip={}", dev["network/Ethernet IP"]);
log("mwac={}", dev["wb-mwac_60/P1 Counter"]);
Результат после перезапуска:
Dec 20 20:12:32 wb wb-rules[13629]: INFO: [rule info] m1w2_207=null
Dec 20 20:12:32 wb wb-rules[13629]: INFO: [rule info] m1w2_104=null
Dec 20 20:12:32 wb wb-rules[13629]: INFO: [rule info] msw=null
Dec 20 20:12:32 wb wb-rules[13629]: INFO: [rule info] ip=10.10.0.3
Dec 20 20:12:32 wb wb-rules[13629]: INFO: [rule info] mwac=null
Что я успел понять: Те устройства, топики кторых создаются прямо или косвенно из wb-rules на момент его (пере)запуска могут быть как созданы так и еще нет, в зависимости от порядка выполнения скриптов. Те же, кторые создаются автономными сервисами, такими как wb-mqtt-gpio - читаются удачно.
Да, иногда воспроизводится. Честно говоря не вижу в этом бага. Скорее связано с тем что скрипты выполняются раньше чем читаются значения.
Дело в том что работать со значениями не в функциях - явно запрещено в документации.
Так не должно же быть? Я же делаю перезапуск wb-rules, все значения есть в веб интерфейсе при этом. Мне приходит значение по одному каналу, для работы скрипта мне нужно прочитать значение датчика температуры, а там null. Все внутри функции будет, но значения нету, т.к. wb-rules почему то не считывает retain значения. А датчик температуры в полу и он значение не меняет и поэтому по mqtt ничего может до часа не прилетать…
Не следует использовать объект dev вне кода правил
Пример выше я для простоты сделал, который воспроизводит проблему. В реальности у меня через правило отслеживается изменение переключателя и запускается скрипт, который считывает температуру датчика, но получает значение null, хотя все значения показываются в веб интерфейсе.
Сделать правило через definerule на изменение чего либо (переключатель, счетчик нажатий) , цель включить “термостат”. По событию попадаем в “функцию”, где мы считываем температуру модуля и решаем включать теплый пол или нет, но получаем в ответ null, явно ошибка в логике работы wb-rules? Как я вижу, wb-rules должен при старте считывать значения retain топиков и потом эти значения уже отдавать, на деле такого не происходит сейчас.
Мне кажется что мы занимаемся чем-то не имеющим отношения к реальным задачам. Перзапуск контроллера - вещь ну настолько редкая…
У меня даже тестовый на табильной версии перезапускается только с обновлением ядра.