Подключение контроллера MegaD-328
Модератор: immortal
- Bagir
- Сообщения: 1615
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Re: Подключение контроллера MegaD-328
Обновил класс в ветке http://smartliving.ru/forum/viewtopic.php?f=14&t=1832
У кого уже установлено, изменения проще взять у меня в коннекте.
Из нового:
Таймер свойства alive перезапускается не только по опросу температуры Меги, но и при каждом любом сообщении от нее.
Добавлены все исправления, о которых тут писали. Тем, кто настраивает первый раз, не придется собирать по кусочкам.
Кто нибудь пробовал ПинКод хотя бы подключенный к кнопке на столе? Я так уже давно домой захожу ))
У кого уже установлено, изменения проще взять у меня в коннекте.
Из нового:
Таймер свойства alive перезапускается не только по опросу температуры Меги, но и при каждом любом сообщении от нее.
Добавлены все исправления, о которых тут писали. Тем, кто настраивает первый раз, не придется собирать по кусочкам.
Кто нибудь пробовал ПинКод хотя бы подключенный к кнопке на столе? Я так уже давно домой захожу ))
-
- Сообщения: 265
- Зарегистрирован: Пт дек 26, 2014 1:58 pm
- Благодарил (а): 33 раза
- Поблагодарили: 24 раза
Re: Подключение контроллера MegaD-328
Это точно про пополнение...Bagir писал(а): Похоже в нашей компании Мегаводов пополнение )) Я с php знаком недавно, и мало что еще знаю.

Как говорил, кажется, Козьма Прутков - Есть люди знающие все ни о чем(кодеры в нашем случае) и люди знающие ничего обо всем(постановщики задач)...


И вот о чем я хочу для начала поговорить... В моем случае получается так, что код в megad.php работает абсолютно в холостую, т.е. получив 3 ошибки(Мега не найдена и метод incomingMessages не запущен) тем не менее сама Мега нормально функционирует в MD(есть двухсторонняя связь и определение самой Меги живой). В таком случае зачем он нужен? Только тратит время и энергию...

