Плагин MegaD

Скачать: Plugin-MegaD.zip  (15 KB)

Лицензия: MIT

Author: intraHouse

Плагин MegaD предназначен для организации связи с контроллером MegaD по протоколу http и реализует функции управления и получения состояния.

Установка плагина

Процедура установки плагина показана здесь

Настройка плагина

Двойным кликом на строке плагина открыть окно свойств плагина.
На вкладке Параметры заполнить следующие поля:

  1. IP адрес контроллера MegaD
  2. Порт контроллера MegaD
  3. Порт на сервере intraHouse (порт, на который контроллер будет передавать сообщения)
  4. Пароль для доступа к контроллеру MegaD
  5. Команда опроса состояний всех портов на MegaD
  6. Период опроса состояний всех портов  на MegaD
  7. Отправлять время на контроллер.
    Если галочка установлена, то при старте плагина и при получении с контроллера st=1 сервер отправляет время:
    /sec/?cf=7&stime=10:57:06:4
  8. Интервал отправки запросов
    Гарантируется, что обращения к контроллеру происходят не чаще заданного интервала.

Нажать кнопку Сохранить.

Нажать кнопку вызова Дополнительного меню и выбрать пункт «Запустить плагин»:

Настройка каналов

Нажать кнопку вызова списка каналов и выбрать «Список каналов».
Для добавления канала нажать кнопку «плюс»:

Заполнить следующие поля:

1. Канал — идентификатор канала 

  • Если значение может быть считано из элемента cmd=all как одно значение, ID канала должен быть равен порту (0-37)
  • Если к порту подключено несколько устройств и значения выдаются через /, то каналы адресуются внутри порта через _:
    Например, pt=14 — temp:25.2/hum:40 или 25.2/40.7
    Каналы: 14_1, 14_2
  • 1Wire устройства адресуются как порт_
    Например, pt=31 — 8aad6a070000:32.43;85a56a070000:20.51
    Каналы: 31_8aad6a070000, 31_85a56a070000
  • Если нет необходимости вытаскивать данные из списков, то канал может иметь любой идентификатор (лат.буквы,цифры, знак _)
    В этом случае в команде нельзя использовать %adr%. Нужно ставить конкретный адрес порта.

2. Тип порта (в соответствии с настройками на контроллере): 
— Digital Input (In)
— Digital Output (Out)
— Analog Input (ADC, Dsen)
— Analog Output
— Meter (In)

3. Период опроса состояния порта. 

4. Строка запроса состояния порта.

5. Устройство — виртуальное устройство в системе intraHouse из списка доступных.

Особенности настройки каналов

Датчик бинарный

Бинарные датчики — кнопки, герконы, датчики движения, датчики протечки и другие.
Для бинарного датчика нужно сделать следующие настройки:
1. Задать номер канала (номер порта на MegaD)
2. Задать период опроса канала.
3. Привязать к Устройству.

При такой настройке сервер intraHouse получит информацию об изменении состояния порта на MegаD с учетом периода опроса. В примере выше, максимум через 3 секунды.

Контроллер MegaD может самостоятельно (без опроса) отсылать сообщения о сработках. В этом случае период опроса надо установить в ноль и настроить входящие сообщения от MegaD, которые настраиваются в разделе «Расширения»:

Выбрать «Расширения». Нажать кнопку «плюс» и в окне свойств заполнить следующие поля:
— Название (любой текст)
— Входящее сообщение от MegaD
— Ответное сообщение для MegaD (опционально)
— Установить состояние каналов в системе intraHouse (ON, OFF, TOGGLE)

В результате:

При получении от MegaD сообщения (Request): /megad.php?pt=1 (т.е. сработал порт P1)
1. ответить строкой Response: 8:1 (для MegaD это означает «Установить порт 8 в лог.1″) или 2:1;8:1.
2. переключить канал 1 в ON. Можно одновременно несколько каналов:  1=ON&8=ON
В пользовательском интерфейсе на мнемосхеме  состояние устройства, соответствующего каналу 1, переключится в состояние ON.

Датчик бинарный — многокомандная кнопка

В контроллере MegaD-2561 начиная с версии 4.08 beta7 добавлена поддержка режима «Click mode» для входов. Теперь один и тот же вход можно задействовать для управления тремя событиями. Например: по однократному клику изменим состояние порта 7, по двойному клику изменим состояние порта 8, по долгому удержанию кнопки изменим состояние обоих портов — и 7, и 8. 
Выбираем необходимый режим в контроллере:

