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

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

Модератор: immortal

shefus
Сообщения: 84
Зарегистрирован: Вт мар 08, 2016 4:57 pm
Благодарил (а): 17 раз
Поблагодарили: 2 раза

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

Сообщение shefus » Чт авг 27, 2020 7:20 pm

Chainik писал(а):
Чт авг 27, 2020 4:32 pm
Не проверял в августовской версии, но в предыдущих версиях модуль на срабатывание портов реагирует. Возможно, у вас просто недонастроено. Проверьте, вписан ли в настойках модуля Local IP (https://www.ab-log.ru/forum/viewtopic.p ... 104#p40104). Заодно, проверьте, вписаны ли в конфигурации Меги адрес сервера и имя исполняемого скрипта ("megad.php").
Это читал, вроде все настроено, все перепроверял.
Chainik писал(а):
Чт авг 27, 2020 4:32 pm
Тут еще вопрос в варианте настройки модуля. Автор модуля предполагает вариант настройки, при котором модуль периодически опрашивает контроллер и получает состояние портов и значения с датчиков. При срабатывании входа модуль выполняет действие по-умолчанию, прописанное у данного входа. У контроллера в настойках входов напротив поля "Act" ставятся галки. (Не знаю, как все это работает на практике, не проверял.)
Ну так и задумывал использовать, но тут хотелось бы понять - мега, даже с галкой у Act все равно отправляет серверу срабатывание порта (просто игнорирует ответ) и вопрос - в этом режиме (т.е. как я понимаю это опрос<>0) модуль должен ловить момент срабатывания? Т.е. не опрашивать порт по времени, а поймать посылку от меги?
Chainik писал(а):
Чт авг 27, 2020 4:32 pm
Но есть другой вариант настройки (ссылка приведена выше), при котором периодический опрос со стороны модуля отключается, выполнение действия по-умолчанию отключается. Модуль при этом призван всего лишь "ловить" срабатывание входов и выполнять, код метода, сопоставленный данному срабатыванию. Выходы не настраиваются вообще (за исключением редкого случая, когда надо обязательно отловить автономное переключение выхода, выполненное силами самого контроллера, т.е. не по команде сервера). И с датчиками организуется работа вообще без использования модуля.
Это я так понял при "опрос=0". Этот вариант мне не очень нравится. Иногда скорость отработки метода имеет задержку, что не очень, например для света. Ну и нет смысла, если почти все можно завести на Меге - автономно, за два года ни одного сбоя, настроил и забыл. А так на МДМ перегружаешь, настраиваешь, цикл упал, таблица History грохнулась - домашние голову оторвут. А МДМ может управлять мегой и без этого модуля. А вот датчиков (причем не однотипных) довольно много, и прям просится сделать "простые устройства" и связать с модулем Мега. При этом опрос можно поставить длинный, т.к. не требуется мгновенная реакция.
Но вот тут добавился датчик осадков - хотел привязать напрямую (ну почти) к простому устройству "счетчик" и ... мега не ловит срабатывание (а оно краткосрочное - качнулась качелька) - можно это и обойти, но хотелось красиво, как бы "по типовому".
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Чт авг 27, 2020 8:11 pm

shefus писал(а):
Чт авг 27, 2020 7:20 pm
Chainik писал(а):
Чт авг 27, 2020 4:32 pm
Тут еще вопрос в варианте настройки модуля. Автор модуля предполагает вариант настройки, при котором модуль периодически опрашивает контроллер и получает состояние портов и значения с датчиков. При срабатывании входа модуль выполняет действие по-умолчанию, прописанное у данного входа. У контроллера в настойках входов напротив поля "Act" ставятся галки. (Не знаю, как все это работает на практике, не проверял.)
Ну так и задумывал использовать, но тут хотелось бы понять - мега, даже с галкой у Act все равно отправляет серверу срабатывание порта (просто игнорирует ответ) и вопрос - в этом режиме (т.е. как я понимаю это опрос<>0) модуль должен ловить момент срабатывания? Т.е. не опрашивать порт по времени, а поймать посылку от меги?
Сам не проверял, но считаю, что даже в этом режиме модуль должен ловить момент срабатывания. (В противном случае придется констатировать, что модуль не поддерживает базовый функционал работы с контроллером.) Если у вас не ловит, значит почему-то не видит Мегу. Надо искать причину.
shefus писал(а):
Чт авг 27, 2020 7:20 pm
Chainik писал(а):
Чт авг 27, 2020 4:32 pm
Но есть другой вариант настройки (ссылка приведена выше), при котором периодический опрос со стороны модуля отключается, выполнение действия по-умолчанию отключается. Модуль при этом призван всего лишь "ловить" срабатывание входов и выполнять, код метода, сопоставленный данному срабатыванию. Выходы не настраиваются вообще (за исключением редкого случая, когда надо обязательно отловить автономное переключение выхода, выполненное силами самого контроллера, т.е. не по команде сервера). И с датчиками организуется работа вообще без использования модуля.
Это я так понял при "опрос=0". Этот вариант мне не очень нравится. Иногда скорость отработки метода имеет задержку, что не очень, например для света. Ну и нет смысла, если почти все можно завести на Меге - автономно, за два года ни одного сбоя, настроил и забыл. А так на МДМ перегружаешь, настраиваешь, цикл упал, таблица History грохнулась - домашние голову оторвут. А МДМ может управлять мегой и без этого модуля. А вот датчиков (причем не однотипных) довольно много, и прям просится сделать "простые устройства" и связать с модулем Мега. При этом опрос можно поставить длинный, т.к. не требуется мгновенная реакция.
Но вот тут добавился датчик осадков - хотел привязать напрямую (ну почти) к простому устройству "счетчик" и ... мега не ловит срабатывание (а оно краткосрочное - качнулась качелька) - можно это и обойти, но хотелось красиво, как бы "по типовому".
Ну такой вариант настройки не отменяет автономную работу при отсутствии сервера. А задержки могут быть вызваны либо слабым железом, либо неоптимизированным кодом. Хотя соглашусь, в теории вариант настройки от автора модуля выглядит более надежным.
В общем, вам самое главное добиться, чтобы модуль начал отлавливать срабатывания входов. И тогда все наладится.
Ну а если не получится, тогда еще один вариант такой. Мега ведь имеет счетчик срабатываний на каждом входе. Можно периодически запросом получать значение счетчика и дальше обрабатывать кодом. У нас же все-таки не свет, тут мгновенная реакция не нужна. Нужно просто получать некую аналитику в зависимости от числа срабатываний.
shefus
Сообщения: 84
Зарегистрирован: Вт мар 08, 2016 4:57 pm
Благодарил (а): 17 раз
Поблагодарили: 2 раза

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

Сообщение shefus » Пт авг 28, 2020 8:38 am

Chainik писал(а):
Чт авг 27, 2020 8:11 pm

В общем, вам самое главное добиться, чтобы модуль начал отлавливать срабатывания входов. И тогда все наладится.
Ну а если не получится, тогда еще один вариант такой. Мега ведь имеет счетчик срабатываний на каждом входе. Можно периодически запросом получать значение счетчика и дальше обрабатывать кодом. У нас же все-таки не свет, тут мгновенная реакция не нужна. Нужно просто получать некую аналитику в зависимости от числа срабатываний.
Ну да, согласен. Буду пробовать. Мне бы кто-нибудь сказал бы, что 100% модуль должен ловить запрос ОТ МЕГИ при любых настройках. Просто "должен" и "у меня 100% ловит" это .... Я тоже думаю, что должен.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Пт авг 28, 2020 11:33 pm

Специально проверил, модуль 100% отлавливает срабатывание входов при любых видах настроек (правильных, разумеется).

Теперь немного о грустном. Версия модуля от 14.08.2020.
Если сделать настройки в соответствии с тем, как предполагает автор модуля (исполнение действия по-умолчанию) + установка соответствия со свойством, то значение свойства меняется своеобразно. После срабатывания входа в одну сторону (например, "ВКЛ") меняется сразу, а в обратную (при "ВЫКЛ") - секунд через 10-15 (наверное, в результате опроса со стороны модуля). Если инвертировать значение (Invert value = Да), то поведение меняется на противоположное: при "ВКЛ" статус меняется секунд через 10-15, а при "ВЫКЛ" - сразу.

Еще при удалении любой строки у порта, удаляются сразу все строки по данному порту. А после восстановления строк по порту, например, по кнопке "Обновить", ранее сделанные настройки не сохраняются.

Вследствие этого (видимо, поскольку не удается удалить строку "Input" без удаления всех остальных строк по порту), становится невозможным настроить все по ранее работавшему альтернативному варианту (https://www.ab-log.ru/forum/viewtopic.p ... 104#p40104). Таким образом, для использования альтернативного варианта настройки придется вручную восстанавливать версию модуля от 15.01.2020.

shefus, если у вас Windows, могу выслать вам всю папку с Мажордомо (около 140 Mb в архиве), где все настроено по альтернативному варианту и все работает. Поменяете только в настройках модуля адрес сервера, порты в свойствах объектов, перечитаете конфигурацию Меги и попробуете. По крайней мере сможете протестировать срабатывание входа. Если надо, пишите свой e-mail в личку.
shefus
Сообщения: 84
Зарегистрирован: Вт мар 08, 2016 4:57 pm
Благодарил (а): 17 раз
Поблагодарили: 2 раза

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

Сообщение shefus » Сб авг 29, 2020 8:50 am

Chainik - спасибо за участие 8-) !
Chainik писал(а):
Пт авг 28, 2020 11:33 pm
Специально проверил, модуль 100% отлавливает срабатывание входов при любых видах настроек (правильных, разумеется).
Ок, понятно. Буду разбираться, возможно нужно переустановить модуль. Тут вот то интересно - модуль работает на опрос и без настроек в МЕГЕ сервера и имени скрипта. Походу там у меня что-то, либо цикл на МДМ не фурычит. И ... тут меня осенило: у меня на МДМ стоит пароль даже на локальной сетке - может мега и не может достучаться, ща попробую.
Теперь немного о грустном. Версия модуля от 14.08.2020.
Если сделать настройки в соответствии с тем, как предполагает автор модуля (исполнение действия по-умолчанию) + установка соответствия со свойством, то значение свойства меняется своеобразно. После срабатывания входа в одну сторону (например, "ВКЛ") меняется сразу, а в обратную (при "ВЫКЛ") - секунд через 10-15 (наверное, в результате опроса со стороны модуля). Если инвертировать значение (Invert value = Да), то поведение меняется на противоположное: при "ВКЛ" статус меняется секунд через 10-15, а при "ВЫКЛ" - сразу.
Это, по моему, правильно. Мега передает (режим "P") срабатывание только при нажатии. Можно попробовать поставить "P&R", тогда мега передаст и при отпускании, правда тоже "1", но с параметром m, т.е. размыкание. И как на это реагирует модуль? Что передаст в свойство? Опять '1'?
А состояние порт идет по опросу модуля.

Вообще, круто было бы автору добавить такую штуку:
т.к. у нас в меге прописан скрип модуля megad.php, то мы не можем добавить туда еще и свой, да и лишний цикл в МДМ не нужен.
Тогда можно было бы в настройках меге дать возможность привязать свойство, куда будут валится все что идет от Меги , а уже кому надо может это использовать связанным методом.
Тогда можно все отлавливать.
shefus, если у вас Windows, могу выслать вам всю папку с Мажордомо (около 140 Mb в архиве), где все настроено по альтернативному варианту и все работает. Поменяете только в настройках модуля адрес сервера, порты в свойствах объектов, перечитаете конфигурацию Меги и попробуете. По крайней мере сможете протестировать срабатывание входа. Если надо, пишите свой e-mail в личку.
Спс, у меня Линух, да и попробую сам докрутить.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Сб авг 29, 2020 9:49 pm

shefus писал(а):
Сб авг 29, 2020 8:50 am
Chainik - спасибо за участие 8-) !
Chainik писал(а):
Пт авг 28, 2020 11:33 pm
Специально проверил, модуль 100% отлавливает срабатывание входов при любых видах настроек (правильных, разумеется).
... Тут вот то интересно - модуль работает на опрос и без настроек в МЕГЕ сервера и имени скрипта. Походу там у меня что-то, либо цикл на МДМ не фурычит. ...
"Так нет же никого в таможне. Кому платить - неизвестно." (c)
Тогда я не понимаю, чего мы хотим от модуля, если Мега не знает адреса сервера и не знает, какой скрипт "дергать"? В этом случае Мега вообще ничего не посылает серверу о сработавших входах и выходах.
shefus писал(а):
Сб авг 29, 2020 8:50 am
Chainik писал(а):
Пт авг 28, 2020 11:33 pm
Теперь немного о грустном. Версия модуля от 14.08.2020.
Если сделать настройки в соответствии с тем, как предполагает автор модуля (исполнение действия по-умолчанию) + установка соответствия со свойством, то значение свойства меняется своеобразно. После срабатывания входа в одну сторону (например, "ВКЛ") меняется сразу, а в обратную (при "ВЫКЛ") - секунд через 10-15 (наверное, в результате опроса со стороны модуля). Если инвертировать значение (Invert value = Да), то поведение меняется на противоположное: при "ВКЛ" статус меняется секунд через 10-15, а при "ВЫКЛ" - сразу.
Это, по моему, правильно. Мега передает (режим "P") срабатывание только при нажатии. Можно попробовать поставить "P&R", тогда мега передаст и при отпускании, правда тоже "1", но с параметром m, т.е. размыкание. И как на это реагирует модуль? Что передаст в свойство? Опять '1'?
А состояние порт идет по опросу модуля.
А по-моему все неправильно. Точнее, наполовину правильно. Модуль имеет все возможности сразу реагировать на срабатывание входа, не дожидаясь опроса. А он это делает только на 50 %. Почему???
Что касается вопроса, что ему (модулю) писать в свойство, так тут 2 варианта. Вариант 1: пусть пишет фактическое состояние порта (т.е. логика предельно четкая). Вариант 2: пусть при срабатывании порта делает то, что я ему сказал, т.е. выполняет метод (может в каких-то случаях ничего в свойство писать не надо).
shefus писал(а):
Сб авг 29, 2020 8:50 am
Вообще, круто было бы автору добавить такую штуку:
т.к. у нас в меге прописан скрип модуля megad.php, то мы не можем добавить туда еще и свой, да и лишний цикл в МДМ не нужен.
Тогда можно было бы в настройках меге дать возможность привязать свойство, куда будут валится все что идет от Меги , а уже кому надо может это использовать связанным методом.
Тогда можно все отлавливать.
Так можно считать, что уже все добавлено. Если все везде прописано (адрес сервера, имя скрипта), то модуль УЖЕ получает исчерпывающе информативные сообщение от Меги со всеми параметрами. Модуль любезно "распихивает" сообщения по Мегам и портам, дает возможность запустить произвольный код по каждому порту. А уже в коде мы легко "долавливаем" нужные нам параметры и говорим что делать при "v", при m=1, при m=2, при двойном клике и пр., можем дополнительно запросить или вычислить какие-нибудь переменные МДМ. Т.е. наша "свобода творчества" ничем не ограничена.
Одна беда - модуль даже в последней версии содержит ошибки, которые не позволяют произвести настройку описанным образом. Приходится использовать версию от 15.01.2020 (а жаль, т.к. в этой версии еще не появилась возможность отключить синхронизацию состояния МДМ >>> Мега после рестарта МДМ, что портит всю малину).
shefus
Сообщения: 84
Зарегистрирован: Вт мар 08, 2016 4:57 pm
Благодарил (а): 17 раз
Поблагодарили: 2 раза

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

