Проверка на наличие связи с modbus устройством

Задача - контролировать наличие связи с реле по модбас, и в случае его отсутствия что-то делать. vehicle - это виртуальное устройство.
wb-rules 2.6.3 armhf Wiren Board Rule Engine

Вариант 1, на основе примера с wiki. Такой вариант Работает! За одним исключением.
Если перезагрузить службу wb-rules, или изменить файл с правилами, состояние dev[“vehicle”][“ModBUS_OK”] не станет актуальным, пока не произойдет изменение состояния модбас.
То есть пока не сработает триггер “whenChanged: “wb-mr6c_1/Serial NO#error””

defineRule("ModBus_status", {
    whenChanged: "wb-mr6c_1/Serial NO#error",
    then: function (newValue, devName, cellName) {
		log ("ModBUS error = ", dev["wb-mr6c_1/Serial NO#error"]);
        if(newValue !== "") {
          dev["vehicle"]["ModBUS_OK"] = false;
        } else {
          dev["vehicle"]["ModBUS_OK"] = true;
        }
    }
});


function Main_update_Loop() {

	   if (dev["vehicle"]["ModBUS_OK"] == true) 
			{ 
				get_Bunker_level_sensors();
                dev["vehicle"]["unloader_bypass"] = unloader_bypass_in;
                dev["vehicle"]["BUNKER_SAP_ID"]   = String(dev["wb-mr6c_1"]["Serial NO"]);
                dev["vehicle"]["DEVICE_ID"]       = dev["network_extended"]["Wi-Fi MAC"].replace(/:/g, '');
			
				if (log_debug) log("MainLoop2(Serial NO) = ", String(dev["wb-mr6c_1"]["Serial NO"]));
			}
		else 
			{ 
				dev["vehicle"]["BUNKER_SAP_ID"] = "0000000000";
			}
    };
setInterval(Main_update_Loop, 1000);

Вариант, в котором я попытался объединить все в одной, периодически вызываемой функции:
Такой вариант не работает!
2021-05-26 12:38:17ModBUS error = undefined
2021-05-26 12:38:18ModBUS error = undefined
Выключаем модбас, и вроде все ок.
2021-05-26 12:38:44ModBUS error = r
2021-05-26 12:38:45ModBUS error = r
2021-05-26 12:38:46ModBUS error = r
2021-05-26 12:38:47ModBUS error = r
Включаем и…
2021-05-26 12:39:15ModBUS error = r
2021-05-26 12:39:16ModBUS error = r
2021-05-26 12:39:17ModBUS error = r
2021-05-26 12:39:18ModBUS error = r
Не видим включения.

function Main_update_Loop() {

		log ("ModBUS error = ", dev["wb-mr6c_1/Serial NO#error"]);
        if(dev["wb-mr6c_1/Serial NO#error"] !== "") {
          dev["vehicle"]["ModBUS_OK"] = false;
        } else {
          dev["vehicle"]["ModBUS_OK"] = true;
		}

	   if (dev["vehicle"]["ModBUS_OK"] == true) 
			{ 
				get_Bunker_level_sensors();
                dev["vehicle"]["unloader_bypass"] = unloader_bypass_in;
                dev["vehicle"]["BUNKER_SAP_ID"]   = String(dev["wb-mr6c_1"]["Serial NO"]);
                dev["vehicle"]["DEVICE_ID"]       = dev["network_extended"]["Wi-Fi MAC"].replace(/:/g, '');
			
				if (log_debug) log("MainLoop2(Serial NO) = ", String(dev["wb-mr6c_1"]["Serial NO"]));
			}
		else 
			{ 
				dev["vehicle"]["BUNKER_SAP_ID"] = "0000000000";
			}
    };
setInterval(Main_update_Loop, 1000);

А почему не задавать актальное значение dev[“vehicle”][“ModBUS_OK”] сразу, при создании виртуального устройства? forcedefault=true; value:
Достаточно знать что на момент создания - актуально и не гоняться за постоянным обновлением (зачем?). Произойдет событие - состояние изменится.
Ну и соответствено, периодический вызов для обработки значения - не нужен, достаточно правила.

