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

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

Модератор: immortal

gagarin74
Сообщения: 330
Зарегистрирован: Пн апр 06, 2015 9:51 am
Благодарил (а): 37 раз
Поблагодарили: 22 раза

Re: Модуль "MegaD"

Сообщение gagarin74 » Вс фев 12, 2017 10:05 pm

Chainik писал(а):
gagarin74 писал(а):В сухом остатке две беды (не считая проблему с обновлением портами)
1 Раньше был внутренний температурный датчик в мегадевайсе (сидел на 16 порту если не ошибаюсь).И умник красиво рисовал график температуры. ПРОПАЛ!!!
Начиная с какой-то версии прошивки удалена поддержка внутреннего датчика температуры (команда "tget", если не ошибаюсь).
Я в том числе и поэтому не обновляюсь на последние версии прошивки, что иногда оттуда исчезает (понимаю, что вынужденно) полезный функционал.
Ну хоть это "радует".А то у меня руки золотые,только растут из жопы.
Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm
Благодарил (а): 32 раза
Поблагодарили: 42 раза

Re: Модуль "MegaD"

Сообщение Kod.Begemot » Вс фев 12, 2017 10:54 pm

gagarin74 писал(а):... И как я понимаю у него в прошивки нет функционала -давать пендаль умному дому,если изменилось состояние выхода. Про входы,повторюсь -все работает на ура!!!...
Я, конечно, извиняюсь... Но как состояние выхода может измениться, если его никто не менял?
МегаД подразумевает концепцию с сервером во главе всего - а значит - сервер и управляет выходами. Action не работает при живом сервере...
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Модуль "MegaD"

Сообщение Bagir » Вс фев 12, 2017 10:58 pm

Chainik писал(а):Начиная с какой-то версии прошивки удалена поддержка внутреннего датчика температуры (команда "tget", если не ошибаюсь).
Вот это поворот... Мой класс активно использует этот датчик. На его опрос его и свойство alive завязано. Совсем не хорошо, если tget больше не будет работать. Возможно его убрали из-за отсутствия памяти на новые доработки.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Модуль "MegaD"

Сообщение Bagir » Вс фев 12, 2017 11:04 pm

gagarin74 писал(а):... И как я понимаю у него в прошивки нет функционала -давать пендаль умному дому,если изменилось состояние выхода. Про входы,повторюсь -все работает на ура!!!...
Совет только один. Читать, читать, и ещё раз читать. От А до Я всю ветку с модулем и классом. Мега это просто обалденная штуковина, которая предоставляет огромные гибкие возможности по работе с ней. У меня 6 штук трудятся, и это не предел.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm
Благодарил (а): 32 раза
Поблагодарили: 42 раза

Re: Модуль "MegaD"

Сообщение Kod.Begemot » Пн фев 13, 2017 9:18 am

Bagir, я вот как раз ваш класс использую, и тоже огорчен тем, что убрали tget. Потому пока и не обновляю прошивки...
У меня все Меги работают с srv loop, вот думаю вместо tget использовать приход данных по srv loop для alive...
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Модуль "MegaD"

Сообщение Bagir » Пн фев 13, 2017 10:52 am

А придется так. Вводить таймер на alive, и если данные какое то врем не пришли, отмечать мегу как неживую. Я, вероятно, не буду обновляться. Меги работают отлично. Больше желать просто нечего. Свободных каналов осталось совсем немного. Рушить хорошо работающую систему нет смысла. Ну а если захочется попробовать новые возможности прошивки, то лучше я ещё новую мегу поставлю. В классе, конечно, придется делать условие, какие меги пинговать через опрос tget, а каким задавать интервал на свойство alive.
А в модуле есть опрос tget?
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
tsember
Сообщения: 52
Зарегистрирован: Ср фев 04, 2015 12:28 am
Благодарил (а): 54 раза
Поблагодарили: 6 раз

Re: Модуль "MegaD"

Сообщение tsember » Пн фев 13, 2017 11:19 pm

