У меня есть “вынос” с MR6C через WB-MGE. Так вот, перезагрузка WB, когда он ещё не загрузил web/ssh и не отвечает по mqtt внешним устройствам, но уже “пингуется”, это событие вызывает срабатывание реле***.
На моём примере.
Cрабатывает правило:
defineRule("input_MR6C_COUNT2", {
whenChanged: "wb-mr6c_132/Input 2 counter",
then: function (newValue, devName, cellName) {
dev["wb-mr6c_132"]["K4"] = !dev["wb-mr6c_132"]["K4"];
}
});
Соответственно, пока не увеличится счётчик и не сработает вновь.
Что видно в /var/log/messages:
- В 05:28:41 старт устройства (в этом случае устройство именно перезагрузилось, а не просто упавший wb-rules):
Feb 26 05:28:41 trailer-wb6 systemd-fsck[99]: rootfs: clean....
[cut]
Feb 26 05:29:42 trailer-wb6 wb-rules[2037]: INFO: /usr/share/wb-rules/load_alarms.js is NOT under source root /etc/wb-rules
Feb 26 05:29:42 trailer-wb6 wb-rules[2037]: INFO: all rule files are loaded
[cut]
Feb 26 05:29:55 trailer-wb6 wb-mqtt-serial[2066]: INFO: [modbus] Init: Restore Last Outputs State After Power On: setup register <modbus:132:holding: 6> <-- 0 (0x0)
Feb 26 05:29:55 trailer-wb6 wb-mqtt-serial[2066]: INFO: [modbus] Init: disable legacy input mode control: setup register <modbus:132:holding: 5> <-- 0 (0x0)
- В 05:29:06 сработало правило по whenChanged: “wb-mr6c_132/Input 2 counter” (log(" … ") специально добавлен в одно из правил для ловли “блох”).
Feb 26 05:29:56 trailer-wb6 wb-rules[2037]: INFO: [rule info] debug counter 2 change. newValue: 32/32
Физически никто ничего не замыкал (кнопкой). Электропитание шлюза и модуля не пропадало. Значение счётчика = 32. Предыдущее значение (на случай дебага храню его в специально созданном dev.MR6C_132[‘count2’]), так же = 32.
- Устройство продолжает загрузку (132 – MR6C):
Feb 26 05:29:57 trailer-wb6 wb-mqtt-serial[2066]: INFO: [serial client] device modbus:132 is connected
- 05:30:05, спустя ~9 секунд вновь срабатывает правило по whenChanged: “wb-mr6c_132/Input 2 counter”:
Feb 26 05:30:05 trailer-wb6 wb-rules[2037]: INFO: [rule info] debug counter 2 change. newValue: 44/32
Соответствующее значение newValue = 44. Хранимое в dev.MR6C_132[‘count2’] = 32. Откуда увеличение на 12?.. Не понятно.
- Далее случается такое:
Feb 26 05:30:08 trailer-wb6 systemd[1]: wb-mqtt-serial.service: Main process exited, code=killed, status=4/ILL
Feb 26 05:30:08 trailer-wb6 systemd[1]: wb-mqtt-serial.service: Unit entered failed state.
Feb 26 05:30:08 trailer-wb6 systemd[1]: wb-mqtt-serial.service: Failed with result 'signal'.
Feb 26 05:30:09 trailer-wb6 systemd[1]: wb-mqtt-serial.service: Service hold-off time over, scheduling restart.
[cut]
Feb 26 05:30:43 trailer-wb6 systemd[1]: Started Initialize Wiren Board on successful boot.
- Ииии… По второму кругу. Срабатывает Input counter:
Feb 26 05:30:43 trailer-wb6 wb-rules[2037]: INFO: [rule info] debug counter 2 change. newValue: 32/32
[cut]
Feb 26 05:30:45 trailer-wb6 wb-mqtt-serial[7128]: INFO: [serial client] device modbus:132 is connected
- Вновь сработал:
Feb 26 05:30:48 trailer-wb6 wb-rules[2037]: INFO: [rule info] debug counter 2 change. newValue: 44/32
На этот раз всего время между срабатыванием меньше, около пяти секунд.
*** Так как есть возможность наблюдать за работой реле (камеры/архив - реле работает на свет, световой сигнал, насосы), могу сообщить:
- Реле wb-mr6c_132/K4 (по Input 2 counter) включилось (до перезагрузки оно было выключено) в ~05:30:06, что очень близко по времени с п. 4.
- В~05:30:49 резе отключилось, что близко по времени к событию из п.7.
Итого в сухом остатке: в этом конкретно случае Input 2 counter сработал аж четыре раза, но команда изменения состояния до реле добралась всего два ВКЛ-ВЫКЛ (43 секунды)
Так что, всякое возможно…