какие изменения в топиках происходят?

какие изменения в топиках происходят?

Да на вид там все штатно появляется и пропадает, да и реле в веб интерфейсе цвет меняет.
2021-05-26_13-44-00

2021-05-26_13-44-49

А вот значение в рулесах залипает В случайном состоянии.
Сейчас вот так залипло: При любом состоянии модбас.

2021-05-26 13:46:40ModBUS error = undefined
2021-05-26 13:46:41ModBUS error = undefined
2021-05-26 13:46:42ModBUS error = undefined

Главное, что если подергать modbus, то рулесы и упасть могут. Вот только что пришлось их перезапустить.

В журнале что-то такое выдают:

May 26 13:48:50 wirenboard-A4BG5LPW wb-rules[4847]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 2 counter': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 13:48:50 wirenboard-A4BG5LPW wb-rules[4847]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 5': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 13:48:50 wirenboard-A4BG5LPW wb-rules[4847]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 6': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 13:48:50 wirenboard-A4BG5LPW wb-rules[4847]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 3 counter': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 13:48:50 wirenboard-A4BG5LPW wb-rules[4847]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 0': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 13:48:50 wirenboard-A4BG5LPW wb-rules[4847]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 4 counter': strconv.Atoi: parsing "": invalid syntax, ignored

А могут 3-4 раза нормально отработать пропадание modbus, и потом залипнуть.

А почему не задавать актальное значение dev[“vehicle”][“ModBUS_OK”] сразу , при создании виртуального устройства? forcedefault=true; value:
Достаточно знать что на момент создания - актуально и не гоняться за постоянным обновлением (зачем?). Произойдет событие - состояние изменится.
Ну и соответствено, периодический вызов для обработки значения - не нужен, достаточно правила.

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

Далее, с данными из mqtt работает ПО более высокого уровня. И мне проще долбить их данными с переодичностью 1 раз в сек, чем думать о порядке загрузки, и инициализации компонентов, и о том, что они успели или не успели получить из mqtt, даже если там retained данные.

Так, вот это уже симптом. А какая версия wb-rules?

wb-rules 2.6.3 armhf Wiren Board Rule Engine

Попробую воспроизвести.

Попробую воспроизвести.

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

Я вырезал все правила, и начал добавлять их по очереди. В итоге вот это правило приводит к сбоям в работе всего скрипта.
ignition_V =11

defineRule("Ignition_Status", {
    whenChanged: ["power_status/Vin"],
    then: function(newValue) {
		dev["vehicle"]["Vin"] = newValue;
        if (newValue > ignition_V)
            if (dev["vehicle"]["ignition"] != true) dev["vehicle"]["ignition"] = true;
            else return;
        else
        if (dev["vehicle"]["ignition"] != false) dev["vehicle"]["ignition"] = false;
        else return;
    }
});

Без него все работает штатно.

Или даже не так.
Если правил становится много, то они начинают сбоить.
Похоже вне зависимости от какого-то конкретного правила. В любых наборах.
То есть надо под загрузкой процессора это дело проверять.

меня смущеает конструкция…
Почему не так?

            if (newValue > ignition_V){
              dev["vehicle"]["ignition"] = true;
            }
            else{
             dev["vehicle"]["ignition"] = false;
            }

Поясню, явная проверка на true не нужна, так как перед записью оно и так проверяется.

меня смущеает конструкция…

Да я уже вынес это правило в MainLoop и да, сделал его как у вас в сообщении.
Все равно при дерганьи модбаса залипают значения ошибки канала.
При этом в вебинтерфейсе Devices пропадают панели vehicle и WB_MR6C_1 и потом появляются снова.

Вот полный лог, от запуска до смерти вбрулеc. Я модбас не отключал.

