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

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

Модератор: immortal

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

Re: Модуль "MegaD"

Сообщение Victor_S » Чт май 14, 2015 11:36 am

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

Re: Модуль "MegaD"

Сообщение sergejey » Чт май 14, 2015 11:55 am

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

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

Re: Модуль "MegaD"

Сообщение Victor_S » Чт май 14, 2015 11:57 am

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

Re: Модуль "MegaD"

Сообщение Jager » Чт май 14, 2015 12:03 pm

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
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Модуль "MegaD"

Сообщение sergejey » Чт май 14, 2015 12:37 pm

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

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

Re: Модуль "MegaD"

Сообщение Victor_S » Чт май 14, 2015 2:33 pm

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

Re: Модуль "MegaD"

Сообщение sergejey » Чт май 14, 2015 2:51 pm

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

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

Re: Модуль "MegaD"

Сообщение AHgpeu » Чт май 14, 2015 2:58 pm

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

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

Re: Модуль "MegaD"

Сообщение Victor_S » Чт май 14, 2015 3:00 pm

Дополню по второму вопросу. Вот какой код у меня был в методе по "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
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: Модуль "MegaD"

Сообщение Victor_S » Чт май 14, 2015 3:06 pm

да, забыл добавить - вот метод 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);
Ответить