Задача - контролировать наличие связи с реле по модбас, и в случае его отсутствия что-то делать. 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);