Запуск функции по "setTimeout" с аргументами

Не могу запустить “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 оператора:

  1. “buzzer_On(“buzzer”, “enabled”)” - включает пищалку (работает, и в функцию аргументы передаются)

  2. “setTimeout(buzzer_Off_1, 100, “buzzer”, “enabled”)” - запуск через 100 ms такой же подобной функции на выключение пищалки - не выключается.

  3. “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

Проблема в 9 строке.

Это логично, только написана она по всем правилам)

… или устройство её не понимает (недоработка Wiren Board).

Что будем делать, если окажется, что ваша?

Присылайте текст правила файлом, посмотрим.

setTimeout.txt (350 Байт)

в 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
В ней уже ссылки на примеры, подробное описание всех функций, системные правила.

Да. Все нашел. Еще раз спасибо)