[Модуль] MegaD (megad)
Модератор: immortal
-
- Сообщения: 12
- Зарегистрирован: Вс янв 15, 2017 12:51 am
- Благодарил (а): 2 раза
- Поблагодарили: 1 раз
Re: Модуль "MegaD"
Коллеги!
Есть какой подробный мануал, как подключать Мегу? Без изысков? Направьте по назначению, или давайте создадим вместе, и выложим в шапке темы, или давайте подправим то что есть. Я смотрю, люди приходят, и каждый стучится об одно и тоже... Вот как я сейчас.
Для примера, есть Мега, у нее задействован вход I0, на вход посажена кнопка (выключатели с автовозвратом в состояние "выкл").
На выходе O7 сидит лампочка.
По порядку:
1) нужно создать объект Input_0_MegaD_XXX класса keySensors (а лучше объект специального дочернего класса MegaDInputs класса keySensors), в котором создать специальный метод inputSwitched, который вызывается каждый раз при изменении состояния привязанного входа Меги; этим методом изменяется специальное свойство buttonPressed. При этом, поскольку кнопка, свойство будет изменено только при изменении входа с состояния 1 на состояние 0 (кнопка отпущена).
2) привязать вход I0 Меги к объекту Input_0_MegaD_XXX и его методу inputSwitched.
3) создать объект Output_7_MegaD_XXX класса Relays, для которого в метод switched вписать return "7:2"
4) создать на сцене объект "выключатель", для которого указать связанный объект Output_7_MegaD_XXX
5) опять вернуться к конфигурированию Меги, выхода O7 связать с объектом Output_7_MegaD_XXX, связанным свойство указать status
6) ---???
что дальше? как связать объект Input_0_MegaD_XXX и объект Output_7_MegaD_XXX? Совершенно непонятно, ведь в случае выключателя (на сцене), привязка идет очень неявно, просто указать связанный объект... А дальше все сконфигурируется само. Как?
ЗЫ: и вообще - что может скриптовый язык? справочник есть? Список доступных переменных на входе, можно ли менять свойства связанных объектов, какие есть доступные функции... Ведь их не отладишь, приходится писать "вслепую". Тот еще геморрой... Прошу прощения, если задаю банальные вопросы, но например мне не хватает структурированного мануала. И я понимаю, что это просто PHP, но все равно, что я могу использовать, что мне дается в рамках предложенной здесь модели, подразумевающей привязывание объектов, свойств, методов....
ЗЗЫ: справочник нашел по адресу http://majordomo.smartliving.ru/Main/Pr ... gFunctions. Однако вопрос по дорожной карте, как действовать в конкретном, описанном выше случае, остался...
Есть какой подробный мануал, как подключать Мегу? Без изысков? Направьте по назначению, или давайте создадим вместе, и выложим в шапке темы, или давайте подправим то что есть. Я смотрю, люди приходят, и каждый стучится об одно и тоже... Вот как я сейчас.
Для примера, есть Мега, у нее задействован вход I0, на вход посажена кнопка (выключатели с автовозвратом в состояние "выкл").
На выходе O7 сидит лампочка.
По порядку:
1) нужно создать объект Input_0_MegaD_XXX класса keySensors (а лучше объект специального дочернего класса MegaDInputs класса keySensors), в котором создать специальный метод inputSwitched, который вызывается каждый раз при изменении состояния привязанного входа Меги; этим методом изменяется специальное свойство buttonPressed. При этом, поскольку кнопка, свойство будет изменено только при изменении входа с состояния 1 на состояние 0 (кнопка отпущена).
2) привязать вход I0 Меги к объекту Input_0_MegaD_XXX и его методу inputSwitched.
3) создать объект Output_7_MegaD_XXX класса Relays, для которого в метод switched вписать return "7:2"
4) создать на сцене объект "выключатель", для которого указать связанный объект Output_7_MegaD_XXX
5) опять вернуться к конфигурированию Меги, выхода O7 связать с объектом Output_7_MegaD_XXX, связанным свойство указать status
6) ---???
что дальше? как связать объект Input_0_MegaD_XXX и объект Output_7_MegaD_XXX? Совершенно непонятно, ведь в случае выключателя (на сцене), привязка идет очень неявно, просто указать связанный объект... А дальше все сконфигурируется само. Как?
ЗЫ: и вообще - что может скриптовый язык? справочник есть? Список доступных переменных на входе, можно ли менять свойства связанных объектов, какие есть доступные функции... Ведь их не отладишь, приходится писать "вслепую". Тот еще геморрой... Прошу прощения, если задаю банальные вопросы, но например мне не хватает структурированного мануала. И я понимаю, что это просто PHP, но все равно, что я могу использовать, что мне дается в рамках предложенной здесь модели, подразумевающей привязывание объектов, свойств, методов....
ЗЗЫ: справочник нашел по адресу http://majordomo.smartliving.ru/Main/Pr ... gFunctions. Однако вопрос по дорожной карте, как действовать в конкретном, описанном выше случае, остался...
-
- Сообщения: 530
- Зарегистрирован: Чт авг 20, 2015 11:32 am
- Откуда: Ярославль
- Благодарил (а): 61 раз
- Поблагодарили: 75 раз
- Контактная информация:
Re: Модуль "MegaD"
а через дополнение в маркете пробовали? мне кажется самый удобный вариантZavoolon писал(а):Коллеги!
Есть какой подробный мануал, как подключать Мегу? Без изысков? Направьте по назначению, или давайте создадим вместе, и выложим в шапке темы, или давайте подправим то что есть. Я смотрю, люди приходят, и каждый стучится об одно и тоже... Вот как я сейчас.
Для примера, есть Мега, у нее задействован вход I0, на вход посажена кнопка (выключатели с автовозвратом в состояние "выкл").
На выходе O7 сидит лампочка.
По порядку:
1) нужно создать объект Input_0_MegaD_XXX класса keySensors (а лучше объект специального дочернего класса MegaDInputs класса keySensors), в котором создать специальный метод inputSwitched, который вызывается каждый раз при изменении состояния привязанного входа Меги; этим методом изменяется специальное свойство buttonPressed. При этом, поскольку кнопка, свойство будет изменено только при изменении входа с состояния 1 на состояние 0 (кнопка отпущена).
2) привязать вход I0 Меги к объекту Input_0_MegaD_XXX и его методу inputSwitched.
3) создать объект Output_7_MegaD_XXX класса Relays, для которого в метод switched вписать return "7:2"
4) создать на сцене объект "выключатель", для которого указать связанный объект Output_7_MegaD_XXX
5) опять вернуться к конфигурированию Меги, выхода O7 связать с объектом Output_7_MegaD_XXX, связанным свойство указать status
6) ---???
что дальше? как связать объект Input_0_MegaD_XXX и объект Output_7_MegaD_XXX? Совершенно непонятно, ведь в случае выключателя (на сцене), привязка идет очень неявно, просто указать связанный объект... А дальше все сконфигурируется само. Как?
ЗЫ: и вообще - что может скриптовый язык? справочник есть? Список доступных переменных на входе, можно ли менять свойства связанных объектов, какие есть доступные функции... Ведь их не отладишь, приходится писать "вслепую". Тот еще геморрой... Прошу прощения, если задаю банальные вопросы, но например мне не хватает структурированного мануала. И я понимаю, что это просто PHP, но все равно, что я могу использовать, что мне дается в рамках предложенной здесь модели, подразумевающей привязывание объектов, свойств, методов....
ЗЗЫ: справочник нашел по адресу http://majordomo.smartliving.ru/Main/Pr ... gFunctions. Однако вопрос по дорожной карте, как действовать в конкретном, описанном выше случае, остался...
-
- Сообщения: 12
- Зарегистрирован: Вс янв 15, 2017 12:51 am
- Благодарил (а): 2 раза
- Поблагодарили: 1 раз
Re: Модуль "MegaD"
Мега установлена как дополнение через маркет, конечно. Выше я писал, что даже будучи установленной таким образом, она не "взлетела", а конкретнее - были ошибки при использовании megad-cfg.php, пришлось править код. Но это все в прошлом, а теперь хотелось бы понять, как не вылезая за рамки уже существующей экосистемы, полностью сконфигурировать работу Меги и Мажора.sega6549 писал(а):а через дополнение в маркете пробовали? мне кажется самый удобный вариантZavoolon писал(а):Коллеги!
...
И хочу-то немногого (пока) - иметь изображение квартиры и включать/выключать свет дистанционно, нажимая на изображение выключателя в соответствующем месте. Но также хочу, чтобы сервер обрабатывал сигналы от кнопок реальных, а не только виртуальных (экранных). Пока сервер управляет светом только с помощью виртуальных кнопок, нажатия реальных кнопок никак не привязаны к управлению выходами. Собственно, в этом и вопрос.
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Модуль "MegaD"
Ваша задача решается проще, чем вы написали. С помощью встроенных средств MegaD вы можете связать кнопки с реле без использования сервера. Сервер будет получать только изменения статуса реле и, соответственно, управлять реле. Привязывать сервер ко входам нет необходимости.Zavoolon писал(а):Мега установлена как дополнение через маркет, конечно. Выше я писал, что даже будучи установленной таким образом, она не "взлетела", а конкретнее - были ошибки при использовании megad-cfg.php, пришлось править код. Но это все в прошлом, а теперь хотелось бы понять, как не вылезая за рамки уже существующей экосистемы, полностью сконфигурировать работу Меги и Мажора.sega6549 писал(а):а через дополнение в маркете пробовали? мне кажется самый удобный вариантZavoolon писал(а):Коллеги!
...
И хочу-то немногого (пока) - иметь изображение квартиры и включать/выключать свет дистанционно, нажимая на изображение выключателя в соответствующем месте. Но также хочу, чтобы сервер обрабатывал сигналы от кнопок реальных, а не только виртуальных (экранных). Пока сервер управляет светом только с помощью виртуальных кнопок, нажатия реальных кнопок никак не привязаны к управлению выходами. Собственно, в этом и вопрос.
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: Модуль "MegaD"
Мажордомо замечательно тем, что одни и те же вещи можно сделать разными способами. Вечером (по московскому времени) напишу, как эта задача решается у меня (по шагам).Zavoolon писал(а):Однако вопрос по дорожной карте, как действовать в конкретном, описанном выше случае, остался...
-
- Сообщения: 12
- Зарегистрирован: Вс янв 15, 2017 12:51 am
- Благодарил (а): 2 раза
- Поблагодарили: 1 раз
Re: Модуль "MegaD"
Да, конечно, сейчас у меня именно так, как Вы пишете - то есть Мега сама управляет своими выходами, сервер не привязан к входам. Но замануха умного дома ведь в том, что всегда хочется сделать "немножко больше и лучше"! Например, нажимая одну кнопку, выключить все выходы всех 6 Мег в сети... Скажем, средствами самой Меги этого сделать не получится, ограничивает длина командной строки, можно отправить команду только одной Меге...sergejey писал(а):
Ваша задача решается проще, чем вы написали. С помощью встроенных средств MegaD вы можете связать кнопки с реле без использования сервера. Сервер будет получать только изменения статуса реле и, соответственно, управлять реле. Привязывать сервер ко входам нет необходимости.
Последний раз редактировалось Zavoolon Ср янв 25, 2017 3:16 pm, всего редактировалось 1 раз.
-
- Сообщения: 12
- Зарегистрирован: Вс янв 15, 2017 12:51 am
- Благодарил (а): 2 раза
- Поблагодарили: 1 раз
Re: Модуль "MegaD"
Вот спасибо! Буду ждать Вашего описания, уверен, оно поможет не только мне!Chainik писал(а):Мажордомо замечательно тем, что одни и те же вещи можно сделать разными способами. Вечером (по московскому времени) напишу, как эта задача решается у меня (по шагам).Zavoolon писал(а):Однако вопрос по дорожной карте, как действовать в конкретном, описанном выше случае, остался...
-
- Сообщения: 265
- Зарегистрирован: Пт дек 26, 2014 1:58 pm
- Благодарил (а): 33 раза
- Поблагодарили: 24 раза
Re: Модуль "MegaD"
Увы, так и не реализована данная нужная функция в модуле... У же писал как-то, попробую еще раз...Kod.Begemot писал(а):Вопрос к пользуюущимся модулем. Вот если сейчас мегу перезагрузить, состояние выходов восстановится на то, что было до перезапуска?
Сергей, МегаД при первом старте(рестарте) отправляет серверу значение st=1. Крайне хотелось бы, чтобы в ответ на данную посылку модуль отправлял Меге команды на включение/выключение выходов(не являющихся "термостатами"), согласно последнему их статусу в модуле.
И еще один момент, ребята, давайте не будем валить хотелки реализуемые в 2560 в данный модуль. Дело в том, что ее разработка только-только начинается и это потенциально грозит постоянной бетой и проблемами в данном модуле. Хорошо бы хотя бы базовый функционал 328-ой довести до ума. Ее развитие прекращено и есть смысл доделать модуль...
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: Модуль "MegaD"
Сразу хочу сказать, что модуль MegaD я использую только для того, чтобы «отлавливать» срабатывание входов Меги. Это несколько отличается от задуманного автором способа использования модуля, но я, видимо, что-то не допонял или не смог когда-то разобраться. Поэтому применяю несколько другой подход.Zavoolon писал(а):Коллеги!
Есть какой подробный мануал, как подключать Мегу? Без изысков? Направьте по назначению, или давайте создадим вместе, и выложим в шапке темы, или давайте подправим то что есть. Я смотрю, люди приходят, и каждый стучится об одно и тоже... Вот как я сейчас.
Для примера, есть Мега, у нее задействован вход I0, на вход посажена кнопка (выключатели с автовозвратом в состояние "выкл").
На выходе O7 сидит лампочка.
По порядку:
1) нужно создать объект Input_0_MegaD_XXX класса keySensors (а лучше объект специального дочернего класса MegaDInputs класса keySensors), в котором создать специальный метод inputSwitched, который вызывается каждый раз при изменении состояния привязанного входа Меги; этим методом изменяется специальное свойство buttonPressed. При этом, поскольку кнопка, свойство будет изменено только при изменении входа с состояния 1 на состояние 0 (кнопка отпущена).
2) привязать вход I0 Меги к объекту Input_0_MegaD_XXX и его методу inputSwitched.
3) создать объект Output_7_MegaD_XXX класса Relays, для которого в метод switched вписать return "7:2"
4) создать на сцене объект "выключатель", для которого указать связанный объект Output_7_MegaD_XXX
5) опять вернуться к конфигурированию Меги, выхода O7 связать с объектом Output_7_MegaD_XXX, связанным свойство указать status
6) ---???
что дальше? как связать объект Input_0_MegaD_XXX и объект Output_7_MegaD_XXX? Совершенно непонятно, ведь в случае выключателя (на сцене), привязка идет очень неявно, просто указать связанный объект... А дальше все сконфигурируется само. Как?
ЗЫ: и вообще - что может скриптовый язык? справочник есть? Список доступных переменных на входе, можно ли менять свойства связанных объектов, какие есть доступные функции... Ведь их не отладишь, приходится писать "вслепую". Тот еще геморрой... Прошу прощения, если задаю банальные вопросы, но например мне не хватает структурированного мануала. И я понимаю, что это просто PHP, но все равно, что я могу использовать, что мне дается в рамках предложенной здесь модели, подразумевающей привязывание объектов, свойств, методов....
ЗЗЫ: справочник нашел по адресу http://majordomo.smartliving.ru/Main/Pr ... gFunctions. Однако вопрос по дорожной карте, как действовать в конкретном, описанном выше случае, остался...
Считаем, что в модуле MegaD Мега успешно обнаружилась и вопрос подключения Меги к модулю здесь обсуждать не будем.
Итак, приступим.
Имеется Мега, Мажордомо с установленным модулем MegaD, «железный» выключатель без фиксации (кнопка) на стене, лампочка на потолке.
Допустим, адрес Меги в сети 192.168.0.14, пароль “sec”; «железный» выключатель скоммутирован со входом Меги «P0», а лампочка подключена ко выходу «P7».
Задача: включать/выключать лампочку с помощью Мажордомо как из интерфейса, так и посредством «железного» выключателя.
1. Для «железного» выключателя создаем в классе KeySensors виртуальный объект. «Обозвать» объект можно как угодно, однако название «со смыслом» облегчит нам идентификацию объекта среди однотипных. Назовем его, к примеру, «Button_014-00». При этом под 014 подразумевается окончание адреса Меги в сети, а под 00 – порт «P0», куда подключен выключатель.
Подход с названием может и не идеальный («железный» выключатель никуда со стены не денется, а адрес Меги может неоднократно меняться в процессе настройки/переделки/апгрейда, да и контакты от выключателя могут «переезжать» из одного порта в другой). Но пока для простоты «ориентирования» в объектах я для себя остановился на таком варианте присвоения имен.
У «Button_014-00» уже есть метод «statusChanged».
2. Для выхода Меги «P7» создаем виртуальный объект в классе Relays. Назовем его по аналогии «Relay_014-07». У объекта имеются свойство «status» и «штатные» методы «turnOn», «turnOff» и «switch».
Произведем настройку методов путем записи кода:
[перед сохранением введенного пользователем кода в пункте «Вызывать родительский метод» проставим радиоточку в положение «НИКОГДА».]
в «turnOn» запишем
Код: Выделить всё
file_get_contents("http://192.168.0.14/sec/?cmd=7:1");
setGlobal('Relay_014-07.status', 1);
Код: Выделить всё
file_get_contents("http://192.168.0.14/sec/?cmd=7:0");
setGlobal('Relay_014-07.status', 0);
Код: Выделить всё
$status=$this->getProperty("status");
if ($status) {
$this->callMethod('turnOff');
} else {
$this->callMethod('turnOn');
}
Код: Выделить всё
file_get_contents("http://192.168.0.14/sec/?cmd=7:2");
$state =file_get_contents("http://192.168.0.14/sec/?pt=7&cmd=get");
$state = substr($state,0,2);
if ($state == "ON") {
setGlobal('Relay_014-07.status', 1);
} else {
setGlobal('Relay_014-07.status', 0);
}
4. В модуле MegaD у Меги на вкладке «Данные» у порта «0 Input» в поле «Связанный объект» выставляем «Button_014-00». В поле «Метод» выставляем «statusChanged».
Также я проставляю галку в поле «Skip default action», потому что не хочу, чтобы сервер запускал выполнение действия по умолчанию. Пусть действие по умолчанию выполняет сама Мега, когда сервер недоступен.
5. Возвращаемся к объекту «Button_014-00» и настраиваем его метод «statusChanged». Пишем туда код PHP
Код: Выделить всё
callMethod('Relay_014-07.switch');
Все. Круг замкнулся. Теперь наша лампочка на потолке может включаться/выключаться Мажордомо как «железным» выключателем (кнопкой), так и выключателем на сцене.
Написал все это без возможности повторить на своем стенде, так что если вдруг где-то ошибся в коде, прошу меня простить. Но общая схема, думаю, понятна.
Еще остается один момент, который стоит упомянуть. Наша лампочка может быть включена и без участия Мажордомо (самой Мегой путем выполнения сценария по умолчанию, из web-интерфейса Меги, командой из браузера и пр.). И после того, как мы включили Мажордомо, между состоянием выключателя на сцене и реальным состоянием лампочки может быть рассогласование. Конечно, при первом клике по выключателю («железному» или на сцене) синхронизация состояний восстановится.
Однако, можно принудительно проводить «сверку» состояний путем запуска скрипта в цикле, например, раз в 15 минут). Назовем скрипт «proverka».
Код: Выделить всё
$state =file_get_contents("http://192.168.0.14/sec/?pt=7&cmd=get");
$state = substr($state,0,2);
if ($state == "ON") {
setGlobal('Relay_014-07.status', 1);
} else {
setGlobal('Relay_014-07.status', 0);
}
setTimeOut('myTimer_proverka,'runScript("proverka ");',60*15);
Код: Выделить всё
if ($m%15 == 0) {runScript("proverka");}
И напоследок, хочу поблагодарить автора Мажордомо Сергея за такой замечательный гибкий инструмент, в котором большинство вещей можно сделать большим количеством разнообразных способов. А лучший способ тот – который ты понимаешь
Еще на ab-log появилась тема (https://ab-log.ru/forum/viewtopic.php?f=1&t=1328), где подробно показано, как можно произвести настройку освещения. Особенно рекомендую посмотреть, что написано в конце длинного первого поста после подзаголовка "ДОПОЛНЕНИЕ". Там все реализовано более или менее в соответствии с идеологией Мажордомо.
Последний раз редактировалось Chainik Сб окт 28, 2017 11:01 pm, всего редактировалось 3 раза.
- Рейтинг: 3.49%
-
- Сообщения: 74
- Зарегистрирован: Вт дек 31, 2013 2:03 pm
- Откуда: Самара
- Благодарил (а): 25 раз
- Поблагодарили: 5 раз
Re: Модуль "MegaD"
Наверное проще вручную указать какой девайс используется (7I7O или 14IN или 14R или MegaD-2561)sergejey писал(а):То, что пресетов больше нет, не знал. Как теперь отличить какой тип модуля подключен? Например, 7I7O или 14IN или 14R или MegaD-2561. Я довольно давно изучал API MegaD, так что если кто подскажет, как это лучше решить, то сразу реализую. Может быть есть какой-то более простой способ однозначно определять в каком режиме используется порт?Pooh писал(а):А их (14 и 15) по-другому никак и не настроишь
Я вот этот комментарий не очень понял. или мелось в виду ADC14 и ADC15?Кроме преображения ADC6 и ADC7 пропала температура и появились "Текущее значение 2", "Связанный объект 2" и "Связанное св-во 2"
Что это и что с этим делать?
Насчет "Текущее значение 2", "Связанный объект 2" и "Связанное св-во 2" имелось ввиду:
СпойлерПоказать