[Модуль] MegaD (megad)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm

Re: Модуль "MegaD"

Сообщение Victor_S »

sergejey писал(а): Сейчас разве встроенные команды не работают? Мне казалось, что если мега не принимает никакой команды от сервера (а модуль никаких команд не отдаёт при получении уведомления об изменении статуса), то выполняется встроенная команда. Или мега как-то по-другому реагирует?
Нет. Если Мега видит сервер, то сама ничего не делает. Т.е. эту встроенную(или другую) команду должен отправить модуль.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Контактная информация:

Re: Модуль "MegaD"

Сообщение sergejey »

Victor_S писал(а):
sergejey писал(а): Сейчас разве встроенные команды не работают? Мне казалось, что если мега не принимает никакой команды от сервера (а модуль никаких команд не отдаёт при получении уведомления об изменении статуса), то выполняется встроенная команда. Или мега как-то по-другому реагирует?
Нет. Если Мега видит сервер, то сама ничего не делает. Т.е. эту встроенную(или другую) команду должен отправить модуль.
Вот же ж... )
Ок, принято.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm

Re: Модуль "MegaD"

Сообщение Victor_S »

sergejey писал(а): Т.е. нужна возможность указать метод, который вызывается при изменении значения входа, правильно? Какие-то параметры нужно этому методу передавать?
Сергей, посмотрите класс МегаД у Bagir-a тут: http://smartliving.ru/forum/viewtopic.php?f=14&t=1832
У объекта Мега99 есть метод IncommongMessages, там довольно подробно откомментированы различные варианты(особенно в конце где Мега сама шлет сообщения). Хотя даже Bagir не использует всех возможностей Меги и ее новых прошивок...
Jager
Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am

Re: Модуль "MegaD"

Сообщение Jager »

sergejey писал(а):Т.е. нужна возможность указать метод, который вызывается при изменении значения входа, правильно? Какие-то параметры нужно этому методу передавать?
Из описания API меги
"Параметр "m"
Этот параметр определяет по какому событию произошла отправка пакета на сервер. Если контакт замыкается, то на сервер отправляется сообщение без параметра "m". Если контакт размыкается, то значение параметр "m" равно "1"
Пример (произошло размыкание контакта, подключенного ко входу №5)
http://192.168.0.250/megad.php?pt=5&m=1"

т.е. передавать надо, например для использования с охранными датчиками нужна реакция именно на размыкание.
У Bagir сделано так http://smartliving.ru/forum/viewtopic.p ... 130#p13446
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Контактная информация:

Re: Модуль "MegaD"

Сообщение sergejey »

Обновил модуль:
* Сервер отвечает той командой, что прописана в конфигурации Меги (при изменении её надо зайти в раздел Advanced и сделать Read conf)
* Добавились связанные методы (как для первого, так и для второго значения данных). Связанному методу передаётся value и port.
СкриншотSPOILER_SHOW
Изображение

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm

Re: Модуль "MegaD"

Сообщение Victor_S »

sergejey писал(а):Обновил модуль:
Что-то у меня не хочет работать ни то ни другое...
1. В типе появились команды по умолчанию(например, ecmd:8:2), но никакой реакции Меги нету. При этом вход не связан ни с каким объектом.
2. Можно выбрать метод объекта, но он не сохраняется. После сохранения остается только связанный объект, а поля свойства и метода пустые.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Контактная информация:

Re: Модуль "MegaD"

Сообщение sergejey »

Victor_S писал(а):
sergejey писал(а):Обновил модуль:
Что-то у меня не хочет работать ни то ни другое...
1. В типе появились команды по умолчанию(например, ecmd:8:2), но никакой реакции Меги нету. При этом вход не связан ни с каким объектом.
Тут не понятно. У меня скрипт отвечает прописанной командой:
Изображение
Victor_S писал(а): 2. Можно выбрать метод объекта, но он не сохраняется. После сохранения остается только связанный объект, а поля свойства и метода пустые.
Здесь ошибку нашёл, сейчас будет сохранять.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
AHgpeu
Сообщения: 117
Зарегистрирован: Чт мар 12, 2015 11:46 am