root@wirenboard-A4BG5LPW:~# journalctl -f | grep wb-rules
May 26 16:06:05 wirenboard-A4BG5LPW wb-rules[20648]: INFO: driver is created
May 26 16:06:05 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [wbgo_mqtt] rules-wirenboard-A4BG5LPW-20648: MQTT connection established
May 26 16:06:05 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [wbgo_mqtt] MQTT connection lost
May 26 16:06:05 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [wbgo_mqtt] rules-wirenboard-A4BG5LPW-20648: MQTT connection established
May 26 16:06:05 wirenboard-A4BG5LPW wb-rules[20648]: INFO: driver loop is started
May 26 16:06:05 wirenboard-A4BG5LPW wb-rules[20648]: INFO: wait for driver to become ready
May 26 16:06:06 wirenboard-A4BG5LPW wb-rules[20648]: INFO: driver is ready
May 26 16:06:06 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] using file /var/lib/wirenboard/wbrules-persistent.db for persistent DB
May 26 16:06:06 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [wbgo_mqtt] wb-rules-engine-wirenboard-A4BG5LPW-20648: MQTT connection established
May 26 16:06:07 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [engine] Starting main loop
May 26 16:06:07 wirenboard-A4BG5LPW wb-rules[20648]: INFO: the engine is ready
May 26 16:06:07 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [engine] Starting sync loop
May 26 16:06:07 wirenboard-A4BG5LPW wb-rules[20648]: INFO: /usr/share/wb-rules-system/rules/buzzer.js is NOT under source root /etc/wb-rules
May 26 16:06:07 wirenboard-A4BG5LPW wb-rules[20648]: INFO: /usr/share/wb-rules-system/rules/hwmon.js is NOT under source root /etc/wb-rules
May 26 16:06:07 wirenboard-A4BG5LPW wb-rules[20648]: INFO: /usr/share/wb-rules-system/rules/network-extended.js is NOT under source root /etc/wb-rules
May 26 16:06:08 wirenboard-A4BG5LPW wb-rules[20648]: INFO: /usr/share/wb-rules-system/rules/network.js is NOT under source root /etc/wb-rules
May 26 16:06:09 wirenboard-A4BG5LPW wb-rules[20648]: ERROR: command '/bin/sh -c echo 0  > /sys/class/pwm/pwmchip0/export' failed with exit status 1
May 26 16:06:10 wirenboard-A4BG5LPW wb-rules[20648]: INFO: /usr/share/wb-rules-system/rules/power_status.js is NOT under source root /etc/wb-rules
May 26 16:06:11 wirenboard-A4BG5LPW wb-rules[20648]: INFO: /usr/share/wb-rules-system/rules/system.js is NOT under source root /etc/wb-rules
May 26 16:06:12 wirenboard-A4BG5LPW wb-rules[20648]: INFO: /usr/share/wb-rules-system/rules/wb-mqtt-dac.js is NOT under source root /etc/wb-rules
May 26 16:06:13 wirenboard-A4BG5LPW wb-rules[20648]: INFO: /usr/share/wb-rules-system/rules/wbmz-battery.js is NOT under source root /etc/wb-rules
May 26 16:06:14 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] vehicle_conf.unloader_arm_out =  wb-mr6c_1/K4
May 26 16:06:14 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] vehicle_conf.unloader_stuff_count =  wb-mr6c_1/Input 0 counter
May 26 16:06:14 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] vehicle_conf.use_CAN_bunker_level =  0
May 26 16:06:14 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] use_CAN_bunker_level =  0
May 26 16:06:14 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] vehicle_conf.use_CAN_loader =  0
May 26 16:06:14 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] use_CAN_loader =  0
May 26 16:06:14 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] vehicle_conf.use_CAN_unloader =  0
May 26 16:06:14 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] use_CAN_unloader =  0
May 26 16:06:15 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] vehicle_conf.unloader_bypass_in =  wb-gpio/A1_IN
May 26 16:06:15 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] vehicle_conf.vehicle_type =  HARV 20.10.20
May 26 16:06:15 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] vehicle_conf.freq_loop_period =  3001
May 26 16:06:15 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] freq_loop_period =  3001
May 26 16:06:15 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] vehicle_conf.unloader_idle =  10
May 26 16:06:15 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] unloader_idle =  10
May 26 16:06:15 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] vehicle_conf.loader_idle =  10
May 26 16:06:15 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] loader_idle =  10
May 26 16:06:15 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] vehicle_conf.ignition_V =  11
May 26 16:06:15 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ignition_V =  11
May 26 16:06:15 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] vehicle_conf.bunker_levels =  0,25,50,75,100,100
May 26 16:06:15 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] bunker_levels =  0,25,50,75,100,100
May 26 16:06:15 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] Init Vars
May 26 16:06:15 wirenboard-A4BG5LPW wb-rules[20648]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0x1c454c0 false <nil>} [] map[]})
May 26 16:06:16 wirenboard-A4BG5LPW wb-rules[20648]: INFO: /usr/share/wb-rules/load_alarms.js is NOT under source root /etc/wb-rules
May 26 16:06:17 wirenboard-A4BG5LPW wb-rules[20648]: INFO: all rule files are loaded
May 26 16:06:17 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:17 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:20 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:20 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:21 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:21 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:22 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:22 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:23 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:23 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:23 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:24 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:24 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:24 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:25 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:25 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:25 wirenboard-A4BG5LPW wb-rules[20648]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0x1c45500 false <nil>} [] map[]})
May 26 16:06:25 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:25 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:26 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:26 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:27 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:27 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:28 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:28 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:29 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:29 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:30 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:30 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:31 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:31 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:32 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:32 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:33 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:33 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:34 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:34 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:35 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:35 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:35 wirenboard-A4BG5LPW wb-rules[20648]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0x1c45540 false <nil>} [] map[]})
May 26 16:06:36 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:36 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:37 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:37 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:38 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:38 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:39 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:39 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:40 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:40 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:41 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:41 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:42 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:42 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:43 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:43 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:44 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:44 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:45 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:45 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:45 wirenboard-A4BG5LPW wb-rules[20648]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0x1c45580 false <nil>} [/devices/+/meta/driver] map[]})
May 26 16:06:46 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:46 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:47 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:47 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:48 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:48 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:49 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:49 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:49 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Supply voltage': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:49 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Supply voltage: No such control
May 26 16:06:49 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Uptime': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:49 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Uptime: No such control
May 26 16:06:49 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 1': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:49 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 4': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:49 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Input 4: No such control
May 26 16:06:49 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/K6': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:49 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/K6: No such control
May 26 16:06:49 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 2': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:49 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Input 2: No such control
May 26 16:06:50 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:50 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:50 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/max' on control 'wb-mr6c_1/Safety Timer': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Safety Timer': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Safety Timer: No such control
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/K1': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Serial NO': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Serial NO: No such control
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 3': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Input 3: No such control
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/K2': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/K2: No such control
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 0 freq': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Input 0 freq: No such control
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/K3': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/K3: No such control
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/K5': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/K5: No such control
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/K4': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/K4: No such control
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 5 counter': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Input 5 counter: No such control
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 0 counter': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Input 0 counter: No such control
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 2 counter': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Input 2 counter: No such control
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 5': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Input 5: No such control
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 6': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Input 6: No such control
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 3 counter': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Input 3 counter: No such control
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 0': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:51 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Input 0: No such control
May 26 16:06:52 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 4 counter': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:52 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Input 4 counter: No such control
May 26 16:06:52 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 6 freq': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:52 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Input 6 freq: No such control
May 26 16:06:52 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 1 counter': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:52 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Input 1 counter: No such control
May 26 16:06:52 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [driver] Failed to accept '/meta/order' on control 'wb-mr6c_1/Input 6 counter': strconv.Atoi: parsing "": invalid syntax, ignored
May 26 16:06:52 wirenboard-A4BG5LPW wb-rules[20648]: WARNING: [frontend] failed to remove external control wb-mr6c_1/Input 6 counter: No such control
May 26 16:06:52 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS error =  undefined
May 26 16:06:52 wirenboard-A4BG5LPW wb-rules[20648]: INFO: [rule info] ModBUS = true

