Часть 1. Двусторонняя интеграция MegaD и Majordomo. Без программирования.
В результате выполнения конфигурации получим:
1. Управление освещением реальными кнопками на стене.
2. Управление освещением нарисованными кнопками на сцене и во всех интерфейсах Majordomo.
3. Управление освещением напрямую в MegaD, а Majordomo подхватывает все изменения как родные
Рассмотрим варианты обработки событий:
Опытные пользователи Majordomo могут начинать прочтение статьи с раздела Не очевидное, экономя время на прочтение о базовых принципах настройки интерфейса.
Кнопка на порту №30 управляет реле на порту №10
Одинарное нажание - включается/выключается бра №10
Двойное нажатие - не доступно
Долгое нажание - не доступно
Проверено и справедливо для прошивки MegaD-2561 версии 4.50b4
Присылайте автору другие устройства и будет описание о них.
На изображениях ниже красным цветом скрыты IP-адреса устройств автора в локальной сети и произвольное именование каждого устройства Megad.
Раздел Config не отличается новизной. Проиводится для примера.
Раздел Config / Megad-ID содержит важную для дела галку srv loop, которая должна быть отмечена.
Это позволит приводить Majordomo в соответсвие фактическому состоянию устройств MegaD. Таких как реле, мосфеты, симисторы. Другими словами приборы освещения, датчиков, кнопок и прочего.
Рассмотрим понфигурацию на примере тридцатого порта, к которому подключена кнопка. Выключатель без фиксации.
Act не используется в Majordomo совсем, но на случай недоступности сервера Majordomo имеет логику:
Mode делаем в состоянии P - это и определят, что обрабатыается только однократное нажатие.
Рассмотрим понфигурацию на примере десятого порта, к которому подключена лампа (бра).
Конфигурация стандартного выхода, согласно документации MegaD.
По существу в MegaD править более нечего для одной пары кнопка-освещение.
Установите из маркета дополнение MegaD devices.
В панели управления появится меню Megad
Вы можете сканировать устройства или добавить вручную.
Главное, чтоб между сервером Majordomo и контроллером Megad была сетевая доступность.
Проверить можно с помощью ping.
Придумайте название, а остальные поля путь остаются со значениями по умолчанию
В этом разделе убедитесь, что Server Script: megad.php
Будем считать, что Вы прочли инструкцию к модулю один или более раз.
Предостережение: Не нажимайте Сохранить в разделе Firmware update
Нажмите кнопку Обновить и модуль опросит соотвествующее устройство MegaD.
Заполнится список соответствующий конфигурации портов.
Для дела не принципиально, но очень настоятельно порекомендую: Настройте MegaD будто у вас нет Majordomo. Протестируйте результат на себе одну, две, три недели. И только тогда продолжайте. При замене сервера Majordomo Вас не проклянут в будущем Ваши сожители и/или заказчики.
Вся магия будет в настройке двух портов из списка. Порт с кнопкой и порт с лампой.
Но к этому вернемся позже. Сперва непростые для новичка Простые устройства
Создавайте в соответсвии с картинками ниже.
Связанные объекты создавайте автоматически.
Название предпочитаю давать на латинице, начиная с префикса simple. Потом их легко будет искать.
В моем случае Бра, но не суть.
Раздел Действия пропускаем, к нему вернемся позже.
Общее
Настройки
Связанные устройства
Расписание
Добавляем кнопку по аналогии с добавлением Лампы.
Раздел Действия пропускаем, к нему вернемся позже.
Общее
Настройки
Связанные устройства
Связанные устройства
Эксперты могут пропустить все разделы выше, там слишком все очевидно.
Отсюда начинается ключевая логика: как связываем и что обрабатываем.
Переходим в раздел Панель управления / Устройства / MegaD.
Выбираем порт, который соответствует лампе. В примере P10
Связываем с простым устройством лампа (simpleSonWall), указываем свойство status.
Переходим в раздел Панель управления / Устройства / MegaD.
Выбираем порт, который соответствует лампе. В примере P30 (input)
Связываем с простым устройством кнопка (simpleSonWallButton), указываем свойство status.
Важно!!!
Переключатель устанавливаем Skip default action: Да
Иначе у вас будет дублировать управление MegaD и Majordomo. Включение лампы будет сопровождаться мгновенным выключением.
Если не верите, то проверьте стевой трафик: tcpdump -i any -nn -vv -s0 host 172.16.0.xx
Тут для новичков может быть немного сложно, но Вы справитесь. Иначе бросьте пить и курить, а тогда попробуйте снова)
Переходим в раздел Панель управления / Объекты / SDevices / SButtons / ButtonXX (simpleSonWallButton),
затем Методы,
затем statusUpdated.
Для неопытных потомков всю логику описываю в Blockly, но выбор за Вами.
Редактировать
После освоения меняйте логику на более совершенную.
Обрабатываем только логику смены статуса на 1. Иначе при отпускании выключателя пропадет видимость.
Сохранить
Необязательно:
Кто предпочитает код, то получит
if ($this->getProperty('status')) {
if (getGlobal("Relay16.status")) {
callMethod("Relay16.turnOff");
} else {
callMethod("Relay16.turnOn");
$timerCode=<<<EOT
callMethod("Relay16.turnOff");
EOT;
setTimeOut('ligthSonTurn', $timerCode, (int)('3600'));
}
}
Тут для новичков может быть совсем сложно, но Вам оно не надо. Смело пропускайте.
Я создал объект комната, в нем свойство Ligth и назначаю ему номер порта включенной лампы, остальные лампы в помещении выключаю. Полезно, чтоб не бегать между выключателем бра и выключателем основного освещения.
Также для работы логики добавил в простых устройствах свойство megadPort, куда пишу номер соответствующего порта.
Даже не расчитываю, что этот раздел будут читать. Повторю логику сам, если исходники быдут утеряны.
Переходим в раздел Панель управления / Объекты / SDevices / SRelays / RelayXX (simpleSonWall),
затем Методы,
затем statusUpdated.
Для неопытных потомков всю логику описываю в Blockly, но выбор за Вами.
Редактировать
После освоения меняйте логику на более совершенную.
Обрабатываем только логику смены статуса на 1. Иначе при отпускании выключателя пропадет видимость.
Сохранить
Необязательно:
Кто предпочитает код, то получит
if ($this->getProperty('status')) {
setGlobal($this->getProperty('linkedRoom').'.'.$this->getProperty('loadType'), $this->getProperty('megadPort'));
} else if (getGlobal($this->getProperty('linkedRoom').'.'.$this->getProperty('loadType')) == $this->getProperty('megadPort')) {
setGlobal($this->getProperty('linkedRoom').'.'.$this->getProperty('loadType'), '0');
}
Есть еще много логики с привязкой к MegaD.
Донаты можно отправлять на карту 5375414100851343 или Webmoney Z175390013494
Спасибо за внимание.
Odessa, Украина