Ошибка работы датчиков 1-wire

В log-файле обнаружил вот такую запись, которая периодически повторяется:
wirenboard-ARAXKJYF user.info kernel: [2552924.427081] w1_master_driver w1_bus_master1: Family 79 for 79.997c6fd96b5d.04 is not registered.

Как я понимаю, это связано с 1-wire датчиками. Да, они отвалились на время, а теперь я их вновь вижу, но обращение к ним из правил выдает ошибку:
ECMAScript error: TypeError: call target not an object
duk_js_executor.c:2761
anon /etc/wb-rules/heating.js:84 preventsyield
call native strict preventsyield
anon /usr/share/wb-rules-system/scripts/lib.js:177 preventsyield

Вот строка в коде, где ошибка стала возникать:
var delta_t = dev[“wb-w1”][“10-000802bc9fab”].toFixed(1)-dev[“Adjustment_Floor_Temperature2”][“volume”];

Такого давно не припомню с ними. Что это было и что стало причиной?

шум на шине 1-Wire, проверяйте физическое подключение

Конкретно wb-w1/10-000802bc9fab у вас есть в Devices или MQTT Channels в веб-интерфейсе?

Есть. Вот:

1 лайк

Интересно. А перезагрузка wb-rules помогает?

service wb-rules restart

Попробовал. В web интерфейсе они присутствуют как бы, но значения не меняются.
А через правила не видны по-прежнему.

Я перегрузил контроллер, тогда все заработало. Пришлось, хотя я этого избегал как мог.

чудеса. А сделайте пожалуйста

mqtt-get-dump /devices/wb-w1/#uncategorized

на контроллере, пришлите вывод

root@wirenboard-ARAXKJYF:~# mqtt-get-dump /devices/wb-w1/#uncategorized
Traceback (most recent call last):
File “/usr/bin/mqtt-get-dump”, line 68, in
client.publish(retain_hack_topic, ‘1’)
File “/usr/lib/python2.7/dist-packages/mosquitto.py”, line 778, in publish
rc = self._send_publish(local_mid, topic, local_payload, qos, retain, False)
File “/usr/lib/python2.7/dist-packages/mosquitto.py”, line 1592, in _send_publish
return self._packet_queue(PUBLISH, packet, mid, qos)
File “/usr/lib/python2.7/dist-packages/mosquitto.py”, line 1760, in _packet_queue
return self.loop_write()
File “/usr/lib/python2.7/dist-packages/mosquitto.py”, line 986, in loop_write
rc = self._packet_write()
File “/usr/lib/python2.7/dist-packages/mosquitto.py”, line 1380, in _packet_write
write_length = self._sock.send(packet.packet[packet.pos:])
socket.error: [Errno 32] Broken pipe

ужас. Давайте лучше так:

 mosquitto_sub -v -t /devices/wb-w1/#

root@wirenboard-ARAXKJYF:~# mosquitto_sub -v -t /devices/wb-w1/#
/devices/wb-w1/meta/name 1-wire Thermometers
/devices/wb-w1/controls/28-041650c631ff 62.187
/devices/wb-w1/controls/28-041650c631ff/meta/type temperature
/devices/wb-w1/controls/10-000802bb9742 18.937
/devices/wb-w1/controls/10-000802bb9742/meta/type temperature
/devices/wb-w1/controls/10-000802bc9fab 22.562
/devices/wb-w1/controls/10-000802bc9fab/meta/type temperature
/devices/wb-w1/controls/10-000802bbd9d5 23.25
/devices/wb-w1/controls/10-000802bbd9d5/meta/type temperature
/devices/wb-w1/controls/28-031644d155ff 50.187
/devices/wb-w1/controls/28-031644d155ff/meta/type temperature
/devices/wb-w1/controls/28-000006aad7ae 17.937
/devices/wb-w1/controls/28-000006aad7ae/meta/type temperature
/devices/wb-w1/controls/28-031644efc4ff 25.812
/devices/wb-w1/controls/28-031644efc4ff/meta/type temperature
/devices/wb-w1/controls/28-041650c631ff 62.187
/devices/wb-w1/controls/10-000802bb9742 18.937
/devices/wb-w1/controls/10-000802bc9fab 22.562
/devices/wb-w1/controls/10-000802bbd9d5 23.25
/devices/wb-w1/controls/28-031644d155ff 50.187
/devices/wb-w1/controls/28-000006aad7ae 17.937
/devices/wb-w1/controls/28-031644efc4ff 25.812
/devices/wb-w1/controls/28-041650c631ff 62.125
/devices/wb-w1/controls/10-000802bb9742 18.937
/devices/wb-w1/controls/10-000802bc9fab 22.562
/devices/wb-w1/controls/10-000802bbd9d5 23.25
/devices/wb-w1/controls/28-031644d155ff 50.312
/devices/wb-w1/controls/28-000006aad7ae 17.937
/devices/wb-w1/controls/28-031644efc4ff 25.812
/devices/wb-w1/controls/28-041650c631ff 62.187
/devices/wb-w1/controls/10-000802bb9742 18.937
/devices/wb-w1/controls/10-000802bc9fab 22.625
/devices/wb-w1/controls/10-000802bbd9d5 23.25

Вывод как остановить?

контрол + C

странно. А попробуйте в правиле написать

log(dev[“wb-w1/10-000802bc9fab”]);

и посмотреть, что оно выведет в окошке отладки в интерфейсе (такой с гаечным ключом)

22.625

то есть отлично правила видят ваш датчика. Значит не в этой строчке у вас ошибка получается

Я же написал ранее, что вынужден был перегрузить контроллер. После чего все работает вновь. Мне не понятно что произошло до этого, почему значения отображались в devices, а при обращении к ним в правилах, возникали ошибки. Это касалось абсолютно всех датчиков, подключённых к контроллеру по одной шине.

Речь только про 1-wire? Т.е. вывод команды mosquitto_sub был уже после того, как всё заработало?

Именно.

Евгений, ситуация вновь повторилась, та что в этой теме.
Вот результат команды:

root@wirenboard-ARAXKJYF:~# mqtt-get-dump /devices/wb-w1/#uncategorized
Traceback (most recent call last):
File “/usr/bin/mqtt-get-dump”, line 71, in
rc = client.loop()
File “/usr/lib/python2.7/dist-packages/mosquitto.py”, line 720, in loop
rc = self.loop_read(max_packets)
File “/usr/lib/python2.7/dist-packages/mosquitto.py”, line 961, in loop_read
rc = self._packet_read()
File “/usr/lib/python2.7/dist-packages/mosquitto.py”, line 1292, in _packet_read
command = self._sock.recv(1)
socket.error: [Errno 104] Connection reset by peer

После выполнения этой команды:
root@wirenboard-ARAXKJYF:~# mosquitto_sub -v -t /devices/wb-w1/#
/devices/wb-w1/meta/name 1-wire Thermometers

Дальше дело не пошло. Терминал молчит.

Так а что именно повторилось?

Как что? Опять все то же, что я писал вначале темы. Исчезли показания датчиков температуры в виртуальных устройствах и скрипты стали ошибку выдавать при обращении к ним. Показания датчиков замерли и не меняются в devices.