Wb-jscript: различия между версиями
(Перенаправление на Wb-rules) Метка: новое перенаправление |
Brainroot (обсуждение | вклад) (→Логи) |
||
(не показано 69 промежуточных версий 5 участников) | |||
Строка 1: | Строка 1: | ||
# | == введение == | ||
Задача автоматизации - это упростить человеку жизнь. “Умный дом” - это, конечно, частный случай. Но полезный. | |||
Попытаемся применить скрипты контроллера WB (Wiren Board 6) для управления. | |||
== Используемое оборудование == | |||
[[Wiren_Board_6|Контроллер]] | |||
[[WBIO-DI-WD-14_I/O_Module|Модуль WBIO-DI-WD-14]] | |||
[[WBIO-DO-R1G-16_I/O_Module|WBIO-DO-R1G-16]] | |||
---- | |||
''В названиях “DI” - Digital Input “DO” - Output соответственно.'' | |||
== Программирование == | |||
=== Скрипт === | |||
Скриптом называется обыкновенный текстовый файл. Для того чтобы он выполняся движком [[Движок_правил_wb-rules|wb-rules]] нужно выполнить два условия: | |||
# Имя файла должно заканчиваться на '''.js''' | |||
# Файл должен располагаться в каталоге '''/etc/wb-rules''' | |||
[[Веб-интерфейс_Wiren_Board|Веб-интерфейс]] контроллера имеет встроенный редактор скриптов, доступный из его главного меню по ссылке '''"Rules"''' | |||
== Выполнение скриптов == | |||
Только что созданный скрипт после нажатия кнопки "Save" (и при запуске wb-rules) сразу же выполнится. То есть будут созданы все переменные, правила, таймеры. И дальнейшее поведение скрипта будет определяться только событиями, как внешними (изменения состояния устройств на которые "подписаны" правила) так и таймерами. | |||
== Переменные == | |||
Где хранить значения (а также строки и все остальное, включая ссылки на объекты? Именно в переменных. | |||
'''Важно:''' JS по умолчанию при присвоении переменной одного типа значения другого типа - меняет тип переменной. Иногда это вызывает неожиданное поведение. | |||
Типы в JS: | |||
* String: представляет строку | |||
* Number: представляет числовое значение | |||
* Boolean: представляет логическое значение true или false. | |||
* undefined: указывает, что значение не установлено | |||
* null: указывает на неопределенное значение | |||
Ниже попробуем создать первый скрипт и поймем значение типов. | |||
== Логи == | |||
Для отладки использование логов - бесценно. Иметь возможность в любом месте скрипта записать текущее значение переменной, состояние устройства очень помогает. | |||
Логи в WB двух типов - с записью в файл (/var/log/mesages) и в mqtt топик. | |||
Лог вызывается такой командой: | |||
log.{debug,info,warning,error}(fmt, [arg1 [, ...]]) | |||
Научимся ими пользоваться - а заодно и напишем первый скрипт. | |||
В меню “Rules” нажимаем “New” и в поле для имени, верху пишем “logs_and_vars_test.js” | |||
И в поле скрипта вставляем: | |||
<syntaxhighlight lang="ecmascript"> | |||
//logs_and_vars_test.js | |||
//Просто комментарий. Начинается с двойного слеша "//" | |||
var testvar1; //Переменная "testvar1"ю Ничего не присваиваем при объявлении(создании), "пустая" | |||
log.info("Тип и значение переменной testvar1", typeof(testvar1), testvar1); // Тип (и значение) undefined | |||
testvar1 = "yellow submarine"; // Присвоим строку | |||
log.info("Тип и значение переменной testvar1", typeof(testvar1), testvar1); | |||
testvar1 = 42; //Присвоим число | |||
log.info("Тип и значение переменной testvar1", typeof(testvar1), testvar1); | |||
testvar1 = false; //Булево (true/false) | |||
log.info("Тип и значение переменной testvar1", typeof(testvar1), testvar1); | |||
testvar2 = "red submarine"; //Сразу при обьявлении присваиваем значение | |||
log.info("Тип и значение переменной testvar2", typeof(testvar2), testvar2); | |||
testvar1 = testvar2; //Тип testvar1 - булево. testvar2 - строка | |||
log.info("Тип и значение переменной testvar1", typeof(testvar1), testvar1); // при присвоении тип поменялся. | |||
</syntaxhighlight> | |||
<blockquote>''Не забывайте '''пустую''' строку в конце скрипта.</blockquote> | |||
<br>Прежде чем сохранять - давайте зададимся вопросом “как же логи читать?” | |||
Два(даже три) способа. | |||
* Самый простой: внизу справа окна редактора скриптов есть кнопка с символом гаечного ключа. | |||
[[Файл:Wb-jscript-Logs-1.png|200px|thumb|center|Кнопка для логов]] | |||
Нажимаем - и выдвигается консоль сообщений. Пока оно пустое, но после нажатия ''кнопки "Save"'' - сюда выводятся сообщения. | |||
[[Файл:Wb-jscript-Logs-2.png|400px|thumb|center|Панель лога]] | |||
* Чуть сложнее: открываем ssh сессию на контроллере и вводим | |||
<syntaxhighlight lang="bash"> | |||
</syntaxhighlight> | |||
* Команда просматривает файл и при появлении в нем строчек с "'''wb-rules'''" | |||
Нажмем опять кнопку ''кнопку "Save"'' - выводит их в '''stdout''' (на экран) | |||
[[Файл:Wb-jscript-Logs-bash.png|400px|thumb|center|Логи в SSH сессии]] | |||
<blockquote> | |||
Чтобы кнопка "Save" стала активной - надо что-нибудь изменить в окне редактора. Например пробел добавить. | |||
</blockquote> | |||
== Условия == | |||
=== Использование === | |||
=== Отладка === | |||
== Управление оборудованием == | |||
== Таймеры == |
Версия 15:57, 21 августа 2020
введение
Задача автоматизации - это упростить человеку жизнь. “Умный дом” - это, конечно, частный случай. Но полезный. Попытаемся применить скрипты контроллера WB (Wiren Board 6) для управления.
Используемое оборудование
Контроллер Модуль WBIO-DI-WD-14 WBIO-DO-R1G-16
В названиях “DI” - Digital Input “DO” - Output соответственно.
Программирование
Скрипт
Скриптом называется обыкновенный текстовый файл. Для того чтобы он выполняся движком wb-rules нужно выполнить два условия:
- Имя файла должно заканчиваться на .js
- Файл должен располагаться в каталоге /etc/wb-rules
Веб-интерфейс контроллера имеет встроенный редактор скриптов, доступный из его главного меню по ссылке "Rules"
Выполнение скриптов
Только что созданный скрипт после нажатия кнопки "Save" (и при запуске wb-rules) сразу же выполнится. То есть будут созданы все переменные, правила, таймеры. И дальнейшее поведение скрипта будет определяться только событиями, как внешними (изменения состояния устройств на которые "подписаны" правила) так и таймерами.
Переменные
Где хранить значения (а также строки и все остальное, включая ссылки на объекты? Именно в переменных. Важно: JS по умолчанию при присвоении переменной одного типа значения другого типа - меняет тип переменной. Иногда это вызывает неожиданное поведение.
Типы в JS:
- String: представляет строку
- Number: представляет числовое значение
- Boolean: представляет логическое значение true или false.
- undefined: указывает, что значение не установлено
- null: указывает на неопределенное значение
Ниже попробуем создать первый скрипт и поймем значение типов.
Логи
Для отладки использование логов - бесценно. Иметь возможность в любом месте скрипта записать текущее значение переменной, состояние устройства очень помогает. Логи в WB двух типов - с записью в файл (/var/log/mesages) и в mqtt топик. Лог вызывается такой командой:
log.{debug,info,warning,error}(fmt, [arg1 [, ...]])
Научимся ими пользоваться - а заодно и напишем первый скрипт. В меню “Rules” нажимаем “New” и в поле для имени, верху пишем “logs_and_vars_test.js” И в поле скрипта вставляем:
//logs_and_vars_test.js
//Просто комментарий. Начинается с двойного слеша "//"
var testvar1; //Переменная "testvar1"ю Ничего не присваиваем при объявлении(создании), "пустая"
log.info("Тип и значение переменной testvar1", typeof(testvar1), testvar1); // Тип (и значение) undefined
testvar1 = "yellow submarine"; // Присвоим строку
log.info("Тип и значение переменной testvar1", typeof(testvar1), testvar1);
testvar1 = 42; //Присвоим число
log.info("Тип и значение переменной testvar1", typeof(testvar1), testvar1);
testvar1 = false; //Булево (true/false)
log.info("Тип и значение переменной testvar1", typeof(testvar1), testvar1);
testvar2 = "red submarine"; //Сразу при обьявлении присваиваем значение
log.info("Тип и значение переменной testvar2", typeof(testvar2), testvar2);
testvar1 = testvar2; //Тип testvar1 - булево. testvar2 - строка
log.info("Тип и значение переменной testvar1", typeof(testvar1), testvar1); // при присвоении тип поменялся.
Не забывайте пустую строку в конце скрипта.
Прежде чем сохранять - давайте зададимся вопросом “как же логи читать?”
Два(даже три) способа.
- Самый простой: внизу справа окна редактора скриптов есть кнопка с символом гаечного ключа.
Нажимаем - и выдвигается консоль сообщений. Пока оно пустое, но после нажатия кнопки "Save" - сюда выводятся сообщения.
- Чуть сложнее: открываем ssh сессию на контроллере и вводим
- Команда просматривает файл и при появлении в нем строчек с "wb-rules"
Нажмем опять кнопку кнопку "Save" - выводит их в stdout (на экран)
Чтобы кнопка "Save" стала активной - надо что-нибудь изменить в окне редактора. Например пробел добавить.