введение

Задача автоматизации - это упростить человеку жизнь. “Умный дом” - это, конечно, частный случай. Но полезный. Попытаемся применить скрипты контроллера 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"

Условия

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

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


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

Отладка

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

Таймеры