Выбрать из списка «Расширения». Кнопкой «плюс» добавить три записи:

Теперь одна и та же кнопка, подключенная к порту P0 будет выполнять 3 действия, описанные выше.
В локальном же режиме (без сервера) контроллер может выполнять только два действия: управлять портом 7 по одинарному клику и управлять портом 8 по двойному клику. Для долгого удержания кнопки ввод действия пока не предусмотрен.

Датчик аналоговый

Аналоговые датчики — датчики температуры, влажности, давления и другие.
Для аналогового датчика нужно сделать следующие настройки:
1. Задать номер канала (номер порта на MegaD)
2. Задать период опроса канала.
3. Привязать к Устройству.
4. При необходимости ввести формулу пересчета значения.

Номер канала — это номер порта в MegaD.
Для простых датчиков (например, DS18B20, датчики на порте с АЦП) адрес будет в виде простого числа, например: 3
Для совмещенных датчиков (например, DHT22) адрес будет в виде: 10_1 — для датчика температуры и 10_2 для датчика влажности.

Для датчиков DS18B20, подключенных к MegaD шиной 1-wire, адрес канала будет формироваться в зависимости от адресов датчиков. Для этого в web-интерфейсе MegaD необходимо на странице настройки порта перейти по ссылке «Device List» и посмотреть адреса датчиков:

В нашем случае номер канала для первого датчика будет 31_ff862a831501, для второго — 31_ff6e2a831501, для третьего — 31_ff676b821503.

Период опроса канала и строка запроса состояния
Строка запроса к MegaD по умолчанию уже вписана, достаточно изменить лишь период опроса. Например, для датчиков температуры можно поставить период опроса 60 сек — в большинстве случаев этого достаточно. Если требуется повышенная скорость опроса датчиков, то значение времени опроса можно уменьшить вплоть до 1 сек. Однако стоит обратить внимание на то, что этот параметр выбирается из принципа разумной достаточности!

Обратите внимание:
 1. Для каждого элемента совмещенного датчика DHT22, AM2301 (температуры и влажности) нужно создать свое Устройство в системе IntraHouse. Период опроса для совмещенных датчиков необходимо устанавливать только для одного канала (например, канал датчика температуры).
2. Для каждого датчика температуры DS18B20, подключенного к MegaD шиной 1-wire, нужно создать свое Устройство в системе IntraHouse. Период опроса необходимо устанавливать только для одного канала (например, канал первого датчика DS18B20 с адресом ff862a831501 в приведенном выше примере). Причем строка запроса будет немного другая, нежели чем для остальных датчиков — /%pwd%/?pt=%adr%&cmd=list

Исполнительное устройство бинарное

Для бинарного исполнительного устройства достаточно задать номер канала (номер порта на MegaD) и привязать к Устройству.

Если настраиваемый канал управляется только от системы intraHouse, период опроса состояния порта можно установить в ноль. Система знает о состоянии порта и лишний опрос можно убрать.

Если есть вероятность переключения порта не от системы intraHouse, нужно установить периодический опрос этого порта:

Или в настройках плагина установить период опроса для всех устройств одновременно.

Исполнительное устройство аналоговое

Для аналогового исполнительного устройства достаточно задать номер канала (номер порта на MegaD) и привязать к Устройству.

Если есть вероятность переключения порта не от системы intraHouse, нужно установить периодический опрос этого порта. 

Диммер

При выборе порта типа AO появляется строка «Команда управления», по умолчанию пустая.
Если ее оставить пустой, будет использоваться стандартная команда:
/%pwd%/?cmd=%adr%:%value% (/sec/?cmd=12:255)

Для преобразования значения логического уровня (яркость 0-100%) в значение физического уровня (0-255) служат два следующих параметра. 
Обратите внимание, что значение логического уровня должно соответствовать max значению виртуального устройства, иначе слайдер будет работать некорректно.

Для использования других команд MegaD пропишите команду строке Команда управления, например:
/%pwd%/?pt=%adr%&pwm=%value%&cnt=2 (/sec/?pt=12&pwm=255&cnt=2)

Можно прописать пароль/ адрес напрямую в команде:
/sec/?pt=12&pwm=%value%&cnt=2

RGB

Для работы с RGB устройствами используется порт типа AO — Analog Output

В системе имеется 3 типа RGB устройств:
RGB (3 канала), RGBW (4 канала), RGBWW — (5 каналов). Для MegaD нужно выбрать 3 канальный вариант.
Название канала лучше дать абстрактное, не привязанное к каналу (rgb35, myrgb, …)
В строке Команда управления прописать, например
/%pwd%/?pt=35&ws=%value%

