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

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

Модератор: immortal

Ivan_A
Сообщения: 62
Зарегистрирован: Пн апр 06, 2015 10:57 am
Благодарил (а): 19 раз
Поблагодарили: 3 раза

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

Сообщение Ivan_A » Пт фев 05, 2021 12:34 pm

Мужики, как реализуете двойное нажатие на старых мегах (МеgaD-328)? Судя по API параметр "click" не передается.
2 способами пытался реализовать и ни один не работает. Не могу понять почему.
1 способ:
СпойлерПоказать
//порт в режиме Р
//чтобы не париться с микросекундами таймаут на двойное нажатие 2 секунды, а на повторный вызов скрипта 3 секунды
if ($this->getProperty('Dubble') == 1) // признак необработанного недавнего нажатия
{
$interval = time() - $this->getProperty('TimeSwitch');
$this->setProperty('TimeSwitch', time());
if ($interval < 2) //двойной клик
{
file_get_contents("http://192.168.1.201/sec/?cmd=8:2"); //выполняем действие
$this->setProperty('Dubble',0); //нажатие обработано
}
else //значит скрипт запустился по таймеру
{
file_get_contents("http://192.168.1.201/sec/?cmd=7:2"); //выполняем действие
$this->setProperty('Dubble',0); //нажатие обработано
}
}
else //первое нажатие
{ //запоминаем время, выжидаем таймаут, запускаем скрипт, ставим признак необработанного нажатия
$this->setProperty('TimeSwitch', time());
ClearTimeOut("DubbleClickT");
SetTimeOut("DubbleClickT","callMethod('Sw2_4_2.DubbleClick');",3);
$this->setProperty('Dubble',1);
}
2 способ:
СпойлерПоказать
if ($this->getProperty('Dubble') == 0) //если произошло первое нажатие
{
$this->setProperty('Dubble',1); //установим признак необработанного нажатия
usleep(700000); //спим 0,7 секунды
if ($this->getProperty('Dubble') == 1) //если за это время нажатие не обработали
{
file_get_contents("http://192.168.1.201/sec/?cmd=7:2"); //выполним действие
$this->setProperty('Dubble',0); //нажатие обработано
}
}
else //пока скрипт спит повторное нажатие вызвало скрипт по новой - значит клик двойной
{
file_get_contents("http://192.168.1.201/sec/?cmd=8:2");// выполняем действие
$this->setProperty('Dubble',0); //нажатие обработано
};
Может кто поделится рабочим кодом или подскажет что у меня не так?
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Пт фев 05, 2021 2:38 pm

У Bagir было работающее решение по поводу разных вариантов нажатий на Меге-328. Но надо покопаться в коде. Еще важно уточнять, для какого режима работы порта вам нужны двойные нажатия: "P" или "P&R".
https://mjdm.ru/forum/viewtopic.php?f=8&t=403&start=257
https://mjdm.ru/forum/viewtopic.php?f=14&t=1832
Если по-простому, без заморочек с микросекундами, у меня так работает:
СпойлерПоказать

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

if ($_GET['m'] == 2) {
say('Удержание_'.time());
return;
}

if (timeOutExists('DoubleClickTimer')) {
say('Двойное_'.time());
ClearTimeOut('DoubleClickTimer');
return;
}

setTimeOut('DoubleClickTimer','say("Одинарное_".time());',1);
За это сообщение автора Chainik поблагодарил:
Ivan_A (Пн фев 08, 2021 7:48 am)
Рейтинг: 1.16%
Аватара пользователя
Nail
Сообщения: 373
Зарегистрирован: Пн мар 05, 2018 7:09 am
Откуда: Самара
Благодарил (а): 174 раза
Поблагодарили: 28 раз

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

Сообщение Nail » Пт фев 05, 2021 10:57 pm

