|
Метка: новое перенаправление |
(не показано 26 промежуточных версий 2 участников) |
Строка 1: |
Строка 1: |
| <languages/>
| | #REDIRECT [[Wb-rules]] |
| <translate>
| |
| <!--T:1-->
| |
| [[File:Wb rules demo.png|400px|thumb|right|Редактирование правил в веб-интерфейсе]] | |
| Для контроллера можно писать правила, например: "Если температура датчика меньше 18°С, включи нагреватель". Правила создаются через [[Special:MyLanguage/Веб-интерфейс Wiren Board|веб-интерфейс]] и пишутся на простом языке, похожем на Javascript.
| |
| | |
| <!--T:2-->
| |
| Самое полное описание движка правил: https://github.com/contactless/wb-rules
| |
| | |
| | |
| | |
| == Совместимость скриптов при обновлении wb-rules ==
| |
| | |
| Предполагается, что при обновлении с предыдущей на следующую версию wb-rules и при соблюдении гайдлайнов при написании скриптов - все сценарии продолжают работать без каких-либо изменений.
| |
| Но возможны проблемы в связи с изменением логики обработки скриптов новыми версиями движка, см. [[Совместимость скриптов при обновлении wb-rules| Совместимость скриптов]].
| |
| | |
| == Как создавать и редактировать правила == <!--T:3-->
| |
| | |
| <!--T:4-->
| |
| *Список файлов с правилами на странице ''Scripts'' веб-интерфейса.
| |
| *Для редактирования правила нажмите на название файла.
| |
| *Для создания нового правила, нажмите на ''New...'', вверху введите название (латинские буквы и цифры, в качестве расширения укажите ''.js''), в основное поле введите текст скрипта, и нажмите ''Save'' вверху.
| |
| *Правило начинает сразу работать после сохранения, если в нём нет ошибок (смотрите ниже).
| |
| Примечания:
| |
| #Файлы с правилами хранятся на контроллере в виде текстовых файлов в папке <code>/etc/wb-rules/</code>, поэтому [[Special:MyLanguage/Просмотр файлов контроллера с компьютера|их можно редактировать и загружать напрямую с компьютера]].
| |
| #Правила исполняются сервисом ''wb-rules'', документацию по нему смотрите на [https://github.com/contactless/wb-rules странице сервиса в Github].
| |
| | |
| == Пишем первое правило == <!--T:5-->
| |
| | |
| <!--T:6-->
| |
| [[File:Web-scripts-rule1.png|400px|thumb|Правило для управления обогревателем, записанное через веб-интерфейс]]
| |
| | |
| <!--T:7-->
| |
| Правила делятся на два типа: непосредственно правила (начинаются со слов ''defineRule'') и виртуальные устройства (начинаются со слов ''defineVirtualDevice''). Виртуальные устройства - это новые элементы управления в веб-интерфейсе - например, кнопка-выключатель, которая на самом деле выключает два устройства одновременно. Кнопка не привязана напрямую ни к какому физическому устройству, а действия при её нажатии определяются написанным вами скриптом.
| |
| | |
| <!--T:8-->
| |
| В одном файле можно хранить неограниченное количество правил. Но обычно в одном файле хранятся правила с близкими функциями.
| |
| | |
| | |
| | |
| === Первое правило === <!--T:9-->
| |
| | |
| <!--T:10-->
| |
| Для начала разберём простое правило "при превышении температуры - выключи обогреватель". Температуру получаем с датчика [[Special:MyLanguage/1-Wire|1-Wire]], обогреватель подключён к Реле 1 внешнего релейного модуля [[Special:MyLanguage/WB-MRM2|WB-MRM2]].
| |
| <syntaxhighlight lang="ecmascript">
| |
| | |
| <!--T:11-->
| |
| 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"] = 0; //установи Реле 1 модуля WB-MRM2 с адресом 130 в состояние "выключено"
| |
| } else {
| |
| dev["wb-mrm2_130"]["Relay 1"] = 1; //установи Реле 1 модуля WB-MRM2 с адресом 130 в состояние "включено"
| |
| }
| |
| }
| |
| });
| |
| | |
| <!--T:12-->
| |
| </syntaxhighlight>
| |
| *Первая строка - кодовое слово ''defineRule'' и название правила
| |
| *Вторая строка - кодовое слово для определения, когда выполняется правило, - ''whenChanged'' - "при изменении параметра", далее название параметра, при изменении которого запустится правило - температура с датчика 1-Wire. Название параметра записывается в виде "Device/Control", где названия ''Device'' и ''Control'' для каждого параметра можно найти на странице ''Settings'' веб-интерфейса, в таблице ''MQTT Channels''.
| |
| *Третья строка - начало функции, которая будет исполняться
| |
| *Затем идёт условие - "если значение температуры больше порогового, то ...". Значение параметра записывается в виде ''dev[Device][Control]'' - заметьте, оно отличается от вида записи параметра, при изменении которого запускается правило, потому что там речь идёт о ''параметре'', а здесь - о ''значении'' того же параметра.
| |
| *Затем мы выставляем значения для реле в каждом случае - ''0'' - "выключено", ''1'' - "включено". Названия ''Device'' и ''Control'' для реле смотрим всё в той же таблице ''MQTT Channels'', на странице ''Settings'' веб-интерфейса.
| |
| | |
| === Первое правило с виртуальным устройством === <!--T:13-->
| |
| | |
| <!--T:14-->
| |
| Создаём виртуальный переключатель, при нажатии на который переключаются сразу два реле.
| |
| | |
| <!--T:15-->
| |
| <syntaxhighlight lang="ecmascript">
| |
| defineVirtualDevice("switch_both", {
| |
| title: "Switch both relays",
| |
| cells: {
| |
| enabled: {
| |
| type: "switch",
| |
| value: false
| |
| },
| |
| }
| |
| });
| |
| | |
| <!--T:16-->
| |
| defineRule("control_both", {
| |
| whenChanged: "switch_both/enabled",
| |
| then: function (newValue, devName, cellName) {
| |
| dev["wb-mrm2_130"]["Relay 1"] = newValue;
| |
| dev["wb-mrm2_130"]["Relay 2"] = newValue;
| |
| }
| |
| });
| |
| </syntaxhighlight>
| |
| | |
| | |
| | |
| === Пишем сложные правила === <!--T:17-->
| |
| | |
| <!--T:18-->
| |
| Чтобы начать писать сложные правила, нужно посмотреть примеры правил и полную документацию по движку правил:
| |
| #Примеры правил:
| |
| #* на этой же странице ниже;
| |
| #* в [http://forums.contactless.ru/t/dvizhok-pravil-primery-koda/483 специальной теме на нашем форуме ].
| |
| #[https://github.com/contactless/wb-rules Полное описание движка правил].
| |
| | |
| == Примеры правил == <!--T:19-->
| |
| Примеры правил смотрите в статье [[Rule Examples|Примеры правил]].
| |
| | |
| == Полное описание возможностей движка правил == <!--T:191-->
| |
| | |
| <!--T:192-->
| |
| Самое полное описание движка правил: https://github.com/contactless/wb-rules/blob/master/README.md
| |
| | |
| | |
| | |
| == Новые возможности последних версий == <!--T:193-->
| |
| | |
| <!--T:194-->
| |
| * [[Special:MyLanguage/Движок_правил_wb-rules_1.7|Движок правил wb-rules 1.7]]
| |
| | |
| | |
| | |
| == В разработке == <!--T:195-->
| |
| | |
| <!--T:196-->
| |
| Описание возможностей будущих версий движка правил можно прочесть здесь:
| |
| * [[Special:MyLanguage/Движок_правил_wb-rules_2.0|Движок правил wb-rules 2.0]]
| |
| | |
| </translate>
| |