Подключение контроллера MegaD-328

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич

Re: Подключение контроллера MegaD-328

Сообщение Bagir »

угу, сейчас обновлю весь класс. Сразу с отловом разных комбинаций нажатий и проверкой на пустой ответ.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич

Re: Подключение контроллера MegaD-328

Сообщение Bagir »

Обновил класс
http://smartliving.ru/forum/viewtopic.php?f=14&t=1832

Нашел один нехороший момент. Если мега отключена, то обращение к ней занимает продолжительное время. После неответа, она конечно будет признана неживой, но если таких Мег несколько, то их опрос будет долгий. Простой Пинг в этом отношении как то побыстрей сработает и не даст так сильно по тормозам. Возможно стоит подумать, и уйти на простой пинг, а температуру уже собирать только с живих.
Для обращения к Меге я делаю так:

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

// Запрос данных у Меги
$dt = trim(file_get_contents($cmdUrl)); 
Может для опроса температуры как то изменить таймаут?
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm

Re: Подключение контроллера MegaD-328

Сообщение Kod.Begemot »

Уважаемые, прощу прощения за, возможно, ламерский вопрос: :oops:
Вот класс обновился, загружаем обновление - и всё слетает, все настройки Мег, настройки реакции на входы и т.п. правильно?
ну понятно что можно куда-нибудь скопировать код, и потом его вставлять обратно.
А можно как нибудь сделать, чтобы класс как то универсально генерировал события в другом объекте, откуда их потом считывать и обрабатывать? :?:
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич

Re: Подключение контроллера MegaD-328

Сообщение Bagir »

Да, это действительно неудобно. Но я с этим наверное мало что могу сделать. У меня пока есть только одна мысль. Можно просто взять код класса из моего CONNECT

На счет другого места, я думал об этом. Но Мега штука такая объемная, что вынести класс куда то отдельно очень сложно. Код получится такой, что в нем запутаюсь и я сам )) К тому же у всех Мега используется для совершенно разных задач. Кто то включает свет, кто то открывает ворота. Поэтому универсального кода написать не получится. Он возможен только для конкретных вариантов.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
zelevova
Сообщения: 291
Зарегистрирован: Вт ноя 18, 2014 11:43 pm
Откуда: Краснодарский край

Re: Подключение контроллера MegaD-328

Сообщение zelevova »

Bagir писал(а):Может для опроса температуры как то изменить таймаут?
Нашел вот такой вариант http://www.sql.ru/forum/actualutils.asp ... sg=7738295
Он нам подойдет?
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич

Re: Подключение контроллера MegaD-328

Сообщение Bagir »

Интересно, я так не пробовал, сейчас испытаем.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич

Re: Подключение контроллера MegaD-328

Сообщение Bagir »

Так намного лучше. Добавил переменную $ta, которая для разных видов запросов получает разные таймауты. Температуру больше 1 секунды ждать мы не будем. Отключил все Меги, запустил опрос. Выполнение немного притормозило, но даже не критично. Оставляю этот вариант.
Кусочек кода метода getDataSPOILER_SHOW

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

// Добавление дополнительных параметрами запроса в зависимости от его типа
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));
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm

Re: Подключение контроллера MegaD-328

Сообщение Kod.Begemot »

Попробовал последний класс, работает, понравилось!
Примеры понятные, всё четко как обычно, спасибо!
Вопрос: при приходе события от меги мы можем в IncomingMessage определить параемтры настройки порта? ну P, P&R, R?
zelevova
Сообщения: 291
Зарегистрирован: Вт ноя 18, 2014 11:43 pm
Откуда: Краснодарский край

Re: Подключение контроллера MegaD-328

Сообщение zelevova »

Мы можем только узнать это нажатие или "отжатие" кнопки через параметр $ms.
Ну а дальше собрав статистику нажатий и "отжатий" можно сделать вывод. :)
Сами настройки порта только если отдельным обращением считывать.
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич

Re: Подключение контроллера MegaD-328

Сообщение Bagir »

Да, по другому не узнать. Можно только написать отдельный запрос на получение настроек порта. Но я не сталкивался с такой необходимостью. Обычно один раз настроил Мегу и забыл. А в коде оставляю комментарий, чтобы не забыть как настроен порт.
Будут идеи, пишите! Будем развивать класс дальше. Скоро выложу вариант отлова разных нажатий для режима P. Только конечно без долгого нажатия. Его не отловить.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Ответить