Движок правил wb-rules: различия между версиями

Нет описания правки
Строка 12: Строка 12:


== Структура правила ==
== Структура правила ==
Правила бывают двух типов - непосредственно правила (начинаются со слов ''defineRule'') и виртуальные устройства (начинаются со слов ''defineVirtualDevice''). Виртуальные устройства - это появляющиеся в веб-интерфейсе новые "виртуальные" элементы управления - например, кнопка-выключатель, которая на самом деле выключает два устройства одновременно.
Любое количество разных правил можно хранить в одном файле. Обычно в одном файле хранятся правила, отвечающие за одну функцию.
Сначала разберём обычное правило:
<syntaxhighlight lang="ecmascript">
defineRule("motion_detector", { //название правила - motion_detector
  whenChanged: "wb-gpio/D1_IN", //при изменении состояния канала wb-gpio/D1_IN
  then: function (newValue, devName, cellName) {
dev["wb-gpio"]["Relay_2"] = newValue;
dev["wb-mrm2_6"]["Relay 1"] = newValue;
  }
});
</syntaxhighlight>
То же самое, но с виртуальным девайсом в качестве источника событий. Пример использования: сценарная кнопка, которая включает/выключает сирену и лампочку.
<syntaxhighlight lang="ecmascript">
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;
  }
});
</syntaxhighlight>


Список типов контролов (каналов устройств) в интерфейсе: https://github.com/contactless/homeui/blob/contactless/conventions.md
Список типов контролов (каналов устройств) в интерфейсе: https://github.com/contactless/homeui/blob/contactless/conventions.md