Часть 2. Двусторонняя интеграция MegaD и Majordomo. Без программирования.
В результате выполнения конфигурации получим:
Гибкое многократное нажатие кнопки выключателя (click, doubleclick, долгое удержание)
Рассмотрим варианты обработки событий:
Пробелы конфигурации второй статьи можно восстановить прочитав первую.
Кнопка на порту №17 управляет реле на порту №12, №11.
Одинарное нажание кнопки - включается/выключается бра №12
Двойное нажатие кнопки - включается/выключается основное освещение №11
Отпускание кнопки после долгого нажатия - не востребовано в моем случае, но доступно для использование Вами.
К порту MegaD подключена кнопка выключателя без фиксации.
Type: In - Стандартный аналоговый вход
Act: - меняем состояние лампы №12 (вкл/выкл), выключаем лампу №11 и лампу №27, ждем 10 минут, выключаем лампу №12
Mode: Сlick - Ключевой момент в конфигурации - обработка нажатий click, doubleclick, longpress
К порту MegaD подключена лампа - 220В, цоколь E27, LED 15W, корпус Бра
Type: Out - Стандартный аналоговый выход
Group: 10 - можете не заполнять. В моей конфигурации применяется логика g10:0, которая выключает все лампы группы №10.
Переходим в раздел Панель управления / Объекты / SDevices / SButtons.
Переключаемся на вкладку Методы.
Нажимаем кнопку Добавить новый метод.
Название: onClickMegad
Для неопытных потомков всю логику кода описываю в Blockly, но выбор за Вами.
Сохранить
Редактировать код blockly
Собираем логику:
Установить статус 3, если Megad прислало событие m, которое соответствует отпусканию кнопки после долгого нажатия.
Установить статус 1 или 2, если Megad прислало событие click, которое соответствует одно- или двократному нажатию на кнопку.
Если пишете код на php, то результат может выглядеть так:
$this->setProperty('status', $_REQUEST[m] ? '3' : $_REQUEST[click]);
Предполагаем, что в Majordomo уже создано простое устройство с именем simpleHallLightWallButton. См предыдущую статью.
Переходим в раздел Панель управления / Устройства / MegaD.
Выбираем порт, который соответствует кнопке. В примере P17 (input)
Связываем с простым устройством кнопка (simpleHallLightWallButton), указываем метод onClickMegad.
Важно!!!
Переключатель устанавливаем Skip default action: Да
Иначе у вас будет дублировать управление MegaD и Majordomo. Включение лампы будет сопровождаться мгновенным выключением.
Если не верите, то проверьте стевой трафик: tcpdump -i any -nn -vv -s0 host 172.16.0.xx
Предполагаем, что в Majordomo уже создано Простое устройство с именем simpleHallLightWall. См предыдущую статью.
Переходим в раздел Панель управления / Устройства / MegaD.
Выбираем порт, который соответствует реле (лампе). В примере P12 (output)
Связываем с простым устройством кнопка (simpleHallLightWallButton), указываем свойтво status.
Ранее вызов метода onClickMegad вынудил сменить статус кнопки simpleHallLightWallButton на значения 1, 2 либо 3.
Переходим в раздел Панель управления / Объекты / SDevices / SButtons → ButtonXX (simpleHallLightWallButton)
Переходим на вкладку Методы
ButtonXX.statusUpdated Настроить
Для неопытных потомков всю логику кода описываю в Blockly, но выбор за Вами.
Сохранить
Редактировать код blockly
Собираем логику:
Статус 1 (нажатие) - Выключить лампу #12 если включена. Включить, если выключена, а затем через 10 минут выключить.
Статус 2 (двойное нажатие) - Выключить лампу #11 если включена. Включить, если выключена.
Статус 3 (отпускание после долгого нажатия) - Не описана логика. Можете выполнить свою.
Если пишете код на 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
Спасибо за внимание.
Odessa, Украина