По остальным Вашим постам - тоже завтра все посмотрю и проверю, спасибо.
- Bagir
- Сообщения: 1615
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Re: Подключение контроллера MegaD-328
Виктор! Это чудеса какие то )) Никак без megad.php, и Вы скоро это сами поймете. Этот файл обязательное звено между Мегами и объектами МД.
Да, конечно можно попробовать заменить его на скрипт. И в настройке Меги писать Script: не megad.php а например objects/?script=megad. Совершенно не представляю, прокатит ли это вариант запуска скрипта Мегой с именем megad. Просто я не вижу явных преимуществ такого варианта перед файлом. Хотя можно будет и попробовать. Но сейчас разговор не об этом.
Меги ломятся на наш сервер, и обращаются к указанному нами скрипту, а именно файлу megad.php. В этом файле происходит поиск нужного объекта Меги из класса MegaD и вызов его метода incomingMessage с передачей ему параметров. При вызове в родительской части метода incomingMessage устанавливается свойство alive и если это был запрос температуры внутреннего датчика, то и свойство temperature. Затем, по правилам МД, выполняется уже личная часть кода метода incomingMessage, которая пишется в каждом объекте Меги.
То есть, если есть связь между физической Мегой и ее объектом в МД, значит что то где то все равно должно запустить метод incomingMessage. А делает это файл megad.php к которому обращаются Меги.
Пишите о своих экспериментах )) Я постараюсь помочь чем смогу. Обратите особое внимание на конец файла megad.php, там, где идет вызов метода incomingMessage. Там однозначное условие if. Либо запуск метода incomingMessage, либо сообщение Cannot find object of MegaD class ...
Еще стоит добавить, что файл megad.php нужен только для входящих сообщений от Мег. Тут не важно спрашивали мы, или Мега сама шлет этот пакет. Всё входящее от Мег проходит через megad.php главная задача которого найти нужный объект Меги и передать ему сообщение.
А вот команды на коммутацию реле идут совершенно другим путём. megad.php тут не используется. Строка GET запроса формируется в методе setOutput и отправляется на Мегу командой getURL($cmdUrl, 0);
Да, конечно можно попробовать заменить его на скрипт. И в настройке Меги писать Script: не megad.php а например objects/?script=megad. Совершенно не представляю, прокатит ли это вариант запуска скрипта Мегой с именем megad. Просто я не вижу явных преимуществ такого варианта перед файлом. Хотя можно будет и попробовать. Но сейчас разговор не об этом.
Меги ломятся на наш сервер, и обращаются к указанному нами скрипту, а именно файлу megad.php. В этом файле происходит поиск нужного объекта Меги из класса MegaD и вызов его метода incomingMessage с передачей ему параметров. При вызове в родительской части метода incomingMessage устанавливается свойство alive и если это был запрос температуры внутреннего датчика, то и свойство temperature. Затем, по правилам МД, выполняется уже личная часть кода метода incomingMessage, которая пишется в каждом объекте Меги.
То есть, если есть связь между физической Мегой и ее объектом в МД, значит что то где то все равно должно запустить метод incomingMessage. А делает это файл megad.php к которому обращаются Меги.
Пишите о своих экспериментах )) Я постараюсь помочь чем смогу. Обратите особое внимание на конец файла megad.php, там, где идет вызов метода incomingMessage. Там однозначное условие if. Либо запуск метода incomingMessage, либо сообщение Cannot find object of MegaD class ...
Еще стоит добавить, что файл megad.php нужен только для входящих сообщений от Мег. Тут не важно спрашивали мы, или Мега сама шлет этот пакет. Всё входящее от Мег проходит через megad.php главная задача которого найти нужный объект Меги и передать ему сообщение.
А вот команды на коммутацию реле идут совершенно другим путём. megad.php тут не используется. Строка GET запроса формируется в методе setOutput и отправляется на Мегу командой getURL($cmdUrl, 0);
-
- Сообщения: 265
- Зарегистрирован: Пт дек 26, 2014 1:58 pm
- Благодарил (а): 33 раза
- Поблагодарили: 24 раза
Re: Подключение контроллера MegaD-328
Bagir, я понимаю общую схему взаимодействия. Поэтому и удивился тому что получаю сообщения от меги о сработавшем входе при том что в логах три ошибки(т.е. фактически мега не найдена и incomingMessage не должен был вызваться).
-
- Сообщения: 265
- Зарегистрирован: Пт дек 26, 2014 1:58 pm
- Благодарил (а): 33 раза
- Поблагодарили: 24 раза
Re: Подключение контроллера MegaD-328
tget - работает как надо,Bagir писал(а): Для начала надо посмотреть что вообще Мега шлет серверу. Посмотрите в логах Апача. Есть ли в сообщении параметр mdid ?
А для решения второй загадки можно прямо из браузера спросите Мегу http://<ip>/sec/?tget=1 В ответе должно быть только одно число. Это градусы.
mdid в логах не нахожу...
Упс... нашел mdid и в апаче и в мажордомо.
-
- Сообщения: 265
- Зарегистрирован: Пт дек 26, 2014 1:58 pm
- Благодарил (а): 33 раза
- Поблагодарили: 24 раза
Re: Подключение контроллера MegaD-328
Кажется нашел зацепку...
У меня в меге не стояла температура алярма. И мега постоянно слала на сервер сообщения at. При этом она не шлет свой mdid. Нужно переговорить с Андреем по этому вопросу. Поэтому megad.php и не мог его определить...
Сейчас я выставил температуру на 30 градусов и ошибка по mdid в логе пропала. При срабатывании портов мега исправно шлет свой mdid.
Но, тем не менее вопрос остается открытым. В логах апача видно что мега шлет сообщения не со своего адреса напрямую, а через адрес шлюза по умолчанию, даже если этот шлюз и не прописан в меге.
Так вот интересна реакция megad.php на это...
Если я не прописываю адрес шлюза в меге, и она отправляет сообщение на сервер без mdid, то скрипт не ругается на ip адрес меги(хотя он и не ее) и соответственно вызывает какой-то метод incomingMessage(только чей?, может класса?) и устанавливает свойство alive в 1(опять же чье? возможно класса, а моя единственная в данный момент мега все это наследует?)
Если же я в явном виде укажу в меге адрес шлюза(а он тот же) - проверка в megad.php по ip уже не проходит и метод incomingMessage не вызывается.
Возможно у меня некоторые проблемы с сетью. Сейчас параллельно тестирую разное оборудование в ней, пришлось недавно сменить адрес подсети, да и сам шлюз только появился, еще не до конца с ним разобрался(может нат внутри сети включен)...
Но тем не менее понятно 2 вещи:
1. Мега не шлет свой mdid с сообщением at(как минимум). Это нужно обсуждать на другом форуме.
2. megad.php некорректно обрабатывает определение ip адреса Меги. Видимо лучше вообще исключить данную проверку, ИМХО.

