Интеграция с MajorDoMo. Модуль ESP8266 (Wifi-IoT). Немного о классах, объектах, свойствах и встроенных функциях MajorDoMo.
Как было сказано ранее, WiFi-информер работает под управлением прошивки WiFi-IoT.
Описание API-функций прошивки по работе с матрицами MAX7219 находится в Wiki проекта здесь.
Предусмотрено управление HTTP GET запросами и через MQTT. Для себя я выбрал первый вариант.
Для работы с устройствами на базе прошивки WiFi-IoT в MajorDoMo есть модуль ESP8266 (Wifi-IoT).
Установим его из Маркета дополнений.
После установки модуля также должен появиться сценарий espdata (ESP data processing), который отвечает за прием и обработку сообщений от устройств, в т. ч. и от информера.
Далее проверяем настройки прошивки информера. Заходим в раздел Servers. Смотрим, что включена галочка Enable send MajorDoMo or other, указан корректный IP-адрес сервера MajorDoMo и период отправки данных на сервер (в секундах).
Если все настроено верно, то через некоторое время в интерфейсе модуля ESP8266 (Wifi-IoT) появится новая запись с нашим информером и его метриками. С метриками и их описанием можно ознакомиться на сайте прошивки https://wifi-iot.com/p/wiki/24/ru/
Чтобы не запутаться, переименуем устройство во что-нибудь осмысленное.
На данном этапе информер с заданными периодом шлет в MajorDoMo свои базовые метрики и данные с сенсоров (если они были подключены на этапе сборки), а модуль принимает эти данные и при желании сохраняет в свойства указанного объекта, либо передает методу указанного объекта.
Чтобы в дальнейшем использовать данные этих метрик в своих сценариях, для построения графиков, вывода в web-интерфейс, по иделогии MajorDoMo требуется создать класс, объект, свойства и при необходимости методы. Чтобы не делать все это вручную, можно воспользоваться Простыми устройствами. Но лично я предпочитаю делать по-старинке, не задействуя Простые устройства. Тут уж личное дело каждого.
Для работы с устройствами ESP8266 на базе прошивки WiFi-IoT создадим отдельный класс и назовем его WiFiIoT.
На уровне класса создадим классовые свойства, которые будут описывать базовые метрики каждого устройства, такие как:
Переходим непосредственно к управлению информером, а конкретно - отправке на него сообщений.
Из описания API прошивки нам известно, что для вывода сообщения через HTTP GET запрос необходимо отправить команду по адресу IPадрес/matrixmsg?txt=text
Указав в строке запроса дополнительные параметры, мы также сможем регулировать скорость бегущей строки:
&shift=Y - скорость бегущей строки в милисекундах. Если Y равно 0,то бегущая строка выключена, просто вывод.
Управление яркостью доступно через запрос IPадрес/matrixbr?mode=X, где X число от 0 до 15. Значение 100 выключит дисплей.
Для отправки HTTP GET запросов в MajorDoMo есть встроенная функция getURL().
Для тестирования воспользуемся Консолью MajorDoMo. Вписываем в нее getURL('http://192.168.2.4/matrixmsg?txt=hello'); и нажимаем Отправить. Если все прошло без ошибок, то на информере отобразится текст hello.
Соответственно для вывода длинного сообщения с бегущей строкой функция будет выглядеть так:
getURL('http://192.168.2.4/matrixmsg?txt=HelloWorldFromMajorDoMo&shift=80');
А для управления яркостью индикаторов так:
getURL('http://192.168.2.4/matrixbr?mode=10');
Чтобы выводить длинные строки с пробелами между словами, требуется предварительно обработать эту строки функцией urlencode().
getURL('http://192.168.2.4/matrixmsg?txt='.urlencode('Привет всем от MajorDoMo').'&shift=80');
Теперь можно полноценно использовать эти функции в своих сценариях для вывода информации с датчиков и разного рода уведомлений, как по расписанию, так и по каким-либо событиям. В том числе и из веб-интерфейса MajorDoMo. Например, так:
Для это я создал три новых элемента Меню с типами Текстовое поле, Кнопка и Слайдер. Для удобства также создал свойства message и bright у объекта roomInformer, в которых будет храниться отправляемое сообщение и яркость индикатора соответственно.
Код слайдера яркости:
// Получим IP-адрес информера
$ip = getGlobal('roomInformer.ip');
// Получим яркость
$bright = getGlobal('roomInformer.bright');
// Отправляем команду информеру на изменение яркости
getURL('http://' . $ip . '/matrixbr?mode=' . $bright);
Код кнопки Отправить:
// Получим IP-адрес информера
$ip = getGlobal('roomInformer.ip');
// Получим текст сообщения
$message = getGlobal('roomInformer.message');
// Отправляем команду информеру для вывода сообщения
getURL('http://' . $ip . '/matrixmsg?txt=' . urlencode($message) . '&shift=80');
По большому счету для того, чтобы просто отправлять сообщения на информер, совсем не обязательно устанавливать модуль ESP8266 (Wifi-IoT), создавать класс, объект, свойства, привязывать их в модуле, а 95% содержимого этой статьи можно пропустить. Достаточно лишь пользоваться функцией getURL() с корректным HTTP GET запросом там, где это требуется, и все!