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

Подготовка страницы к переводу
м (Пользовательские поля в интерфейсе)
(Подготовка страницы к переводу)
Строка 1: Строка 1:
<languages/>
<translate>
[[File:Wb rules demo.png|400px|thumb|right|Редактирование правил в веб-интерфейсе]]
[[File:Wb rules demo.png|400px|thumb|right|Редактирование правил в веб-интерфейсе]]
Для контроллера можно писать правила, например: "Если температура датчика меньше 18°С, включи нагреватель". Правила создаются через [[Веб-интерфейс Wiren Board|веб-интерфейс]] и пишутся на простом языке, похожем на Javascript.
Для контроллера можно писать правила, например: "Если температура датчика меньше 18°С, включи нагреватель". Правила создаются через [[Special:MyLanguage/Веб-интерфейс Wiren Board|веб-интерфейс]] и пишутся на простом языке, похожем на Javascript.


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


== Как создавать и редактировать правила ==
== Как создавать и редактировать правила ==
*Список файлов с правилами находится на странице ''Scripts'' веб-интерфейса.
*Список файлов с правилами находится на странице ''Scripts'' веб-интерфейса.
*Нажмите на название файла, чтобы открыть его для редактирования.
*Нажмите на название файла, чтобы открыть его для редактирования.
Строка 10: Строка 14:
*Правило начинает работать автоматически после нажатия кнопки ''Save'', если в нём нет ошибок (смотрите ниже).
*Правило начинает работать автоматически после нажатия кнопки ''Save'', если в нём нет ошибок (смотрите ниже).
Примечания:
Примечания:
#Файлы с правилами хранятся на контроллере в виде обычных текстовых файлов в папке <code>/etc/wb-rules/</code>, поэтому [[Просмотр файлов контроллера с компьютера|их можно редактировать и загружать напрямую с компьютера]].
#Файлы с правилами хранятся на контроллере в виде обычных текстовых файлов в папке <code>/etc/wb-rules/</code>, поэтому [[Special:MyLanguage/Просмотр файлов контроллера с компьютера|их можно редактировать и загружать напрямую с компьютера]].
#Правила исполняются сервисом ''wb-rules'', документацию по нему смотрите [https://github.com/contactless/wb-rules странице сервиса в Github].
#Правила исполняются сервисом ''wb-rules'', документацию по нему смотрите [https://github.com/contactless/wb-rules странице сервиса в Github].


== Пишем первое правило ==
== Пишем первое правило ==
[[File:Web-scripts-rule1.png|400px|thumb|Правило для управления обогревателем, записанное через веб-интерфейс]]
[[File:Web-scripts-rule1.png|400px|thumb|Правило для управления обогревателем, записанное через веб-интерфейс]]


Строка 19: Строка 25:


Любое количество разных правил можно хранить в одном файле. Обычно в одном файле хранятся правила, отвечающие за близкие функции.
Любое количество разных правил можно хранить в одном файле. Обычно в одном файле хранятся правила, отвечающие за близкие функции.


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


Для начала разберём простое правило - при превышении температуры выключи обогреватель. Температуру получаем с датчика [[1-Wire]], обогреватель подключён к Реле 1 внешнего релейного модуля [[WB-MRM2]].
Для начала разберём простое правило - при превышении температуры выключи обогреватель. Температуру получаем с датчика [[Special:MyLanguage/1-Wire|1-Wire]], обогреватель подключён к Реле 1 внешнего релейного модуля [[Special:MyLanguage/WB-MRM2|WB-MRM2]].
<syntaxhighlight lang="ecmascript">
<syntaxhighlight lang="ecmascript">


Строка 42: Строка 49:
*Затем идёт условие - "если значение температуры больше порогового, то ...". Значение параметра записывается в виде ''dev[Device][Control]'' - заметьте, оно отличается от вида записи параметра, при изменении которого запускается правило, потому что там речь идёт о ''параметре'', а здесь - о ''значении'' того же параметра.
*Затем идёт условие - "если значение температуры больше порогового, то ...". Значение параметра записывается в виде ''dev[Device][Control]'' - заметьте, оно отличается от вида записи параметра, при изменении которого запускается правило, потому что там речь идёт о ''параметре'', а здесь - о ''значении'' того же параметра.
*Затем мы выставляем значения для реле в каждом случае - ''0'' - "выключено", ''1'' - "включено". Названия ''Device'' и ''Control'' для реле смотрим всё в той же таблице ''MQTT Channels'' на странице ''Settings'' веб-интерфейса.
*Затем мы выставляем значения для реле в каждом случае - ''0'' - "выключено", ''1'' - "включено". Названия ''Device'' и ''Control'' для реле смотрим всё в той же таблице ''MQTT Channels'' на странице ''Settings'' веб-интерфейса.


=== Первое правило с виртуальным устройством ===
=== Первое правило с виртуальным устройством ===
Создаём виртуальный переключатель, при нажатии на который переключаются сразу два реле.
Создаём виртуальный переключатель, при нажатии на который переключаются сразу два реле.


Строка 65: Строка 74:
});
});
</syntaxhighlight>
</syntaxhighlight>


=== Пишем сложные правила ===
=== Пишем сложные правила ===
Чтобы начать писать сложные правила, нужно посмотреть примеры правил и полную документацию по движку правил:
Чтобы начать писать сложные правила, нужно посмотреть примеры правил и полную документацию по движку правил:
#Примеры правил:
#Примеры правил:
Строка 72: Строка 83:
#* в [http://forums.contactless.ru/t/dvizhok-pravil-primery-koda/483 специальной теме на нашем форуме ].
#* в [http://forums.contactless.ru/t/dvizhok-pravil-primery-koda/483 специальной теме на нашем форуме ].
#[https://github.com/contactless/wb-rules Полное описание движка правил].
#[https://github.com/contactless/wb-rules Полное описание движка правил].