У меня в меге не стояла температура алярма. И мега постоянно слала на сервер сообщения at. При этом она не шлет свой mdid. Нужно переговорить с Андреем по этому вопросу. Поэтому megad.php и не мог его определить...
Сейчас я выставил температуру на 30 градусов и ошибка по mdid в логе пропала. При срабатывании портов мега исправно шлет свой mdid.
Но, тем не менее вопрос остается открытым. В логах апача видно что мега шлет сообщения не со своего адреса напрямую, а через адрес шлюза по умолчанию, даже если этот шлюз и не прописан в меге.
Так вот интересна реакция megad.php на это...
Если я не прописываю адрес шлюза в меге, и она отправляет сообщение на сервер без mdid, то скрипт не ругается на ip адрес меги(хотя он и не ее) и соответственно вызывает какой-то метод incomingMessage(только чей?, может класса?) и устанавливает свойство alive в 1(опять же чье? возможно класса, а моя единственная в данный момент мега все это наследует?)
Если же я в явном виде укажу в меге адрес шлюза(а он тот же) - проверка в megad.php по ip уже не проходит и метод incomingMessage не вызывается.
Возможно у меня некоторые проблемы с сетью. Сейчас параллельно тестирую разное оборудование в ней, пришлось недавно сменить адрес подсети, да и сам шлюз только появился, еще не до конца с ним разобрался(может нат внутри сети включен)...
Но тем не менее понятно 2 вещи:
1. Мега не шлет свой mdid с сообщением at(как минимум). Это нужно обсуждать на другом форуме.
2. megad.php некорректно обрабатывает определение ip адреса Меги. Видимо лучше вообще исключить данную проверку, ИМХО.
-
- Сообщения: 265
- Зарегистрирован: Пт дек 26, 2014 1:58 pm
- Благодарил (а): 33 раза
- Поблагодарили: 24 раза
Re: Подключение контроллера MegaD-328
Bagir, у Вас majordomo на какой операционке стоит? У меня win7. Вроде как Андрей где-то писал о проблемах определения адреса меги именно под виндой. Вроде там сокеты нужно использовать... В общем посмотрите как он определяет адрес в megad-cfg.php. Может оттуда код позаимствовать?Victor_S писал(а): 2. megad.php некорректно обрабатывает определение ip адреса Меги. Видимо лучше вообще исключить данную проверку, ИМХО.
-
- Сообщения: 291
- Зарегистрирован: Вт ноя 18, 2014 11:43 pm
- Откуда: Краснодарский край
- Благодарил (а): 32 раза
- Поблагодарили: 68 раз
Re: Подключение контроллера MegaD-328
Мне кажется тут проблема с сетью. У меня сервер на WinXP все нормально работает. НЕдавно только обновил прошивку, до этого по ip определял и все работало.
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
CONNECT: http://connect.smartliving.ru/profile/311
-
- Сообщения: 265
- Зарегистрирован: Пт дек 26, 2014 1:58 pm
- Благодарил (а): 33 раза
- Поблагодарили: 24 раза
Re: Подключение контроллера MegaD-328
Возможно, с этим я разберусь. Но это не отменяет проблему определения адреса Меги в megad.php.zelevova писал(а):Мне кажется тут проблема с сетью. У меня сервер на WinXP все нормально работает. НЕдавно только обновил прошивку, до этого по ip определял и все работало.
-
- Сообщения: 265
- Зарегистрирован: Пт дек 26, 2014 1:58 pm
- Благодарил (а): 33 раза
- Поблагодарили: 24 раза
Re: Подключение контроллера MegaD-328
Только что Андрей выложил прошивку в которой исправлена проблема с mdid в сообщении at