Chainik писал(а):
denis писал(а):
Пт фев 05, 2021 8:47 am
Nail писал(а):
Вт янв 26, 2021 9:34 am
sergejey писал(а):
Пн янв 25, 2021 10:58 pm
Во-первых, уберите все привязки в модуле mega d и добейтесь, чтобы выключатель работал с контроллером без сервера...
А можно попросить , у MegaD-2561-31I15O-RTC модуль не считывает конфигурацию( только один порт №7 считывает ).
а так же просмотреть если не трудно ,в работе объекта "термостат" хоть ПУ, хоть напрямую создавая, при вк-выкл термостата, температура привязанная к нему (относительно которого он работает) -пропускает точку разделения сотых, т.е. если сработал термостат допустим вкл. ил выкл ,то датчик температуры показывает кратковременно до следующего опроса мегой 5578 град. вместо 55.78.( это происходит только при вкл или выкл. термостата по температуре или в ручную, в остальном работает норм)
Вот ответ, почему нет точки, если настроен термостат
Сам мучался, нигде это не нашел в описаниях.

https://ab-log.ru/forum/viewtopic.php?p ... 0c0#p43828
я так понимаю это все таки модуль MegaD -чуть не доработан(а наверно в модуле только чуть поправить код)?
Chainik , а вроде можно Сергею отправлять правки в МД на рассмотрение личку или connect, могли бы правки сделать? спс.
Mini AMD A6 1450 Quad-core.Ubuntu Server 18.04 (64-bit). MegaD. Zigbee2mqtt+SLS ZigBee Gateway. Broadlink.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Сб фев 06, 2021 4:41 pm

Nail писал(а):
Пт фев 05, 2021 10:57 pm
Chainik , а вроде можно Сергею отправлять правки в МД на рассмотрение личку или connect, могли бы правки сделать? спс.
Нет, правки в код модуля я сделать не могу. Не программист я, нет нужной квалификации.

Но я скажу сейчас удивительную вещь. У меня нет претензий к модулю, кроме одного единственного замечания по поводу бага, при котором при удалении любой строчки по порту удаляется порт целиком.
В остальном меня все устраивает. Модуль хорошо справляется с тем, что мне от него нужно. Он удобно для пользователя "маршрутизирует" сообщения от контроллеров, распределяя их по Мегам и портам. Он не "затирает" параметры, отсылаемые Мегой; все передает в запускаемый метод. В связи с этим я без проблем могу сделать любую логику, запустив по поступившему событию свой код.
А показания датчиков я и помимо модуля могу собрать.
Ivan_A
Сообщения: 62
Зарегистрирован: Пн апр 06, 2015 10:57 am
Благодарил (а): 19 раз
Поблагодарили: 3 раза

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

Сообщение Ivan_A » Пн фев 08, 2021 8:30 am

Chainik писал(а):
Сб фев 06, 2021 4:41 pm
Nail писал(а):
Пт фев 05, 2021 10:57 pm
Chainik , а вроде можно Сергею отправлять правки в МД на рассмотрение личку или connect, могли бы правки сделать? спс.
Но я скажу сейчас удивительную вещь. У меня нет претензий к модулю, кроме одного единственного замечания по поводу бага, при котором при удалении любой строчки по порту удаляется порт целиком.
Длинное нажатие от MegaD-328 тоже не отлавливается. Тоже баг?
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Пн фев 08, 2021 8:57 am

Сам параметр m=2 модулем отлавливается и передается в запускаемый метод. Там с ним можно делать что угодно.

А вот работает ли штатный функционал модуля по строчкам порта "long_press", даже не проверял. Поскольку базовый вариант настройки модуля предполагает, что контроллер выполняет прописанные у него в конфигурации команды по умолчанию. А мне надо, чтобы у меня была возможность давать разные команды в зависимости от множества условий (у нас же "умный дом" как никак). Поэтому пишу свой код методов, куда передаются от контроллера все параметры. Благо модуль это позволяет.

