[Модуль] MegaD (megad)
Модератор: immortal
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: [Модуль] MegaD (megad)
Попробуйте вписать адрес сервера в Local-IP. Попробуйте дать права 777 на папку, где лежат файлы модуля. С Линуксом не работал, поэтому ничего более определенного сказать не смогу.
Еще можно проанализировать сетевой трафик (Wireshark).
Вообще, у всех, у кого сразу модуль не захотел читать конфигурацию, в конце концов все налаживалось, иногда даже безо всяких усилий со стороны пользователя (viewtopic.php?f=5&t=2263&start=1013).
Еще можно проанализировать сетевой трафик (Wireshark).
Вообще, у всех, у кого сразу модуль не захотел читать конфигурацию, в конце концов все налаживалось, иногда даже безо всяких усилий со стороны пользователя (viewtopic.php?f=5&t=2263&start=1013).
-
- Сообщения: 364
- Зарегистрирован: Вс янв 15, 2017 5:34 pm
- Откуда: Москва
- Благодарил (а): 100 раз
- Поблагодарили: 53 раза
Re: [Модуль] MegaD (megad)
Расскажу о своей реализации кнопок на MegaD-2561 (fw: 4.29b4), может кому поможет.beavisgood писал(а): ↑Вт ноя 20, 2018 7:26 amПривет, у меня вопрос по подключению, кнопки и реле, с железными кнопками возникли проблемы.
Кнопка P0, Реле Р7, классика.
Попытка 1: МОДУЛЬ MegaD:
Сначала пробовал связать эти два объекта через Модуль MegaD, на классических объектах Relay, (status, turnon, turnoff, switch)
из софта реле управляется отлично, но как в дело вступает железная кнопка, начинаются мигания, включения, отключения, реле живет своей жизнью.
Так то все красиво выглядит и логично, настроили модуль, кнопку нажали, мега отправила это событие к мажору.
Мажор принял решение, и выдал команду меге, включи реле, мега приняла эту команду, поменяла состояние порта.
Но к сожалению на связке модуль MegaD этот вариант не работает, Почему? мне не понятно до конца.
Тех задание для детской комнаты по реализации вкл./выкл света такое.
- 1.Одна кнопка для ребенка, условно Валеры (вкл/выкл) на личный свет.
2.Вторая кнопка для ребенка, Насти (вкл/выкл) на личный свет.
3.Третья кнопка проходная, с которой можно выключить и включить свет любого ребенка по отдельности, с возможностью выключить сразу весь свет.
- 1.Кнопка Валеры подключена к порту Р0 (MegaD-2561).
2.Кнопка Насти подключена к порту Р1 (MegaD-2561).
3.Кнопка проходная подключена к порту Р2 (MegaD-2561).
4.Свет Валеры подключен к порту Р7 (MegaD-2561).
5.Свет Насти подключен к порту Р10 (MegaD-2561).
- 1.Кнопка Валеры подключена к порту Р0 (MegaD-2561). 2.Кнопка Насти подключена к порту Р1 (MegaD-2561). 3.Кнопка проходная подключена к порту Р2 (MegaD-2561). 4.Свет Валеры подключен к порту Р7 (MegaD-2561). 5.Свет Насти подключен к порту Р10 (MegaD-2561).
- 1.Создать классб. turnOff
Код: Выделить всё
file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":1"); $this->setProperty('status', 1);
в. switchКод: Выделить всё
file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":0"); $this->setProperty('status', 0); $this->setProperty("Menu", Выкл);
Код: Выделить всё
$state = file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?pt=".$this->getProperty('Port')."&cmd=get"); if ($state == "ON") { $this->setProperty('status', 1); } else { $this->setProperty('status', 0); }
2.Создать объекты
3.Создать свойства
4.Создать методы
а. turnOn
- 1. с кнопки света Валеры (вкл/выкл)
2. с кнопки света Насти (вкл/выкл)
3. с проходной кнопки по одиночному нажатию (вкл/выкл) свет Валеры, по двойному нажатию (вкл/выкл) свет Насти, удержание кнопки выключает весь свет и Валеры и Насти.
- Вложения
-
- 1.PNG (4.72 КБ) 4029 просмотров
- За это сообщение автора kas5858 поблагодарил:
- beavisgood (Пн ноя 26, 2018 6:01 am)
- Рейтинг: 1.16%
Raspberry Pi3 - Broadlink - MegaD - Много датчиков - Камеры - Часы.
Connect
Connect
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: [Модуль] MegaD (megad)
Я правильно понимаю, что при таком варианте реализации при использовании кнопки "P2", результат выполнения действия никак не отражается в интерфейсе УД? (Судя по отсутствию настроек в модуле MegaD для этой кнопки.)
-
- Сообщения: 364
- Зарегистрирован: Вс янв 15, 2017 5:34 pm
- Откуда: Москва
- Благодарил (а): 100 раз
- Поблагодарили: 53 раза
Re: [Модуль] MegaD (megad)
Не совсем так, позже напишу, я уже в дороге.Chainik писал(а):Я правильно понимаю, что при таком варианте реализации при использовании кнопки "P2", результат выполнения действия никак не отражается в интерфейсе УД? (Судя по отсутствию настроек в модуле MegaD для этой кнопки.)
Отправлено с моего ONEPLUS A5010 через Tapatalk
Raspberry Pi3 - Broadlink - MegaD - Много датчиков - Камеры - Часы.
Connect
Connect
-
- Сообщения: 51
- Зарегистрирован: Пт дек 18, 2015 5:42 pm
- Благодарил (а): 20 раз
- Поблагодарили: 10 раз
Re: [Модуль] MegaD (megad)
Вычитал на сайте у Андрея:
Флажок справа от поля Mode указывает, что при наличии сервера,
устройство отправляет на сервер сообщения всегда в режиме P&R,
а при его отсутствии Action выполняется только в том режиме, который установлен в Mode)
А это как раз что мне нужно, для сервера режим "P&R" (есть возможность обрабатывать, долгие, двойные нажатия),
а в автономном режиме, вход работает как "P"
Спасибо за советы, ребята. У меня получилось все настроить
Я так же настроил вход Меги, как на картинке у kas5858.
Поменял megad.class.php, стал обрабатывать m=1 2
Добавил метод, и о чудо It's work!!!
Непонятно почему этот параметр не добавлен в стандартную комплектацию модуля?
Единственное, если я меняю состояние портов на Меге железной кнопкой, это событие не передается на сервер.
Пока я поставил в Модуле MegaD считывать статусы каждые 15 сек,
поэтому в меню, на сценах, и пр. софт элементах отображается с задержкой.
может есть более оптимальное решение?
Флажок справа от поля Mode указывает, что при наличии сервера,
устройство отправляет на сервер сообщения всегда в режиме P&R,
а при его отсутствии Action выполняется только в том режиме, который установлен в Mode)
А это как раз что мне нужно, для сервера режим "P&R" (есть возможность обрабатывать, долгие, двойные нажатия),
а в автономном режиме, вход работает как "P"
Спасибо за советы, ребята. У меня получилось все настроить
Я так же настроил вход Меги, как на картинке у kas5858.
Поменял megad.class.php, стал обрабатывать m=1 2
Добавил метод, и о чудо It's work!!!
Непонятно почему этот параметр не добавлен в стандартную комплектацию модуля?
Единственное, если я меняю состояние портов на Меге железной кнопкой, это событие не передается на сервер.
Пока я поставил в Модуле MegaD считывать статусы каждые 15 сек,
поэтому в меню, на сценах, и пр. софт элементах отображается с задержкой.
может есть более оптимальное решение?
- За это сообщение автора beavisgood поблагодарил:
- Chainik (Пт ноя 23, 2018 11:41 pm)
- Рейтинг: 1.16%
Linux DietPi, OrangePi-PC, MyMegaD328
Connect: http://connect.smartliving.ru/profile/689
Connect: http://connect.smartliving.ru/profile/689
-
- Сообщения: 364
- Зарегистрирован: Вс янв 15, 2017 5:34 pm
- Откуда: Москва
- Благодарил (а): 100 раз
- Поблагодарили: 53 раза
Re: [Модуль] MegaD (megad)
Если говорить как у меня, то вот:
Сценарий
Код: Выделить всё
$objects=getObjectsByClass("MegaD");
$total=count($objects);
for ($i=0;$i<$total;$i++) {
$data=callMethodSafe($objects[$i]['TITLE'].'.switch');
}
setTimeOut('myTimer_proverka','runScript("proverka");',60*15);
Raspberry Pi3 - Broadlink - MegaD - Много датчиков - Камеры - Часы.
Connect
Connect
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: [Модуль] MegaD (megad)
Все равно до конца не понял.
Код приведенного сценария перебирает все объекты, расположенные в классе "MegaD" и запускает в каждом из них метод "switch". А зачем нам в каждом, если надо запускать только по одному объекту (той кнопке, которая сработала)? Иначе методом "switch" одного объекта ("общеклассовым") мы свет, к примеру, включим, а потом сразу же методом "switch" другого объекта (например, проходного выключателя) этот же свет выключим.
И второй вопрос по проходному выключателю. Чем запускается именно его "объектовый" метод "switch", ведь в модуле "MegaD" входу "P2" вообще ничего не сопоставлено?
Код приведенного сценария перебирает все объекты, расположенные в классе "MegaD" и запускает в каждом из них метод "switch". А зачем нам в каждом, если надо запускать только по одному объекту (той кнопке, которая сработала)? Иначе методом "switch" одного объекта ("общеклассовым") мы свет, к примеру, включим, а потом сразу же методом "switch" другого объекта (например, проходного выключателя) этот же свет выключим.
И второй вопрос по проходному выключателю. Чем запускается именно его "объектовый" метод "switch", ведь в модуле "MegaD" входу "P2" вообще ничего не сопоставлено?
-
- Сообщения: 364
- Зарегистрирован: Вс янв 15, 2017 5:34 pm
- Откуда: Москва
- Благодарил (а): 100 раз
- Поблагодарили: 53 раза
Re: [Модуль] MegaD (megad)
Mega с помощью кнопок управляет нагрузкой, а через MD мы выводим статус порта Меги, через метод "switch". Если у вас пропала связь сервера с Мегой и вы успели потыкать кнопками а потом восстановилось, то статус может отображаться не правильно. Сценарий делает периодический опрос поров Меги по всем объектам в классе Мега чтобы при любом раскладе у вас отображался правильный статус. Я пока не знаю как по другому можно отдельно смотреть состояние одного порта по одиночному нажатию на кнопку, отдельно по двойному нажатию и по длительному нажатию, получается только по одному из трех вариантов.Chainik писал(а): ↑Сб ноя 24, 2018 3:35 pmВсе равно до конца не понял.
Код приведенного сценария перебирает все объекты, расположенные в классе "MegaD" и запускает в каждом из них метод "switch". А зачем нам в каждом, если надо запускать только по одному объекту (той кнопке, которая сработала)? Иначе методом "switch" одного объекта ("общеклассовым") мы свет, к примеру, включим, а потом сразу же методом "switch" другого объекта (например, проходного выключателя) этот же свет выключим.
И второй вопрос по проходному выключателю. Чем запускается именно его "объектовый" метод "switch", ведь в модуле "MegaD" входу "P2" вообще ничего не сопоставлено?
По второму вопросу, я выше написал что у меня периодически опрашивает порты сценарий и меня это пока устраивает, так как этой клавишей я пользуюсь редко. Но если понадобится то настроить можно по принципу других портов только запускать не классовый метод а метод объекта со своим индивидуальным кодом.
- Рейтинг: 1.16%
Raspberry Pi3 - Broadlink - MegaD - Много датчиков - Камеры - Часы.
Connect
Connect
-
- Сообщения: 23
- Зарегистрирован: Пт апр 06, 2018 10:51 pm
- Откуда: Санкт-Петербург
- Благодарил (а): 0
- Поблагодарили: 0
Re: Модуль "MegaD"
Объясните подробнее что именно сделали - не могу у себя побороть аналогичную проблему!
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: [Модуль] MegaD (megad)
Поделюсь и я своим вариантом настройки, когда на некоторые клавиши выключателя могут быть «повешены» разные действия при коротком и при длинном нажатии.beavisgood писал(а): ↑Пт ноя 23, 2018 7:44 pmЕдинственное, если я меняю состояние портов на Меге железной кнопкой, это событие не передается на сервер.
Пока я поставил в Модуле MegaD считывать статусы каждые 15 сек,
поэтому в меню, на сценах, и пр. софт элементах отображается с задержкой.
может есть более оптимальное решение?
Путь у нас именно таким объектом будет «Lamp_01». При этом объект «Lamp_02» будет отрабатывать только короткие нажатия.
Сразу покажу настройку портов, на примере одного из входов (контроллер MegaD-2561, прошивка: 4.13b8). Галка напротив поля «Net» говорит о том, что прописанное в нем действие по умолчанию (NetAction) будет выполняться только в том случае, если сервер недоступен.
Теперь рассмотрим настройки в Мажордомо.
1. До запуска Мажордомо проведем модернизацию файла megad.class.php модуля «MegaD», чтобы модуль научился «отлавливать» приходящий от контроллера параметр «m».
Подробнее о том, как это сделать, можно почитать здесь (https://ab-log.ru/forum/viewtopic.php?f ... 309#p28309), в самом конце этого длинного поста после подзаголовка «ДОПОЛНЕНИЕ/УТОЧНЕНИЕ».
2. Выполним базовую настройку по созданию и параметризации объектов, свойств, методов по аналогии с тем, как это описано здесь (https://ab-log.ru/forum/viewtopic.php?f=1&t=1328) в конце длинного первого поста после подзаголовка «ДОПОЛНЕНИЕ».
Правда, у нас будут кое-какие дополнения и изменения, о которых я скажу ниже.
3. Дополним состав свойств в классе новым свойством «clickLong», которое нам будет служить идентификатором того, будет ли использоваться конкретная клавиша выключателя для длинных нажатий (clickLong = «1») или нет (clickLong <> «1»).
Так как решено, что на длинные нажатия будет реагировать объект «Lamp_01», то сразу уставим у него значение свойства «clickLong» = «1».
4. Дополним состав методов в классе новыми методами
«clickShortAction» (в нем будет код для действия при коротком нажатии)
и
«clickLongAction» (в нем будет код для действия при длинном нажатии).
Запишем в КЛАССЕ код метода «clickShortAction» (он будет таким же, какой ранее мы писали в метод «switch»):
Код: Выделить всё
file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":2");
$state = file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?pt=".$this->getProperty('Port')."&cmd=get");
if ($state == "ON") {
$this->setProperty('Status', 1);
} else {
$this->setProperty('Status', 0); }
Код: Выделить всё
callMethod('Lamp_02.clickShortAction');
5. Запишем в КЛАССЕ код метода «switch»:
Код: Выделить всё
$ot=$this->object_title;
$clickLong = $this->getProperty('clickLong');
//Если в свойстве "clickLong" не выставлена возможность длинного нажатия (clickLong <> 1), выполняем действие для короткого нажатия сразу
if ($clickLong <> "1") {
//Если пришел параметр "m", например, "m=2", игнорируем
if($_GET['m'] <> "") {
return"";}
callMethod($ot.".clickShortAction");
} else {
//Если для входа предусмотрена возможность использования длинного нажатия ("clickLong" = 1), выполняем нижеследующий кусок кода
//Если пришло длинное нажатие, сразу выполняем для него действие
if($_GET['m'] == 2) {
clearTimeOut($ot);
callMethod($ot.".clickLongAction");
return"";
}
//Выполним действие для короткого нажатия, только если в течение 2-х секунд не придет m=2
setTimeOut($ot,"callMethod('".$ot.".clickShortAction');",2);
}
В результате мы имеем следующее.
Если сервер недоступен, выполняется действие по умолчанию (в моем примере -- это переключение входа на другом контроллере (192.168.0.14/sec/?cmd=7:2).
Если клавиша выключателя должна отрабатывать только короткие нажатия (в моем случае это объект «Lamp_02»), действие выполняется мгновенно (в моем примере – это переключение выхода по параметрам, заданным у объекта в свойствах «ipAddress», «Password» и «Port»).
Если клавиша выключателя должна отрабатывать и короткие и длинные нажатия (в моем случае это объект «Lamp_01»), короткие нажатия отрабатываются с 2-секундной задержкой, а длинные -- с задержкой, примерно, в секунду-полторы.
При этом статусы объектов изменяются одновременно с переключением выходов.
Отдельную периодическую проверку текущих статусов на случай выполнения контроллером действий по умолчанию, разумеется, тоже проводить будет не лишним. Только делать это уже можно не так часто, допустим, 1 раз в 15 минут.
- За это сообщение автора Chainik поблагодарил:
- beavisgood (Пн ноя 26, 2018 6:02 am)
- Рейтинг: 1.16%