mambur

 
<<< Back

MegaD по-киевски с подливкой

Часть 2. Двусторонняя интеграция MegaD и Majordomo. Без программирования.

В результате выполнения конфигурации получим:
Гибкое многократное нажатие кнопки выключателя (click, doubleclick, долгое удержание)

Рассмотрим варианты обработки событий:

  1. Быстрое однократное нажатие кнопки выключателя.
  2. Гибкое многократное нажатие кнопки выключателя (click, doubleclick, долгое удержание) - В этой статье
  3. Диммирование LED лент

Пробелы конфигурации второй статьи можно восстановить прочитав первую.

Легенда

Кнопка на порту №17 управляет реле на порту №12, №11.
Одинарное нажание кнопки - включается/выключается бра №12
Двойное нажатие кнопки - включается/выключается основное освещение №11
Отпускание кнопки после долгого нажатия - не востребовано в моем случае, но доступно для использование Вами.

Конфигурация порта #17 в MegaD. Кнопка

К порту MegaD подключена кнопка выключателя без фиксации.

megad17

Type: In - Стандартный аналоговый вход
Act: - меняем состояние лампы №12 (вкл/выкл), выключаем лампу №11 и лампу №27, ждем 10 минут, выключаем лампу №12
Mode: Сlick - Ключевой момент в конфигурации - обработка нажатий click, doubleclick, longpress

Конфигурация порта #12 в MegaD. Лампа

К порту MegaD подключена лампа - 220В, цоколь E27, LED 15W, корпус Бра

megad12

Type: Out - Стандартный аналоговый выход
Group: 10 - можете не заполнять. В моей конфигурации применяется логика g10:0, которая выключает все лампы группы №10.

Новый метод "onClickMegad" для простых устройств SButtons в Majordomo.

Переходим в раздел Панель управления / Объекты / SDevices / SButtons.
Переключаемся на вкладку Методы.
Нажимаем кнопку Добавить новый метод.

onClickMegadMethod

Название: onClickMegad
Для неопытных потомков всю логику кода описываю в Blockly, но выбор за Вами.

Сохранить

Логика метода

Редактировать код blockly

Собираем логику:
Установить статус 3, если Megad прислало событие m, которое соответствует отпусканию кнопки после долгого нажатия.
Установить статус 1 или 2, если Megad прислало событие click, которое соответствует одно- или двократному нажатию на кнопку.

blockly1

Если пишете код на php, то результат может выглядеть так:

$this->setProperty('status', $_REQUEST[m] ? '3' : $_REQUEST[click]);

Конфигурация порта #17 в Majordomo. Кнопка

Предполагаем, что в Majordomo уже создано простое устройство с именем simpleHallLightWallButton. См предыдущую статью.

Переходим в раздел Панель управления / Устройства / MegaD.
Выбираем порт, который соответствует кнопке. В примере P17 (input)

Связываем с простым устройством кнопка (simpleHallLightWallButton), указываем метод onClickMegad.

Важно!!!
Переключатель устанавливаем Skip default action: Да
Иначе у вас будет дублировать управление MegaD и Majordomo. Включение лампы будет сопровождаться мгновенным выключением.
Если не верите, то проверьте стевой трафик: tcpdump -i any -nn -vv -s0 host 172.16.0.xx

mdm17

Конфигурация порта #12 в Majordomo. Реле (лампа)

Предполагаем, что в Majordomo уже создано Простое устройство с именем simpleHallLightWall. См предыдущую статью.

Переходим в раздел Панель управления / Устройства / MegaD.
Выбираем порт, который соответствует реле (лампе). В примере P12 (output)

Связываем с простым устройством кнопка (simpleHallLightWallButton), указываем свойтво status.

mdm12

Обработка смены статуса кнопки

Ранее вызов метода onClickMegad вынудил сменить статус кнопки simpleHallLightWallButton на значения 1, 2 либо 3.

Переходим в раздел Панель управления / Объекты / SDevices / SButtons → ButtonXX (simpleHallLightWallButton)
Переходим на вкладку Методы
ButtonXX.statusUpdated Настроить

button13

Для неопытных потомков всю логику кода описываю в Blockly, но выбор за Вами.

Сохранить

Логика метода

Редактировать код blockly

Собираем логику:
Статус 1 (нажатие) - Выключить лампу #12 если включена. Включить, если выключена, а затем через 10 минут выключить.
Статус 2 (двойное нажатие) - Выключить лампу #11 если включена. Включить, если выключена.
Статус 3 (отпускание после долгого нажатия) - Не описана логика. Можете выполнить свою.

blockly123

Если пишете код на php, то результат может выглядеть так:

if (1 == $this->getProperty('status')) {
  if (getGlobal("Relay08.status")) {
    callMethod("Relay08.turnOff");
  } else {
    callMethod("Relay08.turnOn");
    $timerCode=<<<EOT
      callMethod("Relay08.turnOff");
EOT;
    setTimeOut('simpleHallLightWallButton-turnOff', $timerCode, (int)('600'));
  }
} else if (2 == $this->getProperty('status')) {
  if (getGlobal("Relay19.status")) {
    callMethod("Relay19.turnOff");
  } else {
    callMethod("Relay19.turnOn");
  }
} else if (3 == $this->getProperty('status')) {
}

Прочее

Есть еще много логики с привязкой к MegaD.
Донаты можно отправлять на карту 5375414100851343 или Webmoney Z175390013494
Спасибо за внимание.

Discuss (0) (1)

See also:
2022-08-02 MegaD по-киевски с сыром
2022-08-01 MegaD по-киевски

Odessa, Украина