Сообщение shefus » Вс авг 30, 2020 8:59 am

Chainik писал(а):
Сб авг 29, 2020 9:49 pm

Тогда я не понимаю, чего мы хотим от модуля, если Мега не знает адреса сервера и не знает, какой скрипт "дергать"? В этом случае Мега вообще ничего не посылает серверу о сработавших входах и выходах.
Да, но модуль MegaD считывает состояние портов и без настройки меги на сервер и скрипт.
Вопрос с отлавливанием срабатывания порта решен - действительно, проблема была в включенной авторизации в локальной сети на МДМ

Chainik писал(а):
Пт авг 28, 2020 11:33 pm
После срабатывания входа в одну сторону (например, "ВКЛ") меняется сразу, а в обратную (при "ВЫКЛ") - секунд через 10-15 (наверное, в результате опроса со стороны модуля). Если инвертировать значение (Invert value = Да), то поведение меняется на противоположное: при "ВКЛ" статус меняется секунд через 10-15, а при "ВЫКЛ" - сразу.
А по-моему все неправильно. Точнее, наполовину правильно. Модуль имеет все возможности сразу реагировать на срабатывание входа, не дожидаясь опроса. А он это делает только на 50 %. Почему???
Что касается вопроса, что ему (модулю) писать в свойство, так тут 2 варианта. Вариант 1: пусть пишет фактическое состояние порта (т.е. логика предельно четкая). Вариант 2: пусть при срабатывании порта делает то, что я ему сказал, т.е. выполняет метод (может в каких-то случаях ничего в свойство писать не надо).
Нет - все правильно. В режиме входа MODE=P Мега отсылает команду срабатывания при замыкании порта, модуль сразу это отлавливает. При размыкании Мега ничего не шлет, а модуль устанавливает в ноль по опросу со своей стороны - т.е. через некоторое время.
Если поставить MODE=P&R, то отрабатывается оба состояния сразу - т.к. Мега шлет посылки и при размыкании порта.
Проверено эксперементально.
shefus писал(а):
Сб авг 29, 2020 8:50 am
Вообще, круто было бы автору добавить такую штуку:
...
Тогда можно было бы в настройках меге дать возможность привязать свойство, куда будут валится все что идет от Меги , а уже кому надо может это использовать связанным методом.
Тогда можно все отлавливать.
Chainik писал(а): Так можно считать, что уже все добавлено. Если все везде прописано (адрес сервера, имя скрипта), то модуль УЖЕ получает исчерпывающе информативные сообщение от Меги со всеми параметрами. Модуль любезно "распихивает" сообщения по Мегам и портам,
.......
Все правильно, НО! Ситуация:
На даче 3 меги (это более 100 портов), например, (цифровые датчики не берем), 20 портов IN, из них 10 которые работают автономно по умолчанию от меги, смысла заводить на МДМ нет, т.к. с сервера не управляем.
Уезжаю в отпуск, хочу отслеживать активность. Делаю объект с методом который получает инфу о срабатывании любого входа и далее, либо шлет сообщение, если, например, сработал вход в диапазоне 0...15, пишет в лог, запускает действие по активности в доме и т.д. - фантазия безгранична..
И тут ... как передать в этот метод срабатывание входов?
Вариант 1 (как сейчас)
- привязать все не привязанные порты к методу
- во всех привязанных дописать вызов метода с передачей параметров входа
- если подключаем к меги еще датчики, помимо настройки портов в меги не забываем процедуры выше.
Вариант 2 (как могло бы быть)
- прописываем в 3 мегах привязку к методу и .... ВСЁ!

