Рассинхрон состояния между реле и контроллером

Добрый день!
Вчера случилась не оч приятная ситуация: теплый пол в санузле не выключался весь день (разогрелся до 50 градусов вместо 35). При этом на контроллере состояние реле было “выключено”.

График состояния реле и датчика температуры:

Самая интересная часть /var/log/messages:

May 25 07:58:09 wirenboard-AINFZ3MB wb-rules[1664]: INFO: [rule info] floor_heat_control:: sensor (1wireSensors/bath_small_towel) temp (32.937) down hysteresis (33). turning ON the relay "wb-mrm2-mini_134/Relay 2"
May 25 07:58:09 wirenboard-AINFZ3MB wb-rules[1664]: INFO: [rule info] RelaysAutoOff:: relay "wb-mrm2-mini_134/Relay 2" activated, saving activation time
May 25 07:58:38 wirenboard-AINFZ3MB wb-rules[1664]: INFO: [rule info] auto_off_heater_control  newValue=true, devName=_schedules, cellName=warm_floor_small_bath, warm_floor_small_bath=true
May 25 07:59:27 wirenboard-AINFZ3MB wb-rules[1664]: INFO: [rule info] RelaysAutoOff:: relay "wb-mrm2-mini_134/Relay 2" deactivated, unset activation time
May 25 07:59:36 wirenboard-AINFZ3MB wb-rules[1664]: INFO: [rule info] floor_heat_control:: sensor (1wireSensors/bath_small_towel) temp (32.875) down hysteresis (33). turning ON the relay "wb-mrm2-mini_134/Relay 2"
May 25 07:59:38 wirenboard-AINFZ3MB wb-rules[1664]: INFO: [rule info] auto_off_heater_control  newValue=true, devName=_schedules, cellName=warm_floor_small_bath, warm_floor_small_bath=true
May 25 07:59:58 wirenboard-AINFZ3MB wb-rules[1664]: INFO: [rule info] floor_heat_control:: sensor (1wireSensors/bath_small_towel) temp (32.937) down hysteresis (33). turning ON the relay "wb-mrm2-mini_134/Relay 2"

В 07:59:27 или в 07:59:36 произошло что-то странное, из-за чего появился рассинхрон: физически реле работало, а в истории/wb-rules - не работало.

Все мои wb-rules тут: GitHub - imposibrus/wirenboard-rules . Там много всякого тестового, основные моменты, отвечающие за вкл/выкл:

  • модуль RelaysAutoOff, который отключает реле после 30 минут непрерывной работы. И его инициализация;
  • модуль Schedules, скопированный из Wiki;
  • floor_heat_control, управляющий реле в зависимоти от температуры.

Не имею морального права просить разгребать эти правила. Вроде как, они работают и все хорошо. Главные вопросы: как может случиться ситуация с рассинхроном физического состояния реле и его состоянием в контроллере и как с этим бороться? Может где-то нет подтверждения записи или возникает race condition? Алерт о перегреве я теперь точно добавлю, чтобы можно было руками переткнуть, если что. Но теперь я не уверен, что будет достаточно добавить правило в wb-rules, которые будет делать “вкл/выкл” реле. Неужели надо будет питание реле перетыкать через правила? :frowning:

Wiren Board 6.7.2 (s/n AINFZ3MB), release staging.03688 (as testing)
Linux wirenboard-AINFZ3MB 5.10.35-wb109 #1 Wed Mar 16 07:18:32 UTC 2022 armv7l GNU/Linux

Реле WB-MRM2-mini-NO hw v2.3D, fw 1.17.7 (не знал как посмотреть версию без обновления, так что обновил сейчас до 1.18.3 :grin::man_shrugging:). Сидит одно на втором порту RS-485, питается от контроллера по Vout (тоже одно такое), скорость 9600.

wb-rules 2.11.1
wb-mqtt-serial 2.56.3

Полный лог за день (почистил только спам от dhcp и стандартных правил, пытающихся узнать IP несуществующих интерфейсов)
messages.log (79.8 КБ)

Здравствуйте!
В логах явных проблем нет, только изредка таймауты чтения. Сейчас работа реле нормальная? Если да, каким образом восстановили работу модуля?
Скажите какие нагрузки подключены к каналам модуля реле WB-MRM2-mini (тип, мощность)? Не могло ли залипнуть реле от большой нагрузки или от механического износа при частых срабатываниях?

Сейчас работа реле нормальная?

Да, вообще уже 5 месяцев работало без вопросов.

Если да, каким образом восстановили работу модуля?

Перегрев заметила девушка, меня рядом не было, так что она вырубила автомат в щитке. Т.е. отрубила нагрузку (теплый пол), без отключения самого реле. Примерно в 4:30 уже я пошел смотреть: послал пару раз вкл/выкл через MQTT, услышал, что реле щелкает, подождал как начала падать температура, успокоился) Поэтому у меня сложилось мнение, что реле работает ок, просто случился рассинхрон состояния (хоть я и понимаю, что опрос состояния идет постоянно и рассинхрона быть не должно).

Скажите какие нагрузки подключены к каналам модуля реле WB-MRM2-mini (тип, мощность)?

Резистивная нагрузка, теплый пол по 0,5м² на каждый канал. Мощность каждого примерно 80Вт (по паспорту мощность 1м² теплого пола = 160Вт).

Не могло ли залипнуть реле от большой нагрузки или от механического износа при частых срабатываниях?

Залипнувшие реле - мой самый страшный сон😅 Но вообще, везде нагрузка оч маленькая, так что если только от износа, я полагаю🤷‍♂️ Сейчас посмотрел, в день этот канал реле включается около 36 раз. Получается за 5 месяцев этот канал включался уже примерно 5500 раз.

