Нет. Если Мега видит сервер, то сама ничего не делает. Т.е. эту встроенную(или другую) команду должен отправить модуль.sergejey писал(а): Сейчас разве встроенные команды не работают? Мне казалось, что если мега не принимает никакой команды от сервера (а модуль никаких команд не отдаёт при получении уведомления об изменении статуса), то выполняется встроенная команда. Или мега как-то по-другому реагирует?
[Модуль] MegaD (megad)
Модератор: immortal
-
- Сообщения: 265
- Зарегистрирован: Пт дек 26, 2014 1:58 pm
- Благодарил (а): 33 раза
- Поблагодарили: 24 раза
Re: Модуль "MegaD"
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Модуль "MegaD"
Вот же ж... )Victor_S писал(а):Нет. Если Мега видит сервер, то сама ничего не делает. Т.е. эту встроенную(или другую) команду должен отправить модуль.sergejey писал(а): Сейчас разве встроенные команды не работают? Мне казалось, что если мега не принимает никакой команды от сервера (а модуль никаких команд не отдаёт при получении уведомления об изменении статуса), то выполняется встроенная команда. Или мега как-то по-другому реагирует?
Ок, принято.
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 265
- Зарегистрирован: Пт дек 26, 2014 1:58 pm
- Благодарил (а): 33 раза
- Поблагодарили: 24 раза
Re: Модуль "MegaD"
Сергей, посмотрите класс МегаД у Bagir-a тут: http://smartliving.ru/forum/viewtopic.php?f=14&t=1832sergejey писал(а): Т.е. нужна возможность указать метод, который вызывается при изменении значения входа, правильно? Какие-то параметры нужно этому методу передавать?
У объекта Мега99 есть метод IncommongMessages, там довольно подробно откомментированы различные варианты(особенно в конце где Мега сама шлет сообщения). Хотя даже Bagir не использует всех возможностей Меги и ее новых прошивок...
-
- Сообщения: 708
- Зарегистрирован: Сб авг 18, 2012 10:21 am
- Благодарил (а): 26 раз
- Поблагодарили: 183 раза
Re: Модуль "MegaD"
Из описания API мегиsergejey писал(а):Т.е. нужна возможность указать метод, который вызывается при изменении значения входа, правильно? Какие-то параметры нужно этому методу передавать?
"Параметр "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"
Обновил модуль:
* Сервер отвечает той командой, что прописана в конфигурации Меги (при изменении её надо зайти в раздел Advanced и сделать Read conf)
* Добавились связанные методы (как для первого, так и для второго значения данных). Связанному методу передаётся value и port.
* Сервер отвечает той командой, что прописана в конфигурации Меги (при изменении её надо зайти в раздел Advanced и сделать Read conf)
* Добавились связанные методы (как для первого, так и для второго значения данных). Связанному методу передаётся value и port.
СкриншотПоказать
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 265
- Зарегистрирован: Пт дек 26, 2014 1:58 pm
- Благодарил (а): 33 раза
- Поблагодарили: 24 раза
Re: Модуль "MegaD"
Что-то у меня не хочет работать ни то ни другое...sergejey писал(а):Обновил модуль:
1. В типе появились команды по умолчанию(например, ecmd:8:2), но никакой реакции Меги нету. При этом вход не связан ни с каким объектом.
2. Можно выбрать метод объекта, но он не сохраняется. После сохранения остается только связанный объект, а поля свойства и метода пустые.
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Модуль "MegaD"
Тут не понятно. У меня скрипт отвечает прописанной командой:Victor_S писал(а):Что-то у меня не хочет работать ни то ни другое...sergejey писал(а):Обновил модуль:
1. В типе появились команды по умолчанию(например, ecmd:8:2), но никакой реакции Меги нету. При этом вход не связан ни с каким объектом.
Здесь ошибку нашёл, сейчас будет сохранять.Victor_S писал(а): 2. Можно выбрать метод объекта, но он не сохраняется. После сохранения остается только связанный объект, а поля свойства и метода пустые.
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
- AHgpeu
- Сообщения: 117
- Зарегистрирован: Чт мар 12, 2015 11:46 am
- Благодарил (а): 26 раз
- Поблагодарили: 16 раз
Re: Модуль "MegaD"
установил.
сразу 1я бага.
порты, настроенные как выход с ШИМ -- не считываются значения с меги. (ШИМ возможна на 10, 12 и 13 выводах)
дальше ещё не разбирался, вечером залезу плотно.
и обработка длительного нажатия планируется? у меня диммирование света реализовано на основе долгого нажатия.
можно, конечно, и самому со скриптами заморочиться, но хочется "из коробки" =-)
а в целом огромное спасибо за разработку такого нужного функционала.
правда, переделок предстоит тьма, я так чувствую)
сразу 1я бага.
порты, настроенные как выход с ШИМ -- не считываются значения с меги. (ШИМ возможна на 10, 12 и 13 выводах)
дальше ещё не разбирался, вечером залезу плотно.
и обработка длительного нажатия планируется? у меня диммирование света реализовано на основе долгого нажатия.
можно, конечно, и самому со скриптами заморочиться, но хочется "из коробки" =-)
а в целом огромное спасибо за разработку такого нужного функционала.
правда, переделок предстоит тьма, я так чувствую)
Последний раз редактировалось AHgpeu Чт май 14, 2015 3:01 pm, всего редактировалось 1 раз.
-
- Сообщения: 265
- Зарегистрирован: Пт дек 26, 2014 1:58 pm
- Благодарил (а): 33 раза
- Поблагодарили: 24 раза
Re: Модуль "MegaD"
Дополню по второму вопросу. Вот какой код у меня был в методе по "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 - это реакция на нажатие кнопки, по сути просто отправляю Меге на выполнение ее же значение по умолчанию для данного порта, и дополнительно проверяю статус выполнения задания(уже не помню, где-то не срабатывали обновления статусов).
/* Мегадевайс сам шлет нам на сервер 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 - это реакция на нажатие кнопки, по сути просто отправляю Меге на выполнение ее же значение по умолчанию для данного порта, и дополнительно проверяю статус выполнения задания(уже не помню, где-то не срабатывали обновления статусов).
-
- Сообщения: 265
- Зарегистрирован: Пт дек 26, 2014 1:58 pm
- Благодарил (а): 33 раза
- Поблагодарили: 24 раза
Re: Модуль "MegaD"
да, забыл добавить - вот метод 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);
// 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);