Ну хоть это "радует".А то у меня руки золотые,только растут из жопы.Chainik писал(а):Начиная с какой-то версии прошивки удалена поддержка внутреннего датчика температуры (команда "tget", если не ошибаюсь).gagarin74 писал(а):В сухом остатке две беды (не считая проблему с обновлением портами)
1 Раньше был внутренний температурный датчик в мегадевайсе (сидел на 16 порту если не ошибаюсь).И умник красиво рисовал график температуры. ПРОПАЛ!!!
Я в том числе и поэтому не обновляюсь на последние версии прошивки, что иногда оттуда исчезает (понимаю, что вынужденно) полезный функционал.
[Модуль] MegaD (megad)
Модератор: immortal
-
- Сообщения: 330
- Зарегистрирован: Пн апр 06, 2015 9:51 am
- Благодарил (а): 37 раз
- Поблагодарили: 22 раза
Re: Модуль "MegaD"
- Kod.Begemot
- Сообщения: 358
- Зарегистрирован: Чт июн 20, 2013 5:53 pm
- Благодарил (а): 32 раза
- Поблагодарили: 42 раза
Re: Модуль "MegaD"
Я, конечно, извиняюсь... Но как состояние выхода может измениться, если его никто не менял?gagarin74 писал(а):... И как я понимаю у него в прошивки нет функционала -давать пендаль умному дому,если изменилось состояние выхода. Про входы,повторюсь -все работает на ура!!!...
МегаД подразумевает концепцию с сервером во главе всего - а значит - сервер и управляет выходами. Action не работает при живом сервере...
- Bagir
- Сообщения: 1613
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Re: Модуль "MegaD"
Вот это поворот... Мой класс активно использует этот датчик. На его опрос его и свойство alive завязано. Совсем не хорошо, если tget больше не будет работать. Возможно его убрали из-за отсутствия памяти на новые доработки.Chainik писал(а):Начиная с какой-то версии прошивки удалена поддержка внутреннего датчика температуры (команда "tget", если не ошибаюсь).
- Bagir
- Сообщения: 1613
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Re: Модуль "MegaD"
Совет только один. Читать, читать, и ещё раз читать. От А до Я всю ветку с модулем и классом. Мега это просто обалденная штуковина, которая предоставляет огромные гибкие возможности по работе с ней. У меня 6 штук трудятся, и это не предел.gagarin74 писал(а):... И как я понимаю у него в прошивки нет функционала -давать пендаль умному дому,если изменилось состояние выхода. Про входы,повторюсь -все работает на ура!!!...
- Kod.Begemot
- Сообщения: 358
- Зарегистрирован: Чт июн 20, 2013 5:53 pm
- Благодарил (а): 32 раза
- Поблагодарили: 42 раза
Re: Модуль "MegaD"
Bagir, я вот как раз ваш класс использую, и тоже огорчен тем, что убрали tget. Потому пока и не обновляю прошивки...
У меня все Меги работают с srv loop, вот думаю вместо tget использовать приход данных по srv loop для alive...
У меня все Меги работают с srv loop, вот думаю вместо tget использовать приход данных по srv loop для alive...
- Bagir
- Сообщения: 1613
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Re: Модуль "MegaD"
А придется так. Вводить таймер на alive, и если данные какое то врем не пришли, отмечать мегу как неживую. Я, вероятно, не буду обновляться. Меги работают отлично. Больше желать просто нечего. Свободных каналов осталось совсем немного. Рушить хорошо работающую систему нет смысла. Ну а если захочется попробовать новые возможности прошивки, то лучше я ещё новую мегу поставлю. В классе, конечно, придется делать условие, какие меги пинговать через опрос tget, а каким задавать интервал на свойство alive.
А в модуле есть опрос tget?
А в модуле есть опрос tget?
-
- Сообщения: 52
- Зарегистрирован: Ср фев 04, 2015 12:28 am
- Благодарил (а): 54 раза
- Поблагодарили: 6 раз
Re: Модуль "MegaD"
Сергей. Скажите пожалуйста, планируете добавить поддержку параметра m=2 (при получении которого не выполнять команду по умолчанию второй раз, а просто передать этот параметр в метод. Очень надо. А так же обрабатывать запрос st=1 с меги?! Или начинать колхозить что то самому?
- Bagir
- Сообщения: 1613
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Re: Модуль "MegaD"
Если вопрос про класс, то обсуждение лучше продолжить тут viewtopic.php?f=14&t=1832 Я бы с радостью добавил, но прошивки старые и не на чем пробовать. По идее можно просто из браузера get отправить как будто мега прислала. Надо вытянуть из логов строку, которую мега присылает. И если я правильно понял, то m=2 мега отправляет если нажать и долго держать кнопку. Так? А в настройках меги как это всё выглядит. Скрин бы посмотреть.
-
- Сообщения: 330
- Зарегистрирован: Пн апр 06, 2015 9:51 am
- Благодарил (а): 37 раз
- Поблагодарили: 22 раза
Re: Модуль "MegaD"
Доброй ночи. Это опять я.
В умнике есть очень полезная штука как Веб переменные.
Посылаем на мегу http://192.168.88.125/sec/?pt=8&cmd=get получаем в браузере ON
В веб переменных в шаблонах поиска вставляем (.+?.+?) и получаем в любую переменную значение ON
Со значением OFF так не прокатывает (.+?.+?) ,прокатывает так (.+?.+?.+?)
Помогите пожалуйста -с шаблоном что бы он вытаскивал и ON и OFF
Спасибо
В умнике есть очень полезная штука как Веб переменные.
Посылаем на мегу http://192.168.88.125/sec/?pt=8&cmd=get получаем в браузере ON
В веб переменных в шаблонах поиска вставляем (.+?.+?) и получаем в любую переменную значение ON
Со значением OFF так не прокатывает (.+?.+?) ,прокатывает так (.+?.+?.+?)
Помогите пожалуйста -с шаблоном что бы он вытаскивал и ON и OFF
Спасибо
Re: Модуль "MegaD"
СпойлерПоказать
Chainik писал(а):Сразу хочу сказать, что модуль MegaD я использую только для того, чтобы «отлавливать» срабатывание входов Меги. Это несколько отличается от задуманного автором способа использования модуля, но я, видимо, что-то не допонял или не смог когда-то разобраться. Поэтому применяю несколько другой подход.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, «железный» выключатель без фиксации (кнопка) на стене, лампочка на потолке.
Допустим, адрес Меги в сети 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» запишемв «turnOff» запишемКод: Выделить всё
file_get_contents("http://192.168.0.14/sec/?cmd=7:1"); setGlobal('Relay_014-07.status', 1);
Метод «switch» можно оставить без изменений (по умолчанию будет выполняться общеклассовый метод с предустановленным кодом)Код: Выделить всё
file_get_contents("http://192.168.0.14/sec/?cmd=7:0"); setGlobal('Relay_014-07.status', 0);
ОДНАКО я все же написал бы туда свой кодКод: Выделить всё
$status=$this->getProperty("status"); if ($status) { $this->callMethod('turnOff'); } else { $this->callMethod('turnOn'); }
3. Создаем объект на сцене типа «Выключатель». В поле «Связанный объект» выставляем «Relay_014-07».Код: Выделить всё
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); }
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».А чтобы этот скрипт запустился после старта Мажордомо, можно записать в «Timer-> onNewMinute»Код: Выделить всё
$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);
Также отмечу, что сам – абсолютный ноль в программировании, о чем мой ник «Chainik» красноречиво свидетельствует.Код: Выделить всё
runScript("proverka ");
И напоследок, хочу поблагодарить автора Мажордомо Сергея за такой замечательный гибкий инструмент, в котором большинство вещей можно сделать большим количеством разнообразных способов. А лучший способ тот – который ты понимаешь