Wb-jscript

Материал из Wiren Board

введение

Задача автоматизации - это упростить человеку жизнь. “Умный дом” - это, конечно, частный случай. Но полезный. Попытаемся применить скрипты контроллера WB (Wiren Board 6) для управления.

Используемое оборудование

Контроллер Модуль WBIO-DI-WD-14 WBIO-DO-R1G-16


В названиях “DI” - Digital Input “DO” - Output соответственно.

Программирование

Скрипт

Скриптом называется обыкновенный текстовый файл. Для того чтобы он выполняся движком wb-rules нужно выполнить два условия:

  1. Имя файла должно заканчиваться на .js
  2. Файл должен располагаться в каталоге /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 сессию на контроллере и вводим
tail -f /var/log/messages |grerp wb-rules

Команда просматривает файл и при появлении в нем строчек с "wb-rules" Нажмем опять кнопку кнопку "Save" - выводит их в stdout (на экран)

Логи в SSH сессии

Чтобы кнопка "Save" стала вновь активной - надо что-нибудь изменить в окне редактора. Например пробел добавить.

Можно убедиться что скрипт выполняется и даже совершает полезно действие - выводит сообщения.

Функция

typeof

принимает в качестве аргумента (то, что в скобках) переменную и возвращает нам ее тип

Если выполнить код:

variable1 = "yellow submarine";
variable2 = typeof(variable1);

То

variable2

будет иметь тип "string" и значение "yellow submarine"

Условия

Очень часто нужно что-нибудь с чем-то сравнить. Ну, например температуру с желаемой (с уставкой на тайном языке наладчиков-проектировщиков). Напишем простой пример в котором сравним два значения.

Не забывайте пустую строку в конце скрипта.


Использование

Отладка

Управление оборудованием

Таймеры