Все события от кнопок я собираю по строчкам типа "Counter", строчки с типом "In" удаляю, т.к. они могут мешать. Но поскольку в последней версии модуля есть баг с удалением строчек, приходится использовать предыдущую версию модуля (https://github.com/sergejey/majordomo-m ... cbe648b509), где такого бага не наблюдается.
Ivan_A
Сообщения: 62
Зарегистрирован: Пн апр 06, 2015 10:57 am
Благодарил (а): 19 раз
Поблагодарили: 3 раза

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

Сообщение Ivan_A » Пт фев 19, 2021 11:56 am

В общем, данный модуль толком НЕ РАБОТАЕТ. По крайней мере, с контроллерами MegaD-328.
В коробочке лежит мега 2561, но с ней начну экспериментировать после того, как полностью исследую все варианты и возможности старых мег.
Проверял на 2-х мажордомах. Сейчас установил линукс убунту сервер 18, на нее MajorDoMo. И одно единственное дополнение - MegaD. Естественно, все последнее.
Глюки:
1. В разделе "данные" на каждый порт можно создать несколько записей с разными типами. При удалении любой записи удаляются и все остальные с тем же номером порта.
2. При добавлении порта с типом "IN" создаются 3 строки (одна с типом counter и две одинаковые IN)
3. Если пощелкать выключателем, то появляется еще одна строчка - long press. А в режиме порта P&R еще и Release. При этом их состояние не обновляется. Так же, как и не обновляется состояние второй строки "iIN". А удалить эти строки нельзя!!
4. События Long Press и Release, как было выше сказано, не отлавливаются. То есть отпускание клавиши ловится, но не строкой Release, а IN.
5. Не работает действие по умолчанию. Никак. Значение "Skip Default Action" пробовал менять - оно не влияет. Действие по умолчанию игнорируется всегда.

Или это фичи, а не баги?

ЗЫ На всякий перезагрузился и перепроверил все вышесказанное. Все проблемы стабильны.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Пт фев 19, 2021 12:11 pm

Ivan_A писал(а):
Пт фев 19, 2021 11:56 am
В общем, данный модуль толком НЕ РАБОТАЕТ. По крайней мере, с контроллерами MegaD-328.
...
Работает, но не в последней (августовской) версии, где нет возможности удалить по порту строчку без одновременного удаления всех строк по этому порту.
Ivan_A писал(а):
Пт фев 19, 2021 11:56 am
Глюки:
1. В разделе "данные" на каждый порт можно создать несколько записей с разными типами. При удалении любой записи удаляются и все остальные с тем же номером порта.
Вот тут про успешные варианты настройки с 328-й Мегой с предыдущей версией модуля.
https://mjdm.ru/forum/viewtopic.php?f=5 ... start=1340
За это сообщение автора Chainik поблагодарил:
Ivan_A (Пт фев 19, 2021 12:20 pm)
Рейтинг: 1.16%
Ivan_A
Сообщения: 62
Зарегистрирован: Пн апр 06, 2015 10:57 am
Благодарил (а): 19 раз
Поблагодарили: 3 раза

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

Сообщение Ivan_A » Пн мар 01, 2021 1:35 pm

Я все-таки не понимаю. Последняя версия модуля мега-Д не работает даже с контроллерами 2561 последней прошивки?
Подключил, нашел. Сервер прописан. В меге указан сервер и скрипт. В настройках порта режим входа "С". Конфигурация считывается.
Порты с типами "Long Press", "Double Click" и "Release" не обновляются.
надо что-то колдовать дополнительно или не мучаться и ставить предыдущую версию? Или этот функционал вообще не работает?

ЗЫ. Все-таки что-то работает. Привязал разные методы к "Long Press", "Double Click" и "Click". Длинное и двойное нажатие отрабатывает. Но при отпускании кнопки ВСЕГДА срабатывает метод, привязанный к Click. Поменял Click на Input. Все равно срабатывает при отпускании.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Пн мар 01, 2021 2:28 pm

Вот из-за того, что модуль делает не то, что я прошу, или не только то, что я прошу и не пользуюсь штатным функционалом...
Когда все делаешь сам, все прозрачно и понятно по алгоритмам работы.
Ответить