Здравствуйте!
Может кто-нибудь знает, как заставить работать whenChanged: [функция, параметр]?
В документации wb-rules:
wb-rules/README.md at master · wirenboard/wb-rules · GitHub
whenChanged. При заданииwhenChanged
правило срабатывает при любых изменениях значений параметров, указанных в массиве.
Также в документации приведён пример с использованием функции в качестве одного из элементов этого массива:
defineRule("funcValueChange2", { whenChanged: [ ... "somedev/cellforfunc1", function () { return dev["somedev/cellforfunc2"] > 3; } ], then: function (newValue, devName, cellName) { ...
Но на тестовом стенде никак не получается реализовать такое срабатывание правила whenChanged ;(
Привожу пример тестового кода и сам файл - в нём приведено три варианта whenChanged - два простых: функция отдельно и параметр отдельно и третий комбинированный с массивом.
При указании whenChanged массива с функцией и параметром, правила срабатывает только по изменению параметра - переключению ручки на виртуальном устройстве, изменение функции с таймером игнорируется.
/*
* Bugreport script for whenChanged: [FUNC, "DEV/CHANNEL"]
*
*/
defineVirtualDevice(
"virt-dev_248", {
title: "Test Second input for whenChanged",
cells: {
sw: {
readonly: false,
type: "switch",
value: false
}
}
})
/*
* Проверка передачи двойных встроенных функций
*
*/
function time () {
var actualDate = new Date()
if (actualDate.getSeconds() % 3 == 0) {
return actualDate.getSeconds();
}
}
log.info(time());
log.info("=== Activate a Rule for 15 seconds");
// Test different options in whenChanged
var testRule = defineRule("test func and parameter", {
// OK: switch toggle triggers whenChanged
// whenChanged: ["virt-dev_248/sw"],
// OK: time() triggers whenChanged)
// whenChanged: function () { return time(); },
// FAILED: time() doesn't trigger whenChanged
// whenChanged: ["virt-dev_248/sw", function () { return time(); }],
whenChanged: [function () { return time(); }, "virt-dev_248/sw"],
then: function (newValue, devName, cellName) {
log.info("Rule execution...");
log.info(time());
}
});
setTimeout(function () {
log.info("=== Disable the Rule");
disableRule(testRule);
}, 15 * 1000);
test-functions-bugreport.js.txt (1.2 KB)
Wiren Board 6.7.2
wb-rules:2.11.4