Привет, у меня вопрос по подключению, кнопки и реле, с железными кнопками возникли проблемы.
Кнопка P0, Реле Р7, классика.
Попытка 1: МОДУЛЬ MegaD:
Сначала пробовал связать эти два объекта через Модуль MegaD, на классических объектах Relay, (status, turnon, turnoff, switch)
из софта реле управляется отлично, но как в дело вступает железная кнопка, начинаются мигания, включения, отключения, реле живет своей жизнью.
Так то все красиво выглядит и логично, настроили модуль, кнопку нажали, мега отправила это событие к мажору.
Мажор принял решение, и выдал команду меге, включи реле, мега приняла эту команду, поменяла состояние порта.
Но к сожалению на связке модуль MegaD этот вариант не работает, Почему? мне не понятно до конца.
Попытка 2: ПРОСТЫЕ УСТРОЙСТВА + МОДУЛЬ MegaD
Пробовал этот вариант, задумка класс, быстро красиво, все понятно, но
не работает примерно так же как и выше описал, реле живет своей жизнью.
У меня есть подозрения, что причина в том что к одному объекту Relay, привязывается два объекта P0 и P7, которые связанны между собой.
Один включает, другой выключает, получается Лебедь, Рак, Щука, каждый меняет статус, в итоге глюки.
Попытка 3: Понял что на хромой кобыле к MegaD не подъедешь
Перечитал все MegaD ветки форума, а это ого го сколько....
В итоге что сделал:
Порт Р0 настроил в режиме Р, действие по умолчанию (ecmd: 7:2)
Создал класс и объекты по инструкции
https://ab-log.ru/forum/viewtopic.php?f=1&t=1328 (в конце поста, после подзаголовка "ДОПОЛНЕНИЕ/УТОЧНЕНИЕ").
Добавил в megad.class.php $params['m']=$m;,
вопрос почему эту строчку не добавляют в стандартную комплектацию модуля? обновления уже были, добавить же не сложно?
В метод switch добавил такой код:
Код: Выделить всё
if($_GET['m'] == 2) { // прилетело сообщение о длинном нажатии
say("длинное нажатие",2);
return "";
}
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); }
Этот код отлавливает "второе пришествие m == 2 и выходит из метода ничего не делая.
Теперь заработало УРА. Мужики спасибо большое за эту работу.
Вопрос как теперь правильно обработать длинное нажатие? через связку объект:
this->getProperty('ipAddress')."/".$this->getPropert......... пример кода есть?
при условии Р0 настроил в режиме Р, действие по умолчанию (ecmd: 7:2), я это сделал специально, т.к. хочу сохранить автономность MegaD, когда сервер упал