Добрый день, приобрел WB но не разобрался JS. Помогите пожалуйста с правилом.
Необходимо сделать правило которое будет включать свет в помещении командой с физического выключателя(сигнал приходит на /devices/wb-gpio/controls/EXT1_IN1) или с кнопки на веб сайте (сделан по примеру: Wi-fi точка доступа плюс клиент - #9 от пользователя sansa26). Но там как я понял он создавал виртуальное устройство для этого, у меня не получилось.
Добрый день.
В документации есть пример такого правила.
Покажите ваше правило и что именно у вас не получается?
На виртуальное устройство тоже надо отправлять в топик с /on?
В виртуальном устройстве вы задаете свои контролы. Если тип контрола указан как “switch”, то по событию изменения состояния с выключателя — вам необходимо изменить его значение на “true” или “false”. Про создание виртуальных устройств можете прочитать на гитхабе.
А как работает эта функция then: function (newValue, devName, cellName)? Она реверсирует текущее значение на выходе или присваивает значение входа к выходу?
Вот мое решение:
defineRule({
whenChanged: "wb-gpio/EXT1_IN1",
then: function (newValue, devName, cellName) {
dev["wb-mr6cu_74/K1"] = (dev["wb-mr6cu_74/K1"] == "0") ? "1" : "0";
}
});
На сайте аналогично.
В then
определяется функция, которая выполняется при срабатывании правила.
Если взять пример из документации:
defineVirtualDevice("simple_test", {
title: "Simple switch",
cells: {
enabled: {
type: "switch",
value: false
},
}
});
defineRule("simple_switch", {
whenChanged: "simple_test/enabled",
then: function (newValue, devName, cellName) {
dev["wb-gpio/Relay_2"] = newValue;
dev["wb-mrm2_6/Relay 1"] = newValue;
}
});
То в теле данной функции контролы wb-gpio/Relay_2
и wb-mrm2_6/Relay 1
меняют свое значение на newValue
, которое в свою очередь равно значению simple_test/enabled
.
Например, если simple_test/enabled
равно true
, то и newValue
будет равно true
.
Большое спасибо за объяснение.