Движок правил wb-rules: различия между версиями
м (Перенаправление на Wb-rules) Метка: новое перенаправление |
Fizikdaos (обсуждение | вклад) |
||
(не показано 7 промежуточных версий 1 участника) | |||
Строка 1: | Строка 1: | ||
# | <languages/> | ||
<translate> | |||
<!--T:1--> | |||
[[File:Wb rules demo.png|400px|thumb|right|Редактирование правил в веб-интерфейсе]] | |||
Для контроллера можно писать правила, например: "Если температура датчика меньше 18°С, включи нагреватель". Правила создаются через [[Special:MyLanguage/Веб-интерфейс Wiren Board|веб-интерфейс]] и пишутся на простом языке, похожем на Javascript. | |||
== Совместимость скриптов при обновлении wb-rules == | |||
Предполагается, что при обновлении с предыдущей на следующую версию wb-rules и при соблюдении гайдлайнов при написании скриптов - все сценарии продолжают работать без каких-либо изменений. | |||
Но возможны проблемы в связи с изменением логики обработки скриптов новыми версиями движка, см. [[Совместимость скриптов при обновлении wb-rules| Совместимость скриптов]]. | |||
== Как создавать и редактировать правила == <!--T:3--> | |||
<!--T:4--> | |||
*Список файлов с правилами находится на странице ''Rules'' веб-интерфейса. Они хранятся на контроллере текстовыми файлов в папке <code>/etc/wb-rules/</code>, поэтому [[Special:MyLanguage/Просмотр файлов контроллера с компьютера|их можно редактировать и загружать напрямую с компьютера]]. | |||
*Для редактирования правила нажмите на название файла. | |||
*Для создания нового правила, нажмите на ''New...'', вверху введите название (латинские буквы и цифры, в качестве расширения укажите ''.js''), в основное поле введите текст скрипта, и нажмите ''Save'' вверху. | |||
*Правило начинает сразу работать после сохранения, если в нём нет ошибок. | |||
*В одном файле можно хранить неограниченное количество правил. Но обычно в одном файле хранятся правила с близкими функциями. | |||
Примечания: | |||
# | |||
== Как писать правила == | |||
Описание смотрите в статье [[How_to_write_rules|Как писать правила]]. | |||
Самое полное описание движка правил: https://github.com/contactless/wb-rules/blob/master/README.md | |||
== Примеры правил == | |||
Примеры правил смотрите: | |||
* в статье [[Rule_Examples|Примеры правил]]; | |||
* в [http://forums.contactless.ru/t/dvizhok-pravil-primery-koda/483 специальной теме на портале техподдержки ]. | |||
== Пишем первое правило == <!--T:5--> | |||
<!--T:6--> | |||
[[File:Web-scripts-rule1.png|400px|thumb|Правило для управления обогревателем, записанное через веб-интерфейс]] | |||
<!--T:7--> | |||
Правила делятся на два типа: непосредственно правила (начинаются со слов ''defineRule'') и виртуальные устройства (начинаются со слов ''defineVirtualDevice''). Виртуальные устройства - это новые элементы управления в веб-интерфейсе - например, кнопка-выключатель, которая на самом деле выключает два устройства одновременно. Кнопка не привязана напрямую ни к какому физическому устройству, а действия при её нажатии определяются написанным вами скриптом. | |||
=== Первое правило === <!--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"] = false; //установи Реле 1 модуля WB-MRM2 с адресом 130 в состояние "выключено" | |||
} else { | |||
dev["wb-mrm2_130"]["Relay 1"] = true; //установи Реле 1 модуля WB-MRM2 с адресом 130 в состояние "включено" | |||
} | |||
} | |||
}); | |||
<!--T:12--> | |||
</syntaxhighlight> | |||
*Первая строка - кодовое слово ''defineRule'' и название правила | |||
*Вторая строка - кодовое слово для определения, когда выполняется правило, - ''whenChanged'' - "при изменении параметра", далее название параметра, при изменении которого запустится правило - температура с датчика 1-Wire. Название параметра записывается в виде "Device/Control", где названия ''Device'' и ''Control'' для каждого параметра можно найти на странице ''Settings'' веб-интерфейса, в таблице ''MQTT Channels''. | |||
*Третья строка - начало функции, которая будет исполняться | |||
*Затем идёт условие - "если значение температуры больше порогового, то ...". Значение параметра записывается в виде ''dev[Device][Control]'' - заметьте, оно отличается от вида записи параметра, при изменении которого запускается правило, потому что там речь идёт о ''параметре'', а здесь - о ''значении'' того же параметра. | |||
*Затем мы выставляем значения для реле в каждом случае - ''false'' - "выключено", ''true'' - "включено". Названия ''Device'' и ''Control'' для реле смотрим всё в той же таблице ''MQTT Channels'', на странице ''Settings'' веб-интерфейса. | |||
== Новые возможности последних версий == <!--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> |
Версия 11:55, 17 марта 2021
Для контроллера можно писать правила, например: "Если температура датчика меньше 18°С, включи нагреватель". Правила создаются через веб-интерфейс и пишутся на простом языке, похожем на Javascript.
Совместимость скриптов при обновлении wb-rules
Предполагается, что при обновлении с предыдущей на следующую версию wb-rules и при соблюдении гайдлайнов при написании скриптов - все сценарии продолжают работать без каких-либо изменений. Но возможны проблемы в связи с изменением логики обработки скриптов новыми версиями движка, см. Совместимость скриптов.
Как создавать и редактировать правила
- Список файлов с правилами находится на странице Rules веб-интерфейса. Они хранятся на контроллере текстовыми файлов в папке
/etc/wb-rules/
, поэтому их можно редактировать и загружать напрямую с компьютера.
- Для редактирования правила нажмите на название файла.
- Для создания нового правила, нажмите на New..., вверху введите название (латинские буквы и цифры, в качестве расширения укажите .js), в основное поле введите текст скрипта, и нажмите Save вверху.
- Правило начинает сразу работать после сохранения, если в нём нет ошибок.
- В одном файле можно хранить неограниченное количество правил. Но обычно в одном файле хранятся правила с близкими функциями.
Примечания:
Как писать правила
Описание смотрите в статье Как писать правила.
Самое полное описание движка правил: 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 веб-интерфейса.
Новые возможности последних версий
В разработке
Описание возможностей будущих версий движка правил можно прочесть здесь: