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

Материал из Wiren Board
Строка 20: Строка 20:
Примечания:
Примечания:
#Файлы с правилами хранятся на контроллере в виде текстовых файлов в папке <code>/etc/wb-rules/</code>, поэтому [[Special:MyLanguage/Просмотр файлов контроллера с компьютера|их можно редактировать и загружать напрямую с компьютера]].
#Файлы с правилами хранятся на контроллере в виде текстовых файлов в папке <code>/etc/wb-rules/</code>, поэтому [[Special:MyLanguage/Просмотр файлов контроллера с компьютера|их можно редактировать и загружать напрямую с компьютера]].
#Правила исполняются сервисом ''wb-rules'', документацию по нему смотрите на [https://github.com/contactless/wb-rules странице сервиса в Github].


== Как писать правила ==
== Как писать правила ==

Версия 11:54, 17 марта 2021

Редактирование правил в веб-интерфейсе

Для контроллера можно писать правила, например: "Если температура датчика меньше 18°С, включи нагреватель". Правила создаются через веб-интерфейс и пишутся на простом языке, похожем на Javascript.

Совместимость скриптов при обновлении wb-rules

Предполагается, что при обновлении с предыдущей на следующую версию wb-rules и при соблюдении гайдлайнов при написании скриптов - все сценарии продолжают работать без каких-либо изменений. Но возможны проблемы в связи с изменением логики обработки скриптов новыми версиями движка, см. Совместимость скриптов.

Как создавать и редактировать правила

  • Список файлов с правилами находится на странице Rules веб-интерфейса.
  • Для редактирования правила нажмите на название файла.
  • Для создания нового правила, нажмите на New..., вверху введите название (латинские буквы и цифры, в качестве расширения укажите .js), в основное поле введите текст скрипта, и нажмите Save вверху.
  • Правило начинает сразу работать после сохранения, если в нём нет ошибок.
  • В одном файле можно хранить неограниченное количество правил. Но обычно в одном файле хранятся правила с близкими функциями.

Примечания:

  1. Файлы с правилами хранятся на контроллере в виде текстовых файлов в папке /etc/wb-rules/, поэтому их можно редактировать и загружать напрямую с компьютера.

Как писать правила

Описание смотрите в статье Как писать правила.

Самое полное описание движка правил: https://github.com/contactless/wb-rules/blob/master/README.md

Примеры правил

Примеры правил смотрите:

Пишем первое правило

Правило для управления обогревателем, записанное через веб-интерфейс

Правила делятся на два типа: непосредственно правила (начинаются со слов defineRule) и виртуальные устройства (начинаются со слов defineVirtualDevice). Виртуальные устройства - это новые элементы управления в веб-интерфейсе - например, кнопка-выключатель, которая на самом деле выключает два устройства одновременно. Кнопка не привязана напрямую ни к какому физическому устройству, а действия при её нажатии определяются написанным вами скриптом.

Первое правило

Для начала разберём простое правило "при превышении температуры - выключи обогреватель". Температуру получаем с датчика 1-Wire, обогреватель подключён к Реле 1 внешнего релейного модуля WB-MRM2.

defineRule("heater_control", { //название правила - "контроль обогревателя", может быть произвольным
  whenChanged: "wb-w1/28-0115a48fcfff", //при изменении состояния датчика 1-Wire с идентификатором 28-0115a48fcfff
  then: function (newValue, devName, cellName) { //выполняй следующие действия
    if ( newValue > 30) { //если температура датчика больше 30 градусов
      dev["wb-mrm2_130"]["Relay 1"] = false; //установи Реле 1 модуля WB-MRM2 с адресом 130 в состояние "выключено"
    } else {
      dev["wb-mrm2_130"]["Relay 1"] = true; //установи Реле 1 модуля WB-MRM2 с адресом 130 в состояние "включено"
    }
  }
});
  • Первая строка - кодовое слово defineRule и название правила
  • Вторая строка - кодовое слово для определения, когда выполняется правило, - whenChanged - "при изменении параметра", далее название параметра, при изменении которого запустится правило - температура с датчика 1-Wire. Название параметра записывается в виде "Device/Control", где названия Device и Control для каждого параметра можно найти на странице Settings веб-интерфейса, в таблице MQTT Channels.
  • Третья строка - начало функции, которая будет исполняться
  • Затем идёт условие - "если значение температуры больше порогового, то ...". Значение параметра записывается в виде dev[Device][Control] - заметьте, оно отличается от вида записи параметра, при изменении которого запускается правило, потому что там речь идёт о параметре, а здесь - о значении того же параметра.
  • Затем мы выставляем значения для реле в каждом случае - false - "выключено", true - "включено". Названия Device и Control для реле смотрим всё в той же таблице MQTT Channels, на странице Settings веб-интерфейса.

Новые возможности последних версий

В разработке

Описание возможностей будущих версий движка правил можно прочесть здесь: