Не могу запустить “setTimeout” с аргументами. Не знаю, почему не работает.
Вот пример скрипта:
// Запуск пищалки…
function buzzer_On(devName_,cellName_) // f1
{
dev[devName_][cellName_] = 1;
}
function buzzer_Off_1(devName_1,cellName_1) // f2
{
dev[devName_1][cellName_1] = 0;
}
function buzzer_Off_2() //f3
{
dev[“buzzer”][“enabled”] = 0;
}
buzzer_On(“buzzer”, “enabled”); //go f1 - ok!
setTimeout(buzzer_Off_1, 100, “buzzer”, “enabled”); //go f2 - не работает ???
setTimeout(buzzer_Off_2, 1000); //go f3 - ok!
Нажмите на гаечный ключ, включите отладку.
В функции добавьте отладочную печать log()
, чтобы видеть, какие места выполняются.
Покажите, что получится.
Этот “тонкий” маневр пока не по зубам)… Объясню словами.
В скрипте 3 оператора:
-
“buzzer_On(“buzzer”, “enabled”)” - включает пищалку (работает, и в функцию аргументы передаются)
-
“setTimeout(buzzer_Off_1, 100, “buzzer”, “enabled”)” - запуск через 100 ms такой же подобной функции на выключение пищалки - не выключается.
-
“setTimeout(buzzer_Off_2, 1000)” - повтор шага 2 через 1 сек, но уже без аргументов - пищалка выключается (хотя должна была выключиться через 100ms на шаге 2).
Понятно, что проблема в строке “setTimeout(buzzer_Off_1, 100, “buzzer”, “enabled”)” , но никакой ошибки в написании её в скрипте не выдаётся.
Разобрался с “гаечным ключем”)
Вот что выдает:
2020-06-01 16:00:25ECMAScript error: TypeError: invalid base value
duk_hobject_props.c:2000
getDevValue /usr/share/wb-rules-system/scripts/lib.js:37 preventsyield
buzzer_Off_1 /etc/wb-rules/1.js:9 preventsyield
Это логично, только написана она по всем правилам)
… или устройство её не понимает (недоработка Wiren Board).
Что будем делать, если окажется, что ваша?
Присылайте текст правила файлом, посмотрим.
в wb-rules setTimeout
не поддерживает аргументы, передаваемые функции. Это описано в документации.
Вы можете использовать функцию в качестве аргумента. в ней передать аргументы:
function ff(a,b) {
log("ff! {} {}".format(a,b));
}
setTimeout(function() { ff(1,2) }, 1000);
Спасибо за пояснение. Я, видимо, пользовался другими источниками. Дайте, пожалуйста, ссылку на документацию по wb-rules Wiren Board 6 (я пока не очень ориентируюсь в навигации по сайту). Спасибо.
Вот основная статья: https://wirenboard.com/wiki/index.php/Движок_правил_wb-rules
В ней уже ссылки на примеры, подробное описание всех функций, системные правила.
Да. Все нашел. Еще раз спасибо)