Добрый день, захотел создать автоматизацию для лампы, управляемой по протоколу DALI и не смог
Попробовал написать вместе с ИИ-ассистентом тестовый скрипт, но он не работает, падает с ошибкой:
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? Надеюсь, с остальным смогу разобраться по аналогии 
Напишите пожалуйста, вот это:
что за контрол?
То есть - в какое имя контрола он должен разрешаться?
Конвенция в текущем виде подразумевает два уровня. Устройство/контрол. Тут вижу три.
Да, и присваиваете значение 1. Это для булевых работать не будет, нужно явно указывать “true”.