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

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

Модератор: immortal

Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

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

Сообщение Victor_S » Ср фев 04, 2015 3:56 pm

Доброго дня!
Пытаюсь подключить Мегу к MD при помощи Вашего класса и megad.php.
Обнаружил несколько странностей... В общем Мега с последней прошивкой(есть ID), все последние Ваши правки сделал, MD обновил. Мега принимает команды с MD и MD получает состояния с Меги. Мега живая(alive выставляется в 1). Но...
1. Не обновляется(пустое) свойство temperature.
2. Начал смотреть логи и обнаружил, что Мега не определяется по ID, не определяется по IP и соответственно объект не найден. Хотя, напомню, мега исправно посылает статус в MD при срабатывании входов и с MD я могу управлять выходами Меги, и статус alive=1.
3. Если в Meгe выставить шлюз по умолчанию(поле GW), то megad.php принимает адрес шлюза за адрес Меги, и , соответственно не находит ее.
4. Если шлюз в Меге сбросить(255.255.255.255) - то в логах только невозможность определить Мегу по ID, по IP находит и видимо запускает incomingMessage, но температуры по-прежнему нету...
Почему не находит Мегу по ID не пойму, и почему все работает даже если Мега не найдена...
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

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

Сообщение Bagir » Ср фев 04, 2015 4:19 pm

