[Модуль] MegaD (megad)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: [Модуль] MegaD (megad)

Сообщение Chainik » Пт ноя 23, 2018 2:50 pm

Попробуйте вписать адрес сервера в Local-IP. Попробуйте дать права 777 на папку, где лежат файлы модуля. С Линуксом не работал, поэтому ничего более определенного сказать не смогу.
Еще можно проанализировать сетевой трафик (Wireshark).
Вообще, у всех, у кого сразу модуль не захотел читать конфигурацию, в конце концов все налаживалось, иногда даже безо всяких усилий со стороны пользователя (viewtopic.php?f=5&t=2263&start=1013).
kas5858
Сообщения: 364
Зарегистрирован: Вс янв 15, 2017 5:34 pm
Откуда: Москва
Благодарил (а): 100 раз
Поблагодарили: 53 раза

Re: [Модуль] MegaD (megad)

Сообщение kas5858 » Пт ноя 23, 2018 4:44 pm

beavisgood писал(а):
Вт ноя 20, 2018 7:26 am
Привет, у меня вопрос по подключению, кнопки и реле, с железными кнопками возникли проблемы.
Кнопка P0, Реле Р7, классика.

Попытка 1: МОДУЛЬ MegaD:
Сначала пробовал связать эти два объекта через Модуль MegaD, на классических объектах Relay, (status, turnon, turnoff, switch)
из софта реле управляется отлично, но как в дело вступает железная кнопка, начинаются мигания, включения, отключения, реле живет своей жизнью.
Так то все красиво выглядит и логично, настроили модуль, кнопку нажали, мега отправила это событие к мажору.
Мажор принял решение, и выдал команду меге, включи реле, мега приняла эту команду, поменяла состояние порта.
Но к сожалению на связке модуль MegaD этот вариант не работает, Почему? мне не понятно до конца.
Расскажу о своей реализации кнопок на MegaD-2561 (fw: 4.29b4), может кому поможет.
Тех задание для детской комнаты по реализации вкл./выкл света такое.
  • 1.Одна кнопка для ребенка, условно Валеры (вкл/выкл) на личный свет.
    2.Вторая кнопка для ребенка, Насти (вкл/выкл) на личный свет.
    3.Третья кнопка проходная, с которой можно выключить и включить свет любого ребенка по отдельности, с возможностью выключить сразу весь свет.
Реализация.
  • 1.Кнопка Валеры подключена к порту Р0 (MegaD-2561).
    2.Кнопка Насти подключена к порту Р1 (MegaD-2561).
    3.Кнопка проходная подключена к порту Р2 (MegaD-2561).
    4.Свет Валеры подключен к порту Р7 (MegaD-2561).
    5.Свет Насти подключен к порту Р10 (MegaD-2561).
Настройка портов (MegaD-2561).
  • 1.Кнопка Валеры подключена к порту Р0 (MegaD-2561).
    P0.PNG
    P0.PNG (4.66 КБ) 3972 просмотра
    2.Кнопка Насти подключена к порту Р1 (MegaD-2561).
    P1.PNG
    P1.PNG (4.67 КБ) 3972 просмотра
    3.Кнопка проходная подключена к порту Р2 (MegaD-2561).
    P2.PNG
    P2.PNG (4.88 КБ) 3972 просмотра
    4.Свет Валеры подключен к порту Р7 (MegaD-2561).
    P7.PNG
    P7.PNG (3.99 КБ) 3972 просмотра
    5.Свет Насти подключен к порту Р10 (MegaD-2561).
    P10.PNG
    P10.PNG (4.06 КБ) 3972 просмотра
Настройка объектов, методов и свойств в MD.
  • 1.Создать класс
    klass.PNG
    klass.PNG (9.74 КБ) 3972 просмотра
    2.Создать объекты
    Обьекты.PNG
    Обьекты.PNG (10.58 КБ) 3972 просмотра
    3.Создать свойства
    Свойства.PNG
    Свойства.PNG (12.97 КБ) 3972 просмотра
    4.Создать методы
    Методы.PNG
    Методы.PNG (6.1 КБ) 3972 просмотра
    а. turnOn

    Код: Выделить всё

    file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":1");
    $this->setProperty('status', 1);
    б. turnOff

    Код: Выделить всё

    file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":0");
    $this->setProperty('status', 0);
    $this->setProperty("Menu", Выкл);
    в. switch

    Код: Выделить всё

    $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); 
    }
