Ну а дальше уже как говориться на вкус и цвет все фломастеры разные. Я выбрал для себя такую стратегию. Для каждого порта Меги, настроенного как IN, я создаю отдельные объекты в классе keySensors. Для портов OUT создаю объекты в классе Relays. Весь код с логикой и алгоритмами работы храню в этих объектах. А объекты Меги просто перенаправляют сообщения в объекты класса keySensors. В примере видно, как при замыкании контактов порта 4 вызывается метод statusChanged моего объекта outdoorAirDamperClose.
Код: Выделить всё
case 4:
callMethod("outdoorAirDamperClose.statusChanged",array("status"=>$m));
//say('Передаю датчику воздушной заслонки статус '.$m);
break;
тут еще сделана передача состояния порта, т.к. в Меге он настроен как P&R
Ну а как вариант "на поиграться" могу предложить в нужную группу case прямо добавить код на переключения состояния порта
Код: Выделить всё
callMethod('MegaD1.setOutput',array('port'=>8,'value'=>2));
где 8 - номер порта, 2- означает что нужно сменить состояние на противоположное