Если честно, то даже не знаю что сказать.
Вот настройка моей первой Меги:
IP: 10.10.3.55 (адрес Меги)
SRV: 10.10.3.2:83 (адрес сервера с портом.
Script: megad.php
+
Megad-ID: 1 (идентификатор)

В МД главное указать
MegaD1.ipAddress: 10.10.3.55
MegaD1.mdid: 1

Чудес не бывает. У всех работает нормально. Еще раз проверьте код. Вероятно где то что то есть. последние изменения в коде объекта есть у меня в коннекте. Код файла megad.php уже давно не менялся. Если ничего не найдете, тогда можно попробовать потестить запросами прямо через браузер, одновременно смотря логи. Для детального теста можно создать второй объект несуществующей меги, и долбить его запросами с браузера.
Свойство температуры обновляется только начиная с одной из последних прошивок. Наличие ID у меги об этом не говорит. У меня сейчас прошивка fw: 3.26b3
Мега и сервер в одной сети?

Свой mdid Мега шлет в параметрах GET запроса. Это можно увидеть в логах. В файле megad.php в начале идет поиск объекта Меги по этому параметру. Если его нет, или объект Меги не найден, идет поиск по IP адресу. Конечно же предпочтительней работа по mdid. Это намного быстрее.

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

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

Сообщение zelevova » Ср фев 04, 2015 4:49 pm

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

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

Сообщение Bagir » Ср фев 04, 2015 4:53 pm

угу, либо скриптом либо из onMinutes. Я опрашиваю каждые 5 минут вот примерно так:

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

// Опрос температуры всех Мегадевайсов
if (!($m%5)) {
  $objects = getObjectsByClass('MegaD'); 
  foreach ($objects as $obj) {
    if (getGlobal($obj['TITLE'].'.ipAddress')) {
      callMethod($obj['TITLE'].'.getData', array('port'=>'tget')); 
    }
  }
} 
Главное, чтобы Мега понимала параметр tget. Я не помню, с какой именно прошивки это было добавлено, но уже давненько.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

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

Сообщение Victor_S » Ср фев 04, 2015 5:01 pm

У меня прошивка 3.28b9.
Сервер и Mега в одной подсети без премудрств.
Не очень понял почему у Вас вместо адреса шлюза(GW) маска подсети?
Когда я ставлю адрес шлюза 192.168.1.1 - megad.php считает его адресом Меги и не находит ее ни по ID, ни по IP.
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

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

Сообщение Victor_S » Ср фев 04, 2015 5:01 pm

zelevova писал(а):добавлю еще что бы обновлялось свойство temperature. Его опрос нужно делать из мжд. например из метода onMinutes таймера.
можно подробнее?
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

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

Сообщение Bagir » Ср фев 04, 2015 5:50 pm

Victor_S писал(а):Не очень понял почему у Вас вместо адреса шлюза(GW) маска подсети?
Конечно же он там не нужен. Сообщение поправил. Домой приеду, напишу чего у меня в этом поле. Я для примера просто поиском нашел. Вероятнее всего в GW я ничего не задавал. Да и раньше этого поля вроде бы не было.
Погодите с температурой сражаться. Для начала надо разобраться с простым. Получение сообщения от меги о коммутации порта (чтобы в логах не было записей об ошибках). И отправку команды включить/выключить реле.
Рекомендую создать тестовый объект несуществующей Меги, и на нем отработать вариант с mdid. В моем случае это MegaD99. Этой Меги у меня конечно же нет. Но в объекте собран весь код разных примеров.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

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

Сообщение Victor_S » Ср фев 04, 2015 6:05 pm

Bagir писал(а):Свойство Меги Alive выставляется при получении ответа на вопрос о температуре ее внутреннего датчика. Если прошивка не новая, то Мега не поймет этот вопрос, и ответит содержимым ее начальной страницы. При этом температура определена не будет. Но свойство Alive будет установлено. Ответ же получен, значит живая.
Да, я видел код megad.php, потому и говорю о некоторых странностях в его поведении.
1. Идет поиск Меги по ID, если не найдена выдает сообщение об ошибке - ее я вижу каждый раз.
2. Идет поиск Меги по IP, если не найдена выдает вторую ошибку. Если я прописываю в Меге адрес шлюза по умолчанию(GW = 192.168.1.1) - получаю и вторую ошибку, если шлюз убираю(по умолчанию там 255.255.255.255) - этой ошибки в логе нет.
3. Идет проверка найдена ли Мега вообще(по ID или IP), если да - вызывается метод incommingMessage, если нет - третья ошибка, с указанием IP адреса по которому Мега не найдена. Так вот, если я указываю адрес шлюза, приведенный выше, то получаю третью ошибку о том что мега по адресу шлюза по умолчанию не найдена(что вполне естественно).
Без указания адреса шлюза вторую и третью ошибки я не получаю.
Где-то на форуме ab-log мне попадалась фраза Андрея о том, что функция $SERVR['REMOTE_ADDR], используемая Вами, выдает несколько не тот адрес...;)
При этом, несмотря даже на все три ошибки в логе - Мега у меня alive=1 и полностью функциональна, т.е. и принимает команды от MD и отправляет.
По поводу mdid и tget - возможно это "издержки" версии прошивки, нужно будет уточнить у Андрея.
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

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

Сообщение Bagir » Ср фев 04, 2015 7:09 pm

Посмотрел в своих Мегах. Действительно я не настраивал GW и оно у меня 255.255.255.255 Прошиваются они нормально, в интернет им выходить нет надобности. Все Меги у меня в одной сети с сервером. Так что в моем случае GW не нужен.
Алгоритм работы файла Вы рассказали абсолютно верно. Похоже в нашей компании Мегаводов пополнение )) Я с php знаком недавно, и мало что еще знаю. Подробности работы $SERVR['REMOTE_ADDR] я не смотрел. Возможно где и врет. Но в любом случае поиск Меги по IP это как бы уже резервный вариант. Надо обязательно настроить MDID.
Для начала надо посмотреть что вообще Мега шлет серверу. Посмотрите в логах Апача. Есть ли в сообщении параметр mdid ?
А для решения второй загадки можно прямо из браузера спросите Мегу http://<ip>/sec/?tget=1 В ответе должно быть только одно число. Это градусы.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

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

Сообщение Bagir » Ср фев 04, 2015 7:24 pm

Вот как выглядит замыкание и размыкание порта Меги
Логи Апач
10.10.3.58 - - [04/Feb/2015:19:15:45 +0300] "GET /megad.php?pt=0&mdid=4 HTTP/1.1" 200 -
10.10.3.58 - - [04/Feb/2015:19:15:46 +0300] "GET /megad.php?pt=0&m=1&mdid=4 HTTP/1.1" 200 -

Debmes МД
19:15:45 TRACE [page.megad]: Got message from MegaDevice pt=0, mdid=4 (at D:\Server\www\majordomo\megad.php:31)
19:15:46 TRACE [page.megad]: Got message from MegaDevice pt=0, m=1, mdid=4 (at D:\Server\www\majordomo\megad.php:31)

Видно, что Мега шлет свой mdid=4. Сообщений об ошибках из файла megad.php нет.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Ответить