Сергей. Скажите пожалуйста, планируете добавить поддержку параметра m=2 (при получении которого не выполнять команду по умолчанию второй раз, а просто передать этот параметр в метод. Очень надо. А так же обрабатывать запрос st=1 с меги?! Или начинать колхозить что то самому?
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Модуль "MegaD"

Сообщение Bagir » Вт фев 14, 2017 2:00 am

Если вопрос про класс, то обсуждение лучше продолжить тут viewtopic.php?f=14&t=1832 Я бы с радостью добавил, но прошивки старые и не на чем пробовать. По идее можно просто из браузера get отправить как будто мега прислала. Надо вытянуть из логов строку, которую мега присылает. И если я правильно понял, то m=2 мега отправляет если нажать и долго держать кнопку. Так? А в настройках меги как это всё выглядит. Скрин бы посмотреть.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
gagarin74
Сообщения: 330
Зарегистрирован: Пн апр 06, 2015 9:51 am
Благодарил (а): 37 раз
Поблагодарили: 22 раза

Re: Модуль "MegaD"

Сообщение gagarin74 » Ср фев 15, 2017 11:17 pm

Доброй ночи. Это опять я.
В умнике есть очень полезная штука как Веб переменные.
Посылаем на мегу http://192.168.88.125/sec/?pt=8&cmd=get получаем в браузере ON
В веб переменных в шаблонах поиска вставляем (.+?.+?) и получаем в любую переменную значение ON
Со значением OFF так не прокатывает (.+?.+?) ,прокатывает так (.+?.+?.+?)
Помогите пожалуйста -с шаблоном что бы он вытаскивал и ON и OFF
Спасибо
avacs
Сообщения: 3
Зарегистрирован: Чт фев 16, 2017 4:33 pm
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Модуль "MegaD"

Сообщение avacs » Чт фев 16, 2017 4:54 pm

СпойлерПоказать
Chainik писал(а):
Zavoolon писал(а):Коллеги!

Есть какой подробный мануал, как подключать Мегу? Без изысков? Направьте по назначению, или давайте создадим вместе, и выложим в шапке темы, или давайте подправим то что есть. Я смотрю, люди приходят, и каждый стучится об одно и тоже... Вот как я сейчас.

Для примера, есть Мега, у нее задействован вход I0, на вход посажена кнопка (выключатели с автовозвратом в состояние "выкл").
На выходе O7 сидит лампочка.
По порядку:
1) нужно создать объект Input_0_MegaD_XXX класса keySensors (а лучше объект специального дочернего класса MegaDInputs класса keySensors), в котором создать специальный метод inputSwitched, который вызывается каждый раз при изменении состояния привязанного входа Меги; этим методом изменяется специальное свойство buttonPressed. При этом, поскольку кнопка, свойство будет изменено только при изменении входа с состояния 1 на состояние 0 (кнопка отпущена).
2) привязать вход I0 Меги к объекту Input_0_MegaD_XXX и его методу inputSwitched.
3) создать объект Output_7_MegaD_XXX класса Relays, для которого в метод switched вписать return "7:2"
4) создать на сцене объект "выключатель", для которого указать связанный объект Output_7_MegaD_XXX
5) опять вернуться к конфигурированию Меги, выхода O7 связать с объектом Output_7_MegaD_XXX, связанным свойство указать status
6) ---???
что дальше? как связать объект Input_0_MegaD_XXX и объект Output_7_MegaD_XXX? Совершенно непонятно, ведь в случае выключателя (на сцене), привязка идет очень неявно, просто указать связанный объект... А дальше все сконфигурируется само. Как?

ЗЫ: и вообще - что может скриптовый язык? справочник есть? Список доступных переменных на входе, можно ли менять свойства связанных объектов, какие есть доступные функции... Ведь их не отладишь, приходится писать "вслепую". Тот еще геморрой... Прошу прощения, если задаю банальные вопросы, но например мне не хватает структурированного мануала. И я понимаю, что это просто PHP, но все равно, что я могу использовать, что мне дается в рамках предложенной здесь модели, подразумевающей привязывание объектов, свойств, методов....

ЗЗЫ: справочник нашел по адресу http://majordomo.smartliving.ru/Main/Pr ... gFunctions. Однако вопрос по дорожной карте, как действовать в конкретном, описанном выше случае, остался...
Сразу хочу сказать, что модуль MegaD я использую только для того, чтобы «отлавливать» срабатывание входов Меги. Это несколько отличается от задуманного автором способа использования модуля, но я, видимо, что-то не допонял или не смог когда-то разобраться. Поэтому применяю несколько другой подход.

Считаем, что в модуле MegaD Мега успешно обнаружилась и вопрос подключения Меги к модулю здесь обсуждать не будем.

Итак, приступим.

Имеется Мега, Мажордомо с установленным модулем MegaD, «железный» выключатель без фиксации (кнопка) на стене, лампочка на потолке.
Допустим, адрес Меги в сети 192.168.0.14, пароль “sec”; «железный» выключатель скоммутирован со входом Меги «P0», а лампочка подключена ко выходу «P7».

Задача: включать/выключать лампочку с помощью Мажордомо как из интерфейса, так и посредством «железного» выключателя.

1. Для «железного» выключателя создаем в классе KeySensors виртуальный объект. «Обозвать» объект можно как угодно, однако название «со смыслом» облегчит нам идентификацию объекта среди однотипных. Назовем его, к примеру, «Button_014-00». При этом под 014 подразумевается окончание адреса Меги в сети, а под 00 – порт «P0», куда подключен выключатель.
Подход с названием может и не идеальный («железный» выключатель никуда со стены не денется, а адрес Меги может неоднократно меняться в процессе настройки/переделки/апгрейда, да и контакты от выключателя могут «переезжать» из одного порта в другой). Но пока для простоты «ориентирования» в объектах я для себя остановился на таком варианте присвоения имен.
У «Button_014-00» уже есть метод «statusChanged».

2. Для выхода Меги «P7» создаем виртуальный объект в классе Relays. Назовем его по аналогии «Relay_014-07». У объекта имеются свойство «status» и «штатные» методы «turnOn», «turnOff» и «switch».
Произведем настройку методов путем записи кода:
[перед сохранением введенного пользователем кода в пункте «Вызывать родительский метод» проставим радиоточку в положение «НИКОГДА».]
в «turnOn» запишем