Настройка модуля MegaD в MD.
MegaD.PNG
MegaD.PNG (14.8 КБ) 3972 просмотра
Результат:
  • 1. с кнопки света Валеры (вкл/выкл)
    2. с кнопки света Насти (вкл/выкл)
    3. с проходной кнопки по одиночному нажатию (вкл/выкл) свет Валеры, по двойному нажатию (вкл/выкл) свет Насти, удержание кнопки выключает весь свет и Валеры и Насти.
Вложения
1.PNG
1.PNG (4.72 КБ) 3972 просмотра
За это сообщение автора kas5858 поблагодарил:
beavisgood (Пн ноя 26, 2018 6:01 am)
Рейтинг: 1.16%
Raspberry Pi3 - Broadlink - MegaD - Много датчиков - Камеры - Часы.
Изображение Connect
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: [Модуль] MegaD (megad)

Сообщение Chainik » Пт ноя 23, 2018 5:00 pm

Я правильно понимаю, что при таком варианте реализации при использовании кнопки "P2", результат выполнения действия никак не отражается в интерфейсе УД? (Судя по отсутствию настроек в модуле MegaD для этой кнопки.)
kas5858
Сообщения: 364
Зарегистрирован: Вс янв 15, 2017 5:34 pm
Откуда: Москва
Благодарил (а): 100 раз
Поблагодарили: 53 раза

Re: [Модуль] MegaD (megad)

Сообщение kas5858 » Пт ноя 23, 2018 5:25 pm

Chainik писал(а):Я правильно понимаю, что при таком варианте реализации при использовании кнопки "P2", результат выполнения действия никак не отражается в интерфейсе УД? (Судя по отсутствию настроек в модуле MegaD для этой кнопки.)
Не совсем так, позже напишу, я уже в дороге.

Отправлено с моего ONEPLUS A5010 через Tapatalk

Raspberry Pi3 - Broadlink - MegaD - Много датчиков - Камеры - Часы.
Изображение Connect
beavisgood
Сообщения: 51
Зарегистрирован: Пт дек 18, 2015 5:42 pm
Благодарил (а): 20 раз
Поблагодарили: 10 раз

Re: [Модуль] MegaD (megad)

Сообщение beavisgood » Пт ноя 23, 2018 7:44 pm

Вычитал на сайте у Андрея:
Флажок справа от поля 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
kas5858
Сообщения: 364
Зарегистрирован: Вс янв 15, 2017 5:34 pm
Откуда: Москва
Благодарил (а): 100 раз
Поблагодарили: 53 раза

Re: [Модуль] MegaD (megad)

Сообщение kas5858 » Сб ноя 24, 2018 12:59 pm

Chainik писал(а):
Пт ноя 23, 2018 5:00 pm
Я правильно понимаю, что при таком варианте реализации при использовании кнопки "P2", результат выполнения действия никак не отражается в интерфейсе УД? (Судя по отсутствию настроек в модуле 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);
мне этого хватает. Если нужно то по аналогии делаешь как кнопка Насти и Валеры в модуле MegaD, создать объект и не в классовом методе а в методе объекта и выключением родительского метода. Ты через модуль только статус меняешь и все.
Снимок.PNG
Снимок.PNG (11.91 КБ) 3926 просмотров
Raspberry Pi3 - Broadlink - MegaD - Много датчиков - Камеры - Часы.
Изображение Connect
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: [Модуль] MegaD (megad)

Сообщение Chainik » Сб ноя 24, 2018 3:35 pm

Все равно до конца не понял.
Код приведенного сценария перебирает все объекты, расположенные в классе "MegaD" и запускает в каждом из них метод "switch". А зачем нам в каждом, если надо запускать только по одному объекту (той кнопке, которая сработала)? Иначе методом "switch" одного объекта ("общеклассовым") мы свет, к примеру, включим, а потом сразу же методом "switch" другого объекта (например, проходного выключателя) этот же свет выключим.

И второй вопрос по проходному выключателю. Чем запускается именно его "объектовый" метод "switch", ведь в модуле "MegaD" входу "P2" вообще ничего не сопоставлено?
kas5858
Сообщения: 364
Зарегистрирован: Вс янв 15, 2017 5:34 pm
Откуда: Москва
Благодарил (а): 100 раз
Поблагодарили: 53 раза

