Отсутсвует значение сенсора при старте wb-rules

Есть возможность прочитать “Input counter” любой? Воспроизводится ошибка сама?

У меня некоторые датчики температурные на m1w2 “засыпают” и перестают отдавать значения т.к. думаю остыли до минимальной температуры среды и виртуальный термостат висит в состоянии ошибки и не работает, это к вопросу отношения к реальным задачам.
Вот реальный пример (правда тут повезло “всего” 5+ минут датчик “спал”):

# mosquitto_sub -t '/devices/wb-m1w2_104/controls/External Sensor 1' -v | xargs -IL date +"%c: L"
Fri Dec 23 00:31:22 2022: /devices/wb-m1w2_104/controls/External Sensor 1 24.5 (ratain значение)
Fri Dec 23 00:37:46 2022: /devices/wb-m1w2_104/controls/External Sensor 1 24.5625

Если в этот момент произойдет перезапуск wb-rules , то прочитать значение будет невозможно, будет null и это ошибка wb-rules, так быть не должно.

Сам wb-rules перезапускается (контроллер я не перезапускал пару недель, сегодня сделал проверить гипотезу) т.к. я делаю скрипт wb-engine и приходится часто проверять новые изменения, так и наткнулся на данную ошибку.

Сейчас получается , я в веб интерфейсе вижу retain значения от устройств, те же счетчики (понятно пример абстрактный) , но не могу прочитать эти же значения в wb-rules, пока не придет новое значение от устройства.

Переделал пример на чтение счетчика:

log(“counter={}”, dev[“wb-mdm3_195/Input 3 counter”], value);
Dec 22 23:52:46 wb wb-rules[16742]: INFO: [rule info] counter=null true
Спустя 30 минут:
Dec 23 00:21:18 wb wb-rules[16742]: INFO: [rule info] counter=null true

Нелогичное поведение, не могу прочитать значение которое вижу в веб интерфейсе…

systemctl restart wb-rules && journalctl -u wb-rules -f |grep wb-mrgbw-d-fw3_189
Dec 22 20:34:52 wirenboard-ACAX3M6K wb-rules[14143]: INFO: [rule info] wb-mrgbw-d-fw3_189/Input 3 Counter=8 true

значений в топиках - нет?
Не очень понимаю, как термостат может быть в ошибке, независимо от устройства если ли температура отличается от уставки - он включает исполнитель. Если нет - не работает.
А “состояние ошибки” - не понимаю.

Если значение температуры null, это некорректное значение , поэтому считается ошибка датчика и нельзя включать исполнитель, т.к. неизвестно что с датчиком?

Выше показал как выглядит mosquitto_sub, retain значение прилетает сразу при подписке, как и должно быть, а сами значения могут по 10 минут не приходить и более. Почему у меня мне wb-rules игнорирует retain значение мне непонятно, и должен ли он его считывать?, в коде не нашел. У Вас я так понял не воспроизводится и Input Counter считывается…

Точно ли стабильная версия?

Да, считывается.

Я же выше показывал какая версия? У меня Bullseye и последняя версия wb-rules и всего остального:

# apt-cache policy wb-rules
wb-rules:
  Installed: 2.17.2
  Candidate: 2.17.2

Собрал стенд в точности как у вас, последний релиз всего. Прошивка WB-M1W2 = 4.25.1. WB-M1W2 сидит на отдельном порту. Правило:

defineRule({
  whenChanged: function() { return 1 == 1 },
  then: function (newValue, devName, cellName) {
	log("T={}", dev["wb-m1w2_86/External Sensor 1"]);
  }
});

Правило единственное, все остальные отключил. Загрубил датчик, чтобы дискретность измерения была 0.5 гр.С, т.е. значение точно не изменяется. Десяток раз перезагрузил wb-rules. Ни разу не получил null - выводятся одинаковые значения температуры.

Пока могу вам предложить повысить дискретность самого датчика командами:

echo 12 >/sys/bus/w1/devices/28-02129177e9b2/w1_slave
echo 0 >/sys/bus/w1/devices/28-02129177e9b2/w1_slave

адрес датчика поменяйте на свой и проверьте наличие такого файла. Датчик начнет отдавать значения часто. Только датчик подключите непосредственно к Wiren Board, не через WB-M1W2, когда будете его перенастраивать.
Подумаю еще.

Убрал правило, оставил только строку:

log("T={}", dev["wb-m1w2_86/External Sensor 1"]);

тоже работает, хоть так делать нельзя.

Увидел по вашим значениям, что у вас дискретность и так 12 бит - тогда не понятно, почему так редко меняются значения. У меня при такой дискретности они валятся часто.

Проблема то в том что у меня wb-rules не показывает retain значения, я не могу “прочитать” counter простой, пока он не поменяется, так же не должно быть?

У себя такого не вижу - все значения получаю сразу.

Я бы перезагрузил полностью контроллер, и смотрел системные логи с момента загрузки - где-то есть проблема.

Я тоже так хочу :slight_smile:

Перезагружал, ничего не обнаружил, могу скинуть логи , какие именно или архив диагностики после перезагрузки ?

Давайте архив

diag_output_ACZVEF3I_2022-12-23-19.33.10.zip (124.6 КБ)

Получилось синтетически воспроизвести. Отдал разработчикам.