Код: Выделить всё

file_get_contents("http://192.168.0.14/sec/?cmd=7:1");
setGlobal('Relay_014-07.status', 1);
в «turnOff» запишем

Код: Выделить всё

file_get_contents("http://192.168.0.14/sec/?cmd=7:0");
setGlobal('Relay_014-07.status', 0);
Метод «switch» можно оставить без изменений (по умолчанию будет выполняться общеклассовый метод с предустановленным кодом)

Код: Выделить всё

$status=$this->getProperty("status");
if ($status) {
 $this->callMethod('turnOff');
} else {
 $this->callMethod('turnOn');
}
ОДНАКО я все же написал бы туда свой код

Код: Выделить всё

file_get_contents("http://192.168.0.14/sec/?cmd=7:2");
$state =file_get_contents("http://192.168.0.14/sec/?pt=7&cmd=get");
$state = substr($state,0,2);
if ($state == "ON") {
 setGlobal('Relay_014-07.status', 1);
} else {
 setGlobal('Relay_014-07.status', 0);
}
3. Создаем объект на сцене типа «Выключатель». В поле «Связанный объект» выставляем «Relay_014-07».

4. В модуле MegaD у Меги на вкладке «Данные» у порта «0 Input» в поле «Связанный объект» выставляем «Button_014-00». В поле «Метод» выставляем «statusChanged».
Также я проставляю галку в поле «Skip default action», потому что не хочу, чтобы сервер запускал выполнение действия по умолчанию. Пусть действие по умолчанию выполняет сама Мега, когда сервер недоступен.

5. Возвращаемся к объекту «Button_014-00» и настраиваем его метод «statusChanged». Пишем туда код PHP

Код: Выделить всё

callMethod('Relay_014-07.switch');
(«Выполнять родительский метод» выставляем «никогда».)

Все. Круг замкнулся. Теперь наша лампочка на потолке может включаться/выключаться Мажордомо как «железным» выключателем (кнопкой), так и выключателем на сцене.

Написал все это без возможности повторить на своем стенде, так что если вдруг где-то ошибся в коде, прошу меня простить. Но общая схема, думаю, понятна.

Еще остается один момент, который стоит упомянуть. Наша лампочка может быть включена и без участия Мажордомо (самой Мегой путем выполнения сценария по умолчанию, из web-интерфейса Меги, командой из браузера и пр.). И после того, как мы включили Мажордомо, между состоянием выключателя на сцене и реальным состоянием лампочки может быть рассогласование. Конечно, при первом клике по выключателю («железному» или на сцене) синхронизация состояний восстановится.
Однако, можно принудительно проводить «сверку» состояний путем запуска скрипта в цикле, например, раз в 15 минут). Назовем скрипт «proverka».

Код: Выделить всё

$state =file_get_contents("http://192.168.0.14/sec/?pt=7&cmd=get");
$state = substr($state,0,2);
if ($state == "ON") {
 setGlobal('Relay_014-07.status', 1);
} else {
 setGlobal('Relay_014-07.status', 0);
}
setTimeOut('myTimer_proverka,'runScript("proverka ");',60*15);
А чтобы этот скрипт запустился после старта Мажордомо, можно записать в «Timer-> onNewMinute»

Код: Выделить всё

runScript("proverka ");
Также отмечу, что сам – абсолютный ноль в программировании, о чем мой ник «Chainik» красноречиво свидетельствует.
И напоследок, хочу поблагодарить автора Мажордомо Сергея за такой замечательный гибкий инструмент, в котором большинство вещей можно сделать большим количеством разнообразных способов. А лучший способ тот – который ты понимаешь :)
Добрый всем! Только начал осваиваться в MAjordomo, собрал самодельный контроллер MegaD-328, прошивка 3.53, Major на Ubuntu server 14.04.5, установил из магазина плагин MegaD, в итоге модуль находит Контроллер, данных нет (Аналогично как было у пользователей ранее в топиках). X-Ray показывает что запросов нет, соответственно и ответов. Пробовал править файлы, как описано в топиках ранее ( в папке ./modules/megad/...) Как то начал видеть в X-ray что начали прихоть разумные ответы от MegaD-328 в виде "OFF;ON/1;ON/1;ON/1;ON/1;ON/1;ON/0;ON;ON;ON;ON;OFF;OFF;OFF;595;625", но поля все равно не заполнялись (были только заголовки вверху, а самих значений не было). Попробовал то что предлагает ув. "Chainik", все работает на Ура, но как то не "кошерно" все ручками, да и не удобно рефрешить состояния от меги. Вот вопрос, я что то не соображаю или в модуле косяки? Смотрел Wireshark, запросы не идут в сети по нажатию кнопки "обновить", на вкладке "advanced" - тоже данные не заполняются, хотя некоторое время идет ожидание, а потом в статусе результат "ОК" (хотя далеко не ОК....).
Ответить