Re: [Модуль] MegaD (megad)

Сообщение kas5858 » Сб ноя 24, 2018 7:42 pm

Chainik писал(а):
Сб ноя 24, 2018 3:35 pm
Все равно до конца не понял.
Код приведенного сценария перебирает все объекты, расположенные в классе "MegaD" и запускает в каждом из них метод "switch". А зачем нам в каждом, если надо запускать только по одному объекту (той кнопке, которая сработала)? Иначе методом "switch" одного объекта ("общеклассовым") мы свет, к примеру, включим, а потом сразу же методом "switch" другого объекта (например, проходного выключателя) этот же свет выключим.

И второй вопрос по проходному выключателю. Чем запускается именно его "объектовый" метод "switch", ведь в модуле "MegaD" входу "P2" вообще ничего не сопоставлено?
Mega с помощью кнопок управляет нагрузкой, а через MD мы выводим статус порта Меги, через метод "switch". Если у вас пропала связь сервера с Мегой и вы успели потыкать кнопками а потом восстановилось, то статус может отображаться не правильно. Сценарий делает периодический опрос поров Меги по всем объектам в классе Мега чтобы при любом раскладе у вас отображался правильный статус. Я пока не знаю как по другому можно отдельно смотреть состояние одного порта по одиночному нажатию на кнопку, отдельно по двойному нажатию и по длительному нажатию, получается только по одному из трех вариантов.
По второму вопросу, я выше написал что у меня периодически опрашивает порты сценарий и меня это пока устраивает, так как этой клавишей я пользуюсь редко. Но если понадобится то настроить можно по принципу других портов только запускать не классовый метод а метод объекта со своим индивидуальным кодом.
За это сообщение автора kas5858 поблагодарил:
Chainik (Вс ноя 25, 2018 3:18 pm)
Рейтинг: 1.16%
Raspberry Pi3 - Broadlink - MegaD - Много датчиков - Камеры - Часы.
Изображение Connect
Ivg_spb
Сообщения: 23
Зарегистрирован: Пт апр 06, 2018 10:51 pm
Откуда: Санкт-Петербург
Благодарил (а): 0
Поблагодарили: 0

Re: Модуль "MegaD"

Сообщение Ivg_spb » Вс ноя 25, 2018 1:10 am

Alexum писал(а):
Пн янв 08, 2018 3:22 pm
Проблему в итоге решил. Несколько месяцев назад переходил на другой домен и в некоторых местах остались "хвосты" от старого. Заодно перевел систему на https.
Объясните подробнее что именно сделали - не могу у себя побороть аналогичную проблему!
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: [Модуль] MegaD (megad)

Сообщение Chainik » Вс ноя 25, 2018 3:45 pm

beavisgood писал(а):
Пт ноя 23, 2018 7:44 pm
Единственное, если я меняю состояние портов на Меге железной кнопкой, это событие не передается на сервер.
Пока я поставил в Модуле MegaD считывать статусы каждые 15 сек,
поэтому в меню, на сценах, и пр. софт элементах отображается с задержкой.
может есть более оптимальное решение?
Поделюсь и я своим вариантом настройки, когда на некоторые клавиши выключателя могут быть «повешены» разные действия при коротком и при длинном нажатии.

Путь у нас именно таким объектом будет «Lamp_01». При этом объект «Lamp_02» будет отрабатывать только короткие нажатия.
Сразу покажу настройку портов, на примере одного из входов (контроллер MegaD-2561, прошивка: 4.13b8).
Настройка входа в интерфейсе контроллера.png
Настройка входа Меги
Настройка входа в интерфейсе контроллера.png (7.6 КБ) 4168 просмотров
Галка напротив поля «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); }
Запишем в ОБЪЕКТЕ «Lamp_01» код метода «clickLongAction»:

Код: Выделить всё

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);
}
На всякий случай покажу настройку в модуле «MegaD» на вкладке «Данные».
Настройка в модуле MegaD на вкладке Данные.png
Настройка в модуле "MegaD"
Настройка в модуле MegaD на вкладке Данные.png (51.32 КБ) 4168 просмотров


В результате мы имеем следующее.
Если сервер недоступен, выполняется действие по умолчанию (в моем примере -- это переключение входа на другом контроллере (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%
Ответить