WB-DALI3 управление лампой через wb-rules

Добрый день, захотел создать автоматизацию для лампы, управляемой по протоколу DALI и не смог :frowning: Попробовал написать вместе с ИИ-ассистентом тестовый скрипт, но он не работает, падает с ошибкой:

ECMAScript error: TypeError: invalid base value
duk_hobject_props.c:2904
anon /etc/wb-rules/DALI_test.js:23 preventsyield
call native strict preventsyield
anon /usr/share/wb-rules-system/scripts/lib.js:234 preventsyield

Сам скрипт выглядит вот так:

defineVirtualDevice(“virt_lamp”, {
title: { en: “Lamp control”, ru: “Управление лампой” },
cells: {
switch: {
title: { en: “Lamp”, ru: “Лампа” },
type: “switch”,
value: false
}
}
});

defineRule(“virt_lamp_to_dali”, {
whenChanged: “virt_lamp/switch”,
then: function (newValue) {
log(“virt_lamp/switch changed to {}”, newValue);

var dali = getDevice("wb-dali_14_bus_1_1");
log("dali device = {}", dali);

if (newValue) {
  dali.controls.on_and_step_up = 1;
} else {
  dali.controls.off = 1;
}

}
});

Можете подсказать куда смотреть, чтобы освоить базовое управление DALI-устройствами или группами через wb-rules? Или это все надо пробрасывать в HA или NodeRed и там с этим работать?

Добрый день.

Рекомендую для начала посмотреть наши обучающие видео про движок правил wb-rules (в частности урок №11 про написание скриптов), но лучше пересмотреть все уроки там рассказывается база про топики и контролы.
Параллельно изучить документацию и дополнительно на github, на основе примеров правил вы сможете писать правильно скрипты.

Для помощи кстати можете использовать нашу ИИ, бот вполне неплохо справляется с простыми правилами.

По самим wb-rules я нашел документацию, это оказалось не сложно. Меня интересует как управлять устройствами DALI, например, просто включить лампу. Я не понимаю в какой контрол я должен писать. Правило из вопроса как раз сгенерировал ИИ-бот, но оно не работает. Поиски документации, привели меня к вот этому репозиторию dali-prototype/wb-rules/dali_control.js at main · wirenboard/dali-prototype · GitHub Но там как-то страшно

defineRule(“OFF_button_”, {
whenChanged: “Dali_control/OFF_button”, // топик, при изменении которого сработает правило
then: function (newValue, devName, cellName) {
var dali_address = dev[“Dali_control/set_dali_address”];

    var message = (((dali_address << 1) + 1) << 8) + 0;

    dev[daliGateName + "/" + daliGateChannel + "_transmit_16bit_forward"] = message;

}

});

Неужели, чтобы управлять устройствами надо использовать числа и вычислять смещения, если устройства находятся на другой шине?

Можете простой пример скинуть, как просто включить лампу DALI на wb-rules? Надеюсь, с остальным смогу разобраться по аналогии :slight_smile:

Напишите пожалуйста, вот это:

что за контрол?
То есть - в какое имя контрола он должен разрешаться?
Конвенция в текущем виде подразумевает два уровня. Устройство/контрол. Тут вижу три.
Да, и присваиваете значение 1. Это для булевых работать не будет, нужно явно указывать “true”.

Да, спасибо!

Вот так работает

dev[“wb-dali_14_bus_1_1/on_and_step_up”] = true;