Создание своего класса устройств в MajorDoMo

001Итак я наклепал кучу контроллеров с MySensors и подключил их к MajorDoMo через шлюз. Данная статья о том как с этим жить дальше. Ведь для подключения к MajorDoMo с каждым устройством приходится выполнять немало действий: создание объектов и подключение их к сенсорам Mysensors, настройка обработки приходящих значений, отображение показаний на экранных формах (планах, сценах), формирования отчетов по показаниям датчиков.

 

Для подключения устройств Mysensor к MajorDoMo я вижу два пути:

  1. Максимально воспользоваться тем что есть. То есть прицепить все сенсоры, которые подключились к системе, к существующим классам системы, а далее цеплять их к сценам, формам, графикам и сценариям.
  2. Создать свою иерархию классов , соответствующих моим устройствам, максимально заложить в них логику работы и отображения данных и уже цеплять все подключившиеся сенсоры к ним.

До сих пор я максимально шел по первому пути, разве что немного расширял существующие классы. В результате я получил огромное количество однотипных объектов (ведь каждому сенсору моего устройства, которых у меня получается от 2 до 10, нужно создать отдельный объект соответствующего класса)

Кончилось все это переустановкой MajorDoMo (почему то при вызове сцен стал подвисать Apache c 100% загрузкой процессора), и вместе с этим я решил навести порядок в классах.

 Задача

Требуется максимально упростить подключение большого количества однотипных датчиков влажности почвы. Все датчики имеют батарейное питание и выдают три параметра. Напряжение батареи, значение АЦП, которое может быть пересчитано во влажность почвы и температуру от отдельного сенсора DS18B20, который может быть установлен в устройстве.

Подготовительный этап. Создание базовых классов

Для начала создадим базовый класс SMyVccDevices для всех моих устройств с батарейным питанием.

SVccDevice

Далее создаю общие свойства для всех батарейных устройств:

  • Name — имя устройства, которое будет отображаться в отчетах и формах
  • Vcc — напряжение питания, В — ключевое значение с хранением истории в базе
  • VccMin и VccMax — значения необходимые для вычисления состояния батареи
  • VccText — тестовое сообщение о состоянии батареи

SVccDevice-1

Далее создадим метод vccUpdated, который будет срабатывать при каждом изменении свойства Vcc

SVccDevice-2

Данный метод вычисляет напряжение батареи в процентах, формирует строку состояния батареи из записывает в VccText, а также пишет текущее время в свойство updated и запускает метод родительского класса setUpdatedText

Класс SMyVccDevices готов. Теперь  можно создавать классы конкретных устройств наследуя данный класс. Следующим создадим класс устройств измерения температуры влажности SMyTempHumDevices.  Выделения этого класса может пригодиться для датчиков с DHT22, HTU21D и прочимих термо-гигрометров.

У данного класса создадим два ключевых свойства с хранением истории значений:

  • Temp — температура
  • Hum — относительная влажность

Собственных методов у данного класса нету

SMyTempHumDevices

Создание класса моего устройства

Теперь собственно класс для резистивных устройств измерения относительной влажности почвы.

SMySoilDevice

У него будет два дополнительных свойства:

  • HumADC — значения АЦП контроллера, которое будем привязывать к непосредственно сенсор
  • HymText — текстовое поле оценки влажности для отчетов и форм

И метод humUpdated, привязанный к изменению свойства HumADC. Алгоритм пересчета значений я оставлю прежним

Для данного класса создадим шаблон отображения — вид, каким объекты данного класса будут выводиться на планах и сценах MajorDoMo

SMySoilDevice-1

Мне удобнее табличный вид отображения всех значений в одну строчку

Вот и все.  Теперь нужно создать необходимое количество объектов класса SMyRSoilDevices

SMySoilDevice-2

и вручную заполнить у них свойства Name, VccMin и VccMax

SMySoilDevice-4

Осталось связать устройства MySensors с созданными объектами

SMySoilDevice-5

Для создания сцены со всеми датчиками влажности достаточно накидать элементов типа «объект» и выбрать созданные объекты

SMySoilDevice-6

SMySoilDevice-7

Ну и для удобства создадим скрипт отправляющий отчет о влажности на электронную почту:

В результате выполнения данного скрипта ежедневно на почту приходит такой отчет

 

Данная статья написана больше как памятка самому себе, но если кому то поможет разобраться, буду очень рад

Вы можете оставить отзыв или трекбек со своего сайта.

Ваш отзыв