== Примеры правил ==
== Примеры правил ==
=== Слежение за контролом ===
=== Слежение за контролом ===


Строка 123: Строка 137:


</syntaxhighlight>
</syntaxhighlight>


=== Детектор движения c таймаутом ===
=== Детектор движения c таймаутом ===
Строка 157: Строка 172:


</syntaxhighlight>
</syntaxhighlight>


=== Создание однотипных правил ===
=== Создание однотипных правил ===
Если таких детекторов движения нужно несколько, то, чтобы не копировать код, можно обернуть создание правила и переменных в функцию:
Если таких детекторов движения нужно несколько, то, чтобы не копировать код, можно обернуть создание правила и переменных в функцию:


Строка 186: Строка 203:
makeMotionDetector("motion_detector_3", 10000, "EXT1_DR3", "EXT2_R3A3");
makeMotionDetector("motion_detector_3", 10000, "EXT1_DR3", "EXT2_R3A3");
</syntaxhighlight>
</syntaxhighlight>


=== Активация правила только в определённое время ===
=== Активация правила только в определённое время ===
Строка 229: Строка 247:
});
});
</syntaxhighlight>
</syntaxhighlight>


=== Роллеты ===
=== Роллеты ===
Строка 353: Строка 372:


</syntaxhighlight>
</syntaxhighlight>


=== Системные правила ===
=== Системные правила ===
Некоторые правила поставляются с системой правил по умолчанию в пакете wb-rules-system.  
Некоторые правила поставляются с системой правил по умолчанию в пакете wb-rules-system.  


Строка 360: Строка 381:


Некоторые примеры:
Некоторые примеры:


==== Правило для пищалки ====
==== Правило для пищалки ====
[https://github.com/contactless/wb-rules-system/blob/master/rules/buzzer.js Правило] создаёт виртуальное устройство buzzer с ползунками для регулировки громкости и частоты, а также кнопкой включения звука.
[https://github.com/contactless/wb-rules-system/blob/master/rules/buzzer.js Правило] создаёт виртуальное устройство buzzer с ползунками для регулировки громкости и частоты, а также кнопкой включения звука.


Строка 432: Строка 455:


</syntaxhighlight>
</syntaxhighlight>


==== Правило для статуса питания ====
==== Правило для статуса питания ====
Строка 500: Строка 524:


</syntaxhighlight>
</syntaxhighlight>


=== Отправка команд по RS-485 ===
=== Отправка команд по RS-485 ===


Для примера отправим команду устройству на порт ''/dev/ttyNSC0'' (соответствует аппаратному порту RS-485-ISO на [[Wiren Board 4]]).
Для примера отправим команду устройству на порт ''/dev/ttyNSC0'' (соответствует аппаратному порту RS-485-ISO на [[Special:MyLanguage/Wiren Board 4|Wiren Board 4]]).
Для этого будем использовать движок правил и возможность выполнения произвольных shell-команд. Подробнее см. [https://github.com/contactless/wb-rules#%D0%94%D1%80%D1%83%D0%B3%D0%B8%D0%B5-%D0%BF%D1%80%D0%B5%D0%B4%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%B5-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8-%D0%B8-%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5 в документации].
Для этого будем использовать движок правил и возможность выполнения произвольных shell-команд. Подробнее см. [https://github.com/contactless/wb-rules#%D0%94%D1%80%D1%83%D0%B3%D0%B8%D0%B5-%D0%BF%D1%80%D0%B5%D0%B4%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%B5-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8-%D0%B8-%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5 в документации].


Строка 659: Строка 684:


</syntaxhighlight>
</syntaxhighlight>


=== Пользовательские поля в интерфейсе ===
=== Пользовательские поля в интерфейсе ===
Чтобы дать пользователю возможность вводить точные значения параметров (уставки) из интерфейса, можно воспользоваться [https://wirenboard.com/wiki/index.php/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D1%85_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9_%D0%B2_%D0%B2%D0%B5%D0%B1-%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%B5 инструкцией].
Чтобы дать пользователю возможность вводить точные значения параметров (уставки) из интерфейса, можно воспользоваться [https://wirenboard.com/wiki/index.php/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D1%85_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9_%D0%B2_%D0%B2%D0%B5%D0%B1-%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%B5 инструкцией].


Более подробно и с примером - в [https://support.wirenboard.com/t/kak-na-wb5-wb6-sozdat-pole-dlya-vvoda-ustavok-i-peredat-znachenie-v-pravila/2180 теме на портале техподдержки].
Более подробно и с примером - в [https://support.wirenboard.com/t/kak-na-wb5-wb6-sozdat-pole-dlya-vvoda-ustavok-i-peredat-znachenie-v-pravila/2180 теме на портале техподдержки].


=== Сложные правила с расписаниями ===
=== Сложные правила с расписаниями ===
Строка 1058: Строка 1086:
})()
})()
</syntaxhighlight>
</syntaxhighlight>


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


== Новые возможности последних версий ==
== Новые возможности последних версий ==
* [[Движок_правил_wb-rules_1.7|Движок правил wb-rules 1.7]]
 
* [[Special:MyLanguage/Движок_правил_wb-rules_1.7|Движок правил wb-rules 1.7]]
 


== В разработке ==
== В разработке ==
Описание возможностей будущих версий движка правил можно прочесть здесь:
Описание возможностей будущих версий движка правил можно прочесть здесь:
* [[Движок_правил_wb-rules_2.0|Движок правил wb-rules 2.0]]
* [[Special:MyLanguage/Движок_правил_wb-rules_2.0|Движок правил wb-rules 2.0]]
</translate>
12 063

правки