А в планах 4-ая мега.... ДД и выключатели, часть из которых работают автономно с мегой, а вот активность отслеживать ....

PS Можно, конечно и самому допилить megad.php - при обновлении слетать будет :(
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Вс авг 30, 2020 7:11 pm

shefus писал(а):
Вс авг 30, 2020 8:59 am
...
И тут ... как передать в этот метод срабатывание входов?
Вариант 1 (как сейчас)
- привязать все не привязанные порты к методу
- во всех привязанных дописать вызов метода с передачей параметров входа
- если подключаем к меги еще датчики, помимо настройки портов в меги не забываем процедуры выше.
Вариант 2 (как могло бы быть)
- прописываем в 3 мегах привязку к методу и .... ВСЁ!

А в планах 4-ая мега.... ДД и выключатели, часть из которых работают автономно с мегой, а вот активность отслеживать ....
На самом деле уже сейчас ничего не требуется дополнительно изобретать, чтобы отловить передаваемый Мегой параметр. Все они передаются в метод, запускаемый при срабатывании входа. К примеру, надо отловить m=2, пишем в коде

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

if ($_GET['m'] == "2")
и делаем дальше, что хотим.
Но на практике, зачастую, никакие параметры дополнительно ловить и не требуется. Допустим, у меня выключатель без фиксации для освещения настроен на режим =P и при срабатывании должен всего лишь включаться/выключаться свет. Сработал выключатель, переключаем свет, запрашиваем состояние порта, выставляем актуальный статус интерфейсного элемента.
Т.е. тут в принципе не нужно ловить отпускание клавиши выключателя, да и Мега в режиме "P" не сообщит о размыкании входа.

Или, допустим, геркон на окне подключен ко входу с режимом работы P&R. Тут скрипт будет запускаться как при замыкании так и при размыкании входа. Поэтому после того как окно открыли или закрыли, мы будем видеть в интерфейсе актуальное состояние окна.
shefus писал(а):
Вс авг 30, 2020 8:59 am
PS Можно, конечно и самому допилить megad.php - при обновлении слетать будет :(
Так можно указать другое имя скрипта, и написать там все что хочется (правда модуль при этом работать не будет).
Можно просто запустить скриптом отдельный периодический опрос нужных портов, где будут отслеживаться необходимые изменения и выполнятся (при необходимости) нужные действия.
С Мегой вообще много всяких вариантов имеется...
den_teh
Сообщения: 10
Зарегистрирован: Вс окт 25, 2020 9:35 pm
Благодарил (а): 5 раз
Поблагодарили: 0

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

Сообщение den_teh » Вт ноя 10, 2020 1:11 am

Подскажите, а можно ли сделать так что бы в мажордомо в какой-нибудь сцене можно было менять настройки самой megaD или например какой-либо отдельный параметр? У меня один вход используется как "Локальный и "удаленный" термостат с помощью DS18B20 и MegaD-2561" и мне бы хотелось иметь возможность менять параметр "Val" в своей сцене "Отопление".
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Вт ноя 10, 2020 2:28 pm

Думается, что это возможно. Параметр Val меняется командой вида

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

http://192.168.0.14/sec/?pt=32&misc=24
Если правильно помню, в меню и на сцене есть тип элемента "текстовое поле" или вроде того. То, что вводится в этот элемент, записывается в свойство. У свойства надо указать "запустить метод при изменении". В коде метода пишите что-то типа:

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

$value=getGlobal("Объект.Свойство");
$command="http://192.168.0.14/sec/?pt=32&misc=".$value;
file_get_contents($command);
Таким образом у контроллера на порту будет меняться параметр Val без перезагрузки.
За это сообщение автора Chainik поблагодарил:
den_teh (Пт ноя 13, 2020 9:52 pm)
Рейтинг: 1.16%
Ответить