Параметры «Значение физического уровня», «Значение логического уровня» никакого влияния на rgb не оказывают

Счетчик

Настройки на MegaD:
Вход для счетчика должен быть настроен в режим P.
Флажок (чекбокс) справа от поля Mode нужно сбросить.

Настройки на сервере intraHouse:

Для счетчика нужно сделать следующие настройки:
1. Задать номер канала (номер порта на MegaD)
2. Задать вес импульса. Например, для электросчетчика, который выдает 3200 импульсов на 1 кВт, можно задать вес 0.3125 (1/3200*1000). Тогда будем получать число в ваттах (Вт).
3. Период опроса установить в ноль.
4. Привязать к Устройству.

Выбрать  «Расширения». Кнопкой «плюс» добавить новую запись:

В окне свойств заполнить следующие поля:
— Наименование (любой текст)
— Входящее сообщение от MegaD: /megad?pt=1&m=1 Считать импульсы при размыкании
— Ответное сообщение для MegaD. Для счетчика очистить. 
— Установить состояние канала в системе intraHouse. В данном примере:  1=COUNT , так как мы назначили счетчику канал 1 (Смотрите выше)

Дополнения

Отправка команды плагину из сценария

Можно посылать любые запросы, которые принимает MegaD

Например, выдать импульс:

this.pluginCommand({unit:'megad1', command:'/sec/?cmd=7:1;p10;7:0'});

Управление лентой WS2818:

this.pluginCommand({unit:'megad1', command:'/sec/?pt=35&ws=FF0000&chip=10');

Если переключается выход, можно в command отправить onResponse — что должно переключиться на интерфейсе:

this.pluginCommand({unit:'megad1', command:{url:'/sec/?cmd=7:1;8:0', onResponse:[{id:"7",value:1},{id:"8",value:0}]});

Восстановление выходов при перезагрузке контроллера

Если галка установлена, на этот выход отправляется команда on, если выход был в on. Эта команда отправляется при получении от контроллера команды st=1. Контроллер отправляет эту команду серверу после перезагрузки.

Чтение датчиков I2C (и другие запросы, возвращающие одно значение, а не список)

Запрос зависит от подключенного оборудования, подробнее смотрите на сайте ab-log.

Например, для запросов /sec/?pt=31&scl=34&i2c_dev=htu21d&i2c_par=1 и
/sec/?pt=31&scl=34&i2c_dev=htu21d создаем два канала:

ID канала: i2c_htu21d (или htu21d_31 или …) Запрос: /sec/?pt=31&scl=34&i2c_dev=htu21d
ID канала: mySensor (или htu21d_31_1 или ..) Запрос: /sec/?pt=31&scl=34&i2c_dev=htu21d&i2c_par=1

ID каналов может быть любым, привязка к порту 31 не нужна!!!

Чтение и управление для DS2413

Запрос /sec/?pt=32&cmd=list
Ответ содержит как DS18B20, так и DS2413: aad6a070000:25.43;85a56a070000:32.43;79c439000000:OFF/OFF;c6c439000000:ON/ON

Канал DS18B20 формируется как обычно: 32_aad6a070000
Каналы DS2413: 32_79c439000000_A, 32_79c439000000_B
Время для опроса нужно как обычно выставить только в одном из каналов!!

Больше никакой настройки не требуется, команды управления будут сформированы автоматически: /sec/?cmd=32A:1&addr=79c439000000

Функция обработки данных на плагине

На стороне плагина можно выполнить предварительную обработку поступающих от контроллера данных и передать ядру системы результат обработки. Смотрите Структура системы.

Вернуть нужно значение или undefined (return;)
Входные параметры:
val — значение c контроллера
depo — объект, который хранит данные между вызовами функции. Внутри объекта можно создавать любые структуры.

Пример:

function (val, depo) {
   	if (!depo.res) depo.res = [];
   	depo.res.push(val);

   	if (depo.res.length < 5) return; //Нужны еще измерения, значение не возвращаем
 
 	depo.res.sort();
     	let result = ((depo.res[1] + depo.res[2] + depo.res[3]) / 3).toFixed(2);

   	depo.res = []; //Перед следующими измерениями сбрасываем массив
  	return result; // Возвращаем результат расчета
     } 

От контроллера получаем 5 значений, сортируем (depo.res.sort()), откидываем минимальное и максимальное и вычисляем среднее. И именно вычисленное значение отдаем ядру системы.

Закрыть меню