И еще раз подтверждаю, что проблема проявляется только под большой нагрузкой.
На голом контроллере, только с wb-rules все крутится вполне нормально.

Так, а есть какой-нибудь минисальный пример для воспроизведения?

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

Здравствуйте!

Мигание устройств в интерфейсе - это какой-то совсем нездоровый симптом.
Правило с power_status/Vin действительно может сильно загружать движок правил, потому что значения там меняются часто. Но критичного ничего происходить не должно.

Можете показать, как объявлено устройство vehicle и сколько примерно правил у вас написано?

Да я бы переслал и сам файл. В целом он не большой. Куда его выслать? И я как могу его стараюсь оптимизировать. Вот описание устройства.

defineVirtualDevice("vehicle", {
    title: "vehicle",
    cells: {
        _conf_ver: {
            type: "text",
            value: "NAN",
            forceDefault: true,
            readonly: false
        },
        _vehicle_type: {
            type: "text",
            value: "NAN",
            forceDefault: true,
            readonly: false
        },
        _vehicle_brand: {
            type: "text",
            value: "NAN",
            forceDefault: true,
            readonly: false
        },
        _vehicle_reg_num: {
            type: "text",
            value: "NAN",
            forceDefault: true,
            readonly: false
        },
        ignition: {
            type: "switch",
            value: false,
            forceDefault: true
        },
        bunker_level: {
            type: "value",
            value: 0,
            forceDefault: true
        },
        bunker_level_sens: {
            type: "JSON",
            value: "NULL",
            forceDefault: true
        },
        unloader_rotate: {
            type: "switch",
            value: false,
            forceDefault: true,
        },
        unloader_arm: {
            type: "switch",
            value: false,
            forceDefault: true
        },
        unloader_bypass: {
            type: "switch",
            value: false,
          	readonly: false,
            forceDefault: true
        },
        unloader_arm_confirm: {
            type: "switch",
            value: false,
            forceDefault: true
        },
        unloader_stuff_count: {
            type: "value",
            value: 0
        },
        unloader_freq: {
            type: "value",
            value: 0,
            forceDefault: true
        },
        loader_rotate: {
            type: "switch",
            value: false,
            forceDefault: true
        },
        loader_freq: {
            type: "value",
            value: 0,
            forceDefault: true
        },
        LAMP_1: {
            type: "switch",
            value: false,
            forceDefault: true
        },
        LAMP_2: {
            type: "switch",
            value: false,
            forceDefault: true
        },
        SIRENA: {
            type: "switch",
            value: false,
            forceDefault: true
        },
        alarm_code: {
            type: "value",
            value: 0,
            forceDefault: true
        },
        RFID_1: {
            type: "text",
            value: "No Connection",
            readonly: false,
            forceDefault: true
        },
        RFID_2: {
            type: "text",
            value: "No Connection",
            readonly: false,
            forceDefault: true
        },
        GPSD_TPV: {
            type: "JSON",
            value: "",
          	readonly: false,
            forceDefault: true
        },
        BUNKER_SAP_ID: {
            type: "text",
            value: "000000",
            forceDefault: false
        },
        ModBUS_OK: {
            type: "switch",
            value: false,
            forceDefault: true
        },
        CAN_WDOG: {
            type: "value",
            value: 0,
          	readonly: false,
            forceDefault: true
        },		
        DEVICE_ID: {
            type: "text",
            value: "000000000000",
            readonly: false,
            forceDefault: true
        },
        DG400: {
            type: "JSON",
            value: "",
            readonly: false,
            forceDefault: true
        },
        uptime_minutes: {
            type: "text",
            value: 0,
            forceDefault: true
        },
        status_request: {
            type: "switch",
            value: false,
            forceDefault: true
        },
        Vin: {
            type: "value",
            value: 0
        }
    }
});

А здесь на форуме не даёт загрузить?

Не хотелось бы совсем все тут выкладывать.

Можете мне на почту тогда, если там ничего секретного: nikita.maslov at wirenboard.ru

На почту ушло. Там все файлики необходимые, вроде.