Помощь с правилом

Добрый день, приобрел 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.

1 лайк

Большое спасибо за объяснение.