Страница 3 из 141
Re: Модуль "MegaD"
Добавлено: Чт май 14, 2015 11:36 am
Victor_S
sergejey писал(а): Сейчас разве встроенные команды не работают? Мне казалось, что если мега не принимает никакой команды от сервера (а модуль никаких команд не отдаёт при получении уведомления об изменении статуса), то выполняется встроенная команда. Или мега как-то по-другому реагирует?
Нет. Если Мега видит сервер, то сама ничего не делает. Т.е. эту встроенную(или другую) команду должен отправить модуль.
Re: Модуль "MegaD"
Добавлено: Чт май 14, 2015 11:55 am
sergejey
Victor_S писал(а):sergejey писал(а): Сейчас разве встроенные команды не работают? Мне казалось, что если мега не принимает никакой команды от сервера (а модуль никаких команд не отдаёт при получении уведомления об изменении статуса), то выполняется встроенная команда. Или мега как-то по-другому реагирует?
Нет. Если Мега видит сервер, то сама ничего не делает. Т.е. эту встроенную(или другую) команду должен отправить модуль.
Вот же ж... )
Ок, принято.
Re: Модуль "MegaD"
Добавлено: Чт май 14, 2015 11:57 am
Victor_S
sergejey писал(а):
Т.е. нужна возможность указать метод, который вызывается при изменении значения входа, правильно? Какие-то параметры нужно этому методу передавать?
Сергей, посмотрите класс МегаД у Bagir-a тут:
http://smartliving.ru/forum/viewtopic.php?f=14&t=1832
У объекта Мега99 есть метод IncommongMessages, там довольно подробно откомментированы различные варианты(особенно в конце где Мега сама шлет сообщения). Хотя даже Bagir не использует всех возможностей Меги и ее новых прошивок...
Re: Модуль "MegaD"
Добавлено: Чт май 14, 2015 12:03 pm
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
Re: Модуль "MegaD"
Добавлено: Чт май 14, 2015 12:37 pm
sergejey
Обновил модуль:
* Сервер отвечает той командой, что прописана в конфигурации Меги (при изменении её надо зайти в раздел Advanced и сделать Read conf)
* Добавились связанные методы (как для первого, так и для второго значения данных). Связанному методу передаётся value и port.
Re: Модуль "MegaD"
Добавлено: Чт май 14, 2015 2:33 pm
Victor_S
sergejey писал(а):Обновил модуль:
Что-то у меня не хочет работать ни то ни другое...
1. В типе появились команды по умолчанию(например, ecmd:8:2), но никакой реакции Меги нету. При этом вход не связан ни с каким объектом.
2. Можно выбрать метод объекта, но он не сохраняется. После сохранения остается только связанный объект, а поля свойства и метода пустые.
Re: Модуль "MegaD"
Добавлено: Чт май 14, 2015 2:51 pm
sergejey
Victor_S писал(а):sergejey писал(а):Обновил модуль:
Что-то у меня не хочет работать ни то ни другое...
1. В типе появились команды по умолчанию(например, ecmd:8:2), но никакой реакции Меги нету. При этом вход не связан ни с каким объектом.
Тут не понятно. У меня скрипт отвечает прописанной командой:
Victor_S писал(а):
2. Можно выбрать метод объекта, но он не сохраняется. После сохранения остается только связанный объект, а поля свойства и метода пустые.
Здесь ошибку нашёл, сейчас будет сохранять.
Re: Модуль "MegaD"
Добавлено: Чт май 14, 2015 2:58 pm
AHgpeu
установил.
сразу 1я бага.
порты, настроенные как выход с ШИМ -- не считываются значения с меги. (ШИМ возможна на 10, 12 и 13 выводах)
дальше ещё не разбирался, вечером залезу плотно.
и обработка длительного нажатия планируется? у меня диммирование света реализовано на основе долгого нажатия.
можно, конечно, и самому со скриптами заморочиться, но хочется "из коробки" =-)
а в целом огромное спасибо за разработку такого нужного функционала.
правда, переделок предстоит тьма, я так чувствую)
Re: Модуль "MegaD"
Добавлено: Чт май 14, 2015 3:00 pm
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 - это реакция на нажатие кнопки, по сути просто отправляю Меге на выполнение ее же значение по умолчанию для данного порта, и дополнительно проверяю статус выполнения задания(уже не помню, где-то не срабатывали обновления статусов).
Re: Модуль "MegaD"
Добавлено: Чт май 14, 2015 3:06 pm
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);