Страница 25 из 41
Re: Подключение контроллера MegaD-328
Добавлено: Вт дек 09, 2014 12:54 pm
Bagir
угу, сейчас обновлю весь класс. Сразу с отловом разных комбинаций нажатий и проверкой на пустой ответ.
Re: Подключение контроллера MegaD-328
Добавлено: Вт дек 09, 2014 1:09 pm
Bagir
Обновил класс
http://smartliving.ru/forum/viewtopic.php?f=14&t=1832
Нашел один нехороший момент. Если мега отключена, то обращение к ней занимает продолжительное время. После неответа, она конечно будет признана неживой, но если таких Мег несколько, то их опрос будет долгий. Простой Пинг в этом отношении как то побыстрей сработает и не даст так сильно по тормозам. Возможно стоит подумать, и уйти на простой пинг, а температуру уже собирать только с живих.
Для обращения к Меге я делаю так:
Код: Выделить всё
// Запрос данных у Меги
$dt = trim(file_get_contents($cmdUrl));
Может для опроса температуры как то изменить таймаут?
Re: Подключение контроллера MegaD-328
Добавлено: Вт дек 09, 2014 1:33 pm
Kod.Begemot
Уважаемые, прощу прощения за, возможно, ламерский вопрос:
Вот класс обновился, загружаем обновление - и всё слетает, все настройки Мег, настройки реакции на входы и т.п. правильно?
ну понятно что можно куда-нибудь скопировать код, и потом его вставлять обратно.
А можно как нибудь сделать, чтобы класс как то универсально генерировал события в другом объекте, откуда их потом считывать и обрабатывать?

Re: Подключение контроллера MegaD-328
Добавлено: Вт дек 09, 2014 1:37 pm
Bagir
Да, это действительно неудобно. Но я с этим наверное мало что могу сделать. У меня пока есть только одна мысль. Можно просто взять код класса из моего
CONNECT
На счет другого места, я думал об этом. Но Мега штука такая объемная, что вынести класс куда то отдельно очень сложно. Код получится такой, что в нем запутаюсь и я сам )) К тому же у всех Мега используется для совершенно разных задач. Кто то включает свет, кто то открывает ворота. Поэтому универсального кода написать не получится. Он возможен только для конкретных вариантов.
Re: Подключение контроллера MegaD-328
Добавлено: Вт дек 09, 2014 2:05 pm
zelevova
Bagir писал(а):Может для опроса температуры как то изменить таймаут?
Нашел вот такой вариант
http://www.sql.ru/forum/actualutils.asp ... sg=7738295
Он нам подойдет?
Re: Подключение контроллера MegaD-328
Добавлено: Вт дек 09, 2014 2:24 pm
Bagir
Интересно, я так не пробовал, сейчас испытаем.
Re: Подключение контроллера MegaD-328
Добавлено: Вт дек 09, 2014 3:00 pm
Bagir
Так намного лучше. Добавил переменную $ta, которая для разных видов запросов получает разные таймауты. Температуру больше 1 секунды ждать мы не будем. Отключил все Меги, запустил опрос. Выполнение немного притормозило, но даже не критично. Оставляю этот вариант.
Код: Выделить всё
// Добавление дополнительных параметрами запроса в зависимости от его типа
switch ($params['port']) {
case 'all': // Спросить сразу все
$cmdUrl .= '?cmd=all';
$ta = 5; //Таймаут ожидания меги
break;
case 'tget': // Температура встроенного датчика
$cmdUrl .= '?tget=1';
$ta = 1;
break;
default: // Состояние указанного порта
$cmdUrl .= sprintf("?pt=%d&cmd=get", intval($params['port']));
$ta = 5;
}
$ctx = stream_context_create(array(
'http' => array('timeout'=>$ta)
)
);
// Запрос данных у Меги
$dt = trim(file_get_contents($cmdUrl, 0, $ctx));
Re: Подключение контроллера MegaD-328
Добавлено: Ср дек 10, 2014 10:34 am
Kod.Begemot
Попробовал последний класс, работает, понравилось!
Примеры понятные, всё четко как обычно, спасибо!
Вопрос: при приходе события от меги мы можем в IncomingMessage определить параемтры настройки порта? ну P, P&R, R?
Re: Подключение контроллера MegaD-328
Добавлено: Ср дек 10, 2014 2:10 pm
zelevova
Мы можем только узнать это нажатие или "отжатие" кнопки через параметр $ms.
Ну а дальше собрав статистику нажатий и "отжатий" можно сделать вывод.

Сами настройки порта только если отдельным обращением считывать.
Re: Подключение контроллера MegaD-328
Добавлено: Ср дек 10, 2014 2:25 pm
Bagir
Да, по другому не узнать. Можно только написать отдельный запрос на получение настроек порта. Но я не сталкивался с такой необходимостью. Обычно один раз настроил Мегу и забыл. А в коде оставляю комментарий, чтобы не забыть как настроен порт.
Будут идеи, пишите! Будем развивать класс дальше. Скоро выложу вариант отлова разных нажатий для режима P. Только конечно без долгого нажатия. Его не отловить.