Re: Модуль "MegaD"

Сообщение AHgpeu »

установил.
сразу 1я бага.
порты, настроенные как выход с ШИМ -- не считываются значения с меги. (ШИМ возможна на 10, 12 и 13 выводах)
дальше ещё не разбирался, вечером залезу плотно.
и обработка длительного нажатия планируется? у меня диммирование света реализовано на основе долгого нажатия.
можно, конечно, и самому со скриптами заморочиться, но хочется "из коробки" =-)

а в целом огромное спасибо за разработку такого нужного функционала.
правда, переделок предстоит тьма, я так чувствую)
Последний раз редактировалось AHgpeu Чт май 14, 2015 3:01 pm, всего редактировалось 1 раз.
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm

Re: Модуль "MegaD"

Сообщение Victor_S »

Дополню по второму вопросу. Вот какой код у меня был в методе по "Bagir-у":
/* Мегадевайс сам шлет нам на сервер get сообщение о изменении статуса порта.
Мега передаст номер порта в $params['pt'] и статус замкнули/разомкнули в $params['m'].
ВНИМАНИЕ! в группах case нужно изменить код на свой!
*/
if (isset($params['pt'])) {

//Параметр 'm' с меги не передается при нажатии. А при отпускании кнопки его значение = 1
//Переводим его в статус. 1 - замкнули (нажали); 0 - разомкнули (отпустили)
if (!isset($params['m'])) {$ms=1;} else {$ms=0;}
switch ($params['pt']) { //pt это порт Меги. Для каждого порта своя группа команд case
case 0:
callMethod('GenStatus.statusChanged', array('status'=>$ms));
break;
case 1:
$this->callMethod('setOutput', array("port"=>8, "value"=>2));
$this->callMethod('getData', array('port'=>8));
break;
case 2:
$this->callMethod('setOutput', array("port"=>11, "value"=>2));
$this->callMethod('getData', array('port'=>11));
break;
case 3:
$this->callMethod('setOutput', array("port"=>13, "value"=>2));
$this->callMethod('getData', array('port'=>13));
break;
case 4:
callMethod('F1Status.statusChanged', array('status'=>$ms));
break;
case 5:
callMethod('F2Status.statusChanged', array('status'=>$ms));
break;
case 6:
callMethod('F3Status.statusChanged', array('status'=>$ms));
break;
case 14:
$this->setProperty('sensor1', $dt[0]);
break;
case 15:
$this->setProperty('sensor2', $dt[0]);
break;
}
}


Case 0,4,5,6 - вызов метода объекта, но с передачей ему параметра вычисленного тут:
//Параметр 'm' с меги не передается при нажатии. А при отпускании кнопки его значение = 1
//Переводим его в статус. 1 - замкнули (нажали); 0 - разомкнули (отпустили)
if (!isset($params['m'])) {$ms=1;} else {$ms=0;}
т.е. в связанный метод не передаются ни номер порта, ни значение m, а лишь его "модификация"

Case 1,2,3 - это реакция на нажатие кнопки, по сути просто отправляю Меге на выполнение ее же значение по умолчанию для данного порта, и дополнительно проверяю статус выполнения задания(уже не помню, где-то не срабатывали обновления статусов).
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm

Re: Модуль "MegaD"

Сообщение Victor_S »

да, забыл добавить - вот метод setOutput:

// Expects 'output' and 'value' in $params

$reclog = 1; // Писать логи отладки ( 0-нет, 1-только крит, 2-все )

// Открывает лог если нужно
if ($reclog) { $log = getLogger($this); }

$cmdUrl = sprintf('http://%s/%s/?cmd=%d:%d', $this->getProperty('IpAddress'), $this->getProperty('Password'),
intval($params['port']), intval($params['value']));
// Запись данных в лог
if ($reclog == 2) {
$log->trace('setOutput method: '.$cmdUrl);
}
getURL($cmdUrl, 0);
Ответить