Забыл еще уточнить: это реле находится в потенциально влажной зоне - в подрозетнике в санузле. Прямого контакта с водой там точно нет, конденсата тоже быть не должно. Но это наводит меня на мысль, что к нему надо относиться как к “потенциально опасному” и не особо доверять.

Если я правильно понимаю, удаленно излечить возможное “залипание контактов” не получится? Наверное, только если ставить еще одно реле, "как на подводной лодке":joy:

А ошибки связи обрабатываются? Вот пример: Сообщение при отключении или неисправности в Telegram - #3 от пользователя BrainRoot
и на самом реле надо включить безопасный режим, чтобы оно не было включенным при отсутствии связи. В правила гляну, но уже скорее завтра.

А нет ли в логах wb-mqtt-serial сообщений о ошибках за этот период. О, и кстати, а версия FW в реле какая?
И надо бы с него uptime (104 и 105 input регистры) прочитать.

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

Нет, сделаю👌

А нет ли в логах wb-mqtt-serial сообщений о ошибках за этот период

Его ID - 134, получается, конкретно в этот период ошибок нет, но вообще встречаются “invalid crc”.

May 24 20:09:48 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 discrete(s) @ 0 of device modbus:134: Serial protocol error: malformed response: invalid data size
May 24 20:09:54 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 discrete(s) @ 0 of device modbus:134: Serial protocol error: malformed response: invalid crc
May 24 20:10:24 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 coil(s) @ 0 of device modbus:134: Serial protocol error: malformed response: invalid data size
May 24 20:10:53 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 discrete(s) @ 0 of device modbus:134: Serial protocol error: malformed response: invalid data size
May 24 20:11:07 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 input(s) @ 32 of device modbus:134: Serial protocol error: malformed response: invalid data size
May 24 22:25:01 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 discrete(s) @ 0 of device modbus:134: Serial protocol error: malformed response: invalid data size
May 24 22:25:16 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 input(s) @ 32 of device modbus:134: Serial protocol error: malformed response: invalid crc
May 24 22:25:31 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 discrete(s) @ 0 of device modbus:134: Serial protocol error: malformed response: invalid crc
May 24 22:25:45 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 coil(s) @ 0 of device modbus:134: Serial protocol error: malformed response: invalid crc
May 24 22:26:00 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 discrete(s) @ 0 of device modbus:134: Serial protocol error: malformed response: invalid data size
May 24 22:26:15 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 1 coil(s) @ 2 of device modbus:104: Serial protocol error: request timed out
May 24 23:05:32 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 1 holding(s) @ 0 of device modbus:104: Serial protocol error: request timed out
May 25 00:32:28 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 3 input(s) @ 32 of device modbus:153: Serial protocol error: request timed out
May 25 01:39:17 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 3 input(s) @ 35 of device modbus:42: Serial protocol error: request timed out
May 25 04:27:07 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 3 input(s) @ 32 of device modbus:153: Serial protocol error: request timed out
May 25 08:59:25 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 1 discrete(s) @ 0 of device modbus:104: Serial protocol error: request timed out
May 25 09:37:08 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 1 input(s) @ 39 of device modbus:138: Serial protocol error: request timed out
May 25 10:59:41 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 3 discrete(s) @ 0 of device modbus:153: Serial protocol error: request timed out
May 25 11:05:38 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 1 holding(s) @ 2 of device modbus:104: Serial protocol error: request timed out
May 25 11:21:03 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 3 input(s) @ 32 of device modbus:153: Serial protocol error: request timed out
May 25 11:25:05 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 1 input(s) @ 482 of device modbus:153: Serial protocol error: request timed out
May 25 12:19:56 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 input(s) @ 32 of device modbus:134: Serial protocol error: malformed response: invalid crc
May 25 12:20:04 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 discrete(s) @ 0 of device modbus:134: Serial protocol error: malformed response: invalid crc
May 25 12:20:19 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 input(s) @ 32 of device modbus:134: Serial protocol error: malformed response: invalid crc
May 25 12:20:48 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 discrete(s) @ 0 of device modbus:134: Serial protocol error: malformed response: invalid crc
May 25 12:21:03 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 discrete(s) @ 0 of device modbus:134: Serial protocol error: malformed response: invalid crc
May 25 12:21:32 wirenboard-AINFZ3MB wb-mqtt-serial[1655]: WARNING: [modbus] failed to read 2 input(s) @ 32 of device modbus:134: Serial protocol error: malformed response: invalid crc

О, и кстати, а версия FW в реле какая?

fw 1.17.7

Често сказать, не знаю как узнать версию прошивки без обновления. Знаю только, что она выводится при выполнении команды типа wb-mcu-fw-updater update-fw /dev/ttyRS485-2 -a134. Поэтому оно обновилось до 1.18.3, когда я узнавал версию таким способом :grin:

И надо бы с него uptime (104 и 105 input регистры) прочитать.

Вроде, это делается так:

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-2 -a134 -t0x03 -r104                                                                                      4728ms  2022-05-26 16:19:34
Opening /dev/ttyRS485-2 at 9600 bauds (N, 8, 2)
[86][03][00][68][00][01][1B][A1]
Waiting for a confirmation...
<86><03><02><00><00><0C><5A>
SUCCESS: read 1 of elements:
	Data: 0x0000
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-2 -a134 -t0x03 -r105                                                                                               2022-05-26 16:19:36
Opening /dev/ttyRS485-2 at 9600 bauds (N, 8, 2)
[86][03][00][69][00][01][4A][61]
Waiting for a confirmation...
<86><03><02><55><A9><F3><74>
SUCCESS: read 1 of elements:
	Data: 0x55a9

То есть перезагружалось 6 часов назад.

Ну, было бы прерывание связи - он бы чаще ругался, так - ничего страшного не вижу.

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.