skysilver

 
<<< Назад

WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 3.

Интеграция с MajorDoMo. Модуль ESP8266 (Wifi-IoT). Немного о классах, объектах, свойствах и встроенных функциях MajorDoMo.

Как было сказано ранее, WiFi-информер работает под управлением прошивки WiFi-IoT.

Описание API-функций прошивки по работе с матрицами MAX7219 находится в Wiki проекта здесь.

Предусмотрено управление HTTP GET запросами и через MQTT. Для себя я выбрал первый вариант.

Для работы с устройствами на базе прошивки WiFi-IoT в MajorDoMo есть модуль ESP8266 (Wifi-IoT).

Установим его из Маркета дополнений.
01
После установки модуля также должен появиться сценарий espdata (ESP data processing), который отвечает за прием и обработку сообщений от устройств, в т. ч. и от информера.
02
Далее проверяем настройки прошивки информера. Заходим в раздел Servers. Смотрим, что включена галочка Enable send MajorDoMo or other, указан корректный IP-адрес сервера MajorDoMo и период отправки данных на сервер (в секундах).
03
Если все настроено верно, то через некоторое время в интерфейсе модуля ESP8266 (Wifi-IoT) появится новая запись с нашим информером и его метриками. С метриками и их описанием можно ознакомиться на сайте прошивки https://wifi-iot.com/p/wiki/24/ru/
04

Чтобы не запутаться, переименуем устройство во что-нибудь осмысленное.
06
На данном этапе информер с заданными периодом шлет в MajorDoMo свои базовые метрики и данные с сенсоров (если они были подключены на этапе сборки), а модуль принимает эти данные и при желании сохраняет в свойства указанного объекта, либо передает методу указанного объекта.

05
Чтобы в дальнейшем использовать данные этих метрик в своих сценариях, для построения графиков, вывода в web-интерфейс, по иделогии MajorDoMo требуется создать класс, объект, свойства и при необходимости методы. Чтобы не делать все это вручную, можно воспользоваться Простыми устройствами. Но лично я предпочитаю делать по-старинке, не задействуя Простые устройства. Тут уж личное дело каждого.

Для работы с устройствами ESP8266 на базе прошивки WiFi-IoT создадим отдельный класс и назовем его WiFiIoT.
07
08
На уровне класса создадим классовые свойства, которые будут описывать базовые метрики каждого устройства, такие как:

  • hostname - Имя устройства
  • ip - IP адрес устройства
  • freemem - Свободное ОЗУ
  • ver - Версия и дата сборки прошивки
  • uptime - Время работы
  • rssi - Уровень сигнала
  • vdd - Напряжение питания
  • errconn - Число ошибок подключения к wifi
    09
    10
    11
    Создав эти свойства именно на уровне класса, мы снимаем с себя заботу по созданию этих свойств для каждого нового подобного wifi-устройства.
    12
    Далее создаем в нашем классе объект, который будет описывать и хранить данные конкретного информера. С учетом, что это информер, который находится в комнате, назовем объект roomInformer.
    13
    14
    15
    После этого можно возвращаться в модуль ESP8266 (Wifi-IoT), заходить в настройки информера и привязать к нужным метрикам только что созданные свойства объекта.
    16
    Через некоторое время модуль получит от информера актуальные данные и запишет их в свойства объекта, после чего их можно полноценно использовать в своих задачах.
    17

Переходим непосредственно к управлению информером, а конкретно - отправке на него сообщений.

Из описания 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.
18
Соответственно для вывода длинного сообщения с бегущей строкой функция будет выглядеть так:
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. Например, так:
19

Для это я создал три новых элемента Меню с типами Текстовое поле, Кнопка и Слайдер. Для удобства также создал свойства message и bright у объекта roomInformer, в которых будет храниться отправляемое сообщение и яркость индикатора соответственно.
20
21
22
23
Код слайдера яркости:

// Получим 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 запросом там, где это требуется, и все!

Обсуждение (6) (32)

Смотрите так же:
06.04.2020 Получение данных о COVID с карты Яндекс
12.07.2019 MajorDoMo и Яндекс Алиса. Алиса, включи канал Карусель.
20.06.2019 MajorDoMo и Яндекс Алиса. Алиса, измени цвет бра на красный.
18.06.2019 MajorDoMo и Яндекс Алиса. Алиса, сделай ярче настольную лампу.
17.06.2019 MajorDoMo и Яндекс Алиса. Алиса, включи свет на кухне.
10.06.2019 MajorDoMo и Яндекс Алиса. Модуль Yandex Home.
06.06.2019 MajorDoMo и Яндекс Алиса. Объединение аккаунтов.
05.06.2019 MajorDoMo и Яндекс Алиса. Регистрация приватного навыка.
03.06.2019 Загрузка PHP-расширения PDO MySQL в Windows
01.06.2019 MajorDoMo и Яндекс Алиса. Публикация вебхуков.
29.05.2019 MajorDoMo и Яндекс Алиса. Общие сведения.
22.05.2019 Экспресс контроль состояния циклов в Linux
08.05.2019 Сценарий контроля состояния SSL сертификатов сайтов
26.02.2019 Экспорт графиков в PNG-файл в модуле Charts
26.01.2019 Мультисерийный кастомный график в модуле Charts
13.12.2018 График с цветовой индикацией выхода величины за пределы
12.11.2018 Кастомный график в модуле Charts
15.08.2018 Кронштейн NB F120 (North Bayou)
20.06.2018 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 2.
15.06.2018 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 1.
20.05.2018 Кросс-компиляция ядра для Banana Pi M2U
14.05.2018 Ссылки на ресурсы по MajorDoMo
02.03.2018 Знакомство и тестирование Banana Pi M2U
21.02.2018 Распаковка Banana Pi M2U
14.02.2018 Одноплатный ПК для MajorDoMo
14.08.2018 Заметки по железу
23.01.2018 Мой взгляд на вопрос голосового управления в MajorDoMo
17.01.2018 Обзор цен на устройства Xiaomi
24.12.2017 Гирлянда на ESP8266 и WS2812
20.12.2017 Блог им. skysilver

Киров, Россия

На форуме: skysilver

Веб-сайт:
http://connect.smartliving.ru/profile/461