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

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

Модератор: immortal

Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

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

Сообщение Chainik » Вс ноя 25, 2018 3:45 pm

beavisgood писал(а):
Пт ноя 23, 2018 7:44 pm
Единственное, если я меняю состояние портов на Меге железной кнопкой, это событие не передается на сервер.
Пока я поставил в Модуле MegaD считывать статусы каждые 15 сек,
поэтому в меню, на сценах, и пр. софт элементах отображается с задержкой.
может есть более оптимальное решение?
Поделюсь и я своим вариантом настройки, когда на некоторые клавиши выключателя могут быть «повешены» разные действия при коротком и при длинном нажатии.

Путь у нас именно таким объектом будет «Lamp_01». При этом объект «Lamp_02» будет отрабатывать только короткие нажатия.
Сразу покажу настройку портов, на примере одного из входов (контроллер MegaD-2561, прошивка: 4.13b8).
Настройка входа в интерфейсе контроллера.png
Настройка входа Меги
Настройка входа в интерфейсе контроллера.png (7.6 КБ) 4711 просмотров
Галка напротив поля «Net» говорит о том, что прописанное в нем действие по умолчанию (NetAction) будет выполняться только в том случае, если сервер недоступен.

Теперь рассмотрим настройки в Мажордомо.
1. До запуска Мажордомо проведем модернизацию файла megad.class.php модуля «MegaD», чтобы модуль научился «отлавливать» приходящий от контроллера параметр «m».
Подробнее о том, как это сделать, можно почитать здесь (https://ab-log.ru/forum/viewtopic.php?f ... 309#p28309), в самом конце этого длинного поста после подзаголовка «ДОПОЛНЕНИЕ/УТОЧНЕНИЕ».

2. Выполним базовую настройку по созданию и параметризации объектов, свойств, методов по аналогии с тем, как это описано здесь (https://ab-log.ru/forum/viewtopic.php?f=1&t=1328) в конце длинного первого поста после подзаголовка «ДОПОЛНЕНИЕ».
Правда, у нас будут кое-какие дополнения и изменения, о которых я скажу ниже.

3. Дополним состав свойств в классе новым свойством «clickLong», которое нам будет служить идентификатором того, будет ли использоваться конкретная клавиша выключателя для длинных нажатий (clickLong = «1») или нет (clickLong <> «1»).
Так как решено, что на длинные нажатия будет реагировать объект «Lamp_01», то сразу уставим у него значение свойства «clickLong» = «1».

4. Дополним состав методов в классе новыми методами
«clickShortAction» (в нем будет код для действия при коротком нажатии)
и
«clickLongAction» (в нем будет код для действия при длинном нажатии).

Запишем в КЛАССЕ код метода «clickShortAction» (он будет таким же, какой ранее мы писали в метод «switch»):

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

file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?cmd=".$this->getProperty('Port').":2");
$state = file_get_contents("http://".$this->getProperty('ipAddress')."/".$this->getProperty('Password')."/?pt=".$this->getProperty('Port')."&cmd=get");
if ($state == "ON") {
  $this->setProperty('Status', 1);
} else {
  $this->setProperty('Status', 0); }
Запишем в ОБЪЕКТЕ «Lamp_01» код метода «clickLongAction»:

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

callMethod('Lamp_02.clickShortAction');
Поставим радиоточку для «Вызывать родительский метод:» в положение «Никогда».

5. Запишем в КЛАССЕ код метода «switch»:

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

$ot=$this->object_title;
$clickLong = $this->getProperty('clickLong');
//Если в свойстве "clickLong" не выставлена возможность длинного нажатия (clickLong <> 1), выполняем действие для короткого нажатия сразу
if ($clickLong <> "1") {
//Если пришел параметр "m", например, "m=2", игнорируем
if($_GET['m'] <> "") {
return"";}
callMethod($ot.".clickShortAction");

} else {
//Если для входа предусмотрена возможность использования длинного нажатия ("clickLong" = 1), выполняем нижеследующий кусок кода
//Если пришло длинное нажатие, сразу выполняем для него действие
if($_GET['m'] == 2) {
clearTimeOut($ot);
callMethod($ot.".clickLongAction");
return"";
}
//Выполним действие для короткого нажатия, только если в течение 2-х секунд не придет m=2
setTimeOut($ot,"callMethod('".$ot.".clickShortAction');",2);
}
На всякий случай покажу настройку в модуле «MegaD» на вкладке «Данные».
Настройка в модуле MegaD на вкладке Данные.png
Настройка в модуле "MegaD"
Настройка в модуле MegaD на вкладке Данные.png (51.32 КБ) 4711 просмотров


В результате мы имеем следующее.
Если сервер недоступен, выполняется действие по умолчанию (в моем примере -- это переключение входа на другом контроллере (192.168.0.14/sec/?cmd=7:2).

Если клавиша выключателя должна отрабатывать только короткие нажатия (в моем случае это объект «Lamp_02»), действие выполняется мгновенно (в моем примере – это переключение выхода по параметрам, заданным у объекта в свойствах «ipAddress», «Password» и «Port»).

Если клавиша выключателя должна отрабатывать и короткие и длинные нажатия (в моем случае это объект «Lamp_01»), короткие нажатия отрабатываются с 2-секундной задержкой, а длинные -- с задержкой, примерно, в секунду-полторы.

При этом статусы объектов изменяются одновременно с переключением выходов.
Отдельную периодическую проверку текущих статусов на случай выполнения контроллером действий по умолчанию, разумеется, тоже проводить будет не лишним. Только делать это уже можно не так часто, допустим, 1 раз в 15 минут.
За это сообщение автора Chainik поблагодарил:
beavisgood (Пн ноя 26, 2018 6:02 am)
Рейтинг: 1.16%
Аватара пользователя
Nail
Сообщения: 376
Зарегистрирован: Пн мар 05, 2018 7:09 am
Откуда: Самара
Благодарил (а): 174 раза
Поблагодарили: 28 раз

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

Сообщение Nail » Вт дек 04, 2018 3:16 pm

Никак не прикручу к МД. с чего начать, с объекта? и куда вставить код?
Вложения
Screenshot_1.jpg
Screenshot_1.jpg (98.18 КБ) 4504 просмотра
Mini AMD A6 1450 Quad-core.Ubuntu Server 18.04 (64-bit). MegaD. Zigbee2mqtt+SLS DIN Mini. Broadlink.
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

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

Сообщение Chainik » Вт дек 04, 2018 3:45 pm

Nail писал(а):
Вт дек 04, 2018 3:16 pm
Никак не прикручу к МД. с чего начать, с объекта? и куда вставить код?
Ребята... Ну как-то надо все-таки овладевать базовым функционалом системы. И вот в который раз "старик забрасывал невод"...

1. В объектах создаем новый класс. Назовем его, к примеру, «Sensors».
2. Добавим в созданный класс свойства. Допустим, назовем свойство для значения атмосферного давления "Pressure", для температуры -- "Temperature", а для влажности -- "Humidity".
3. Добавим в класс объект, назовем его к примеру, "BME280_01".
4. Добавим в класс метод. Назовем его, к примеру, "GetValue".
5. Запишем в ОБЪЕКТе код метода (т.е. отредактируем код метода ВНУТРИ объекта):

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

$Press = file_get_contents("http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=bmx280");
sg('BME280_01.Pressure',$Press);
$Temp = file_get_contents("http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=bmx280&i2c_par=1");
sg('BME280_01.Temperature',$Temp);
$Hum = file_get_contents("http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=bmx280&i2c_par=2");
sg('BME280_01.Humidity',$Hum);
Ставите радиоточку для «Вызывать родительский метод:» в положение «Никогда».

6. Организовываете периодический запуск метода. Например, можно дописать строчку в «onNewMinute» (ниже строки «$m=date('i',time());»):

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

if ($m%5 == 0) {callMethod('BME280_01.GetValue');}
Каждые 5 минут в соответствующие свойства объекта "BME280_01" будут записываться новые значения давления, температуры и влажности.
За это сообщение автора Chainik поблагодарил:
Nail (Ср дек 05, 2018 9:12 pm)
Рейтинг: 1.16%
Аватара пользователя
Nail
Сообщения: 376
Зарегистрирован: Пн мар 05, 2018 7:09 am
Откуда: Самара
Благодарил (а): 174 раза
Поблагодарили: 28 раз

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

Сообщение Nail » Ср дек 05, 2018 7:18 pm

"И вот в который раз "старик забрасывал невод"..."))) Учусь.с нуля трудновато.
Mini AMD A6 1450 Quad-core.Ubuntu Server 18.04 (64-bit). MegaD. Zigbee2mqtt+SLS DIN Mini. Broadlink.
Аватара пользователя
Nail
Сообщения: 376
Зарегистрирован: Пн мар 05, 2018 7:09 am
Откуда: Самара
Благодарил (а): 174 раза
Поблагодарили: 28 раз

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

Сообщение Nail » Ср дек 05, 2018 9:12 pm

Осталось дело за малым), Пункт 6 ,где найти «onNewMinute» в каком окне?),где указаны строки «$m=date('i',time());»)
Вложения
Screenshot_3.jpg
Screenshot_3.jpg (21.73 КБ) 4456 просмотров
Mini AMD A6 1450 Quad-core.Ubuntu Server 18.04 (64-bit). MegaD. Zigbee2mqtt+SLS DIN Mini. Broadlink.
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

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

Сообщение Chainik » Ср дек 05, 2018 9:35 pm

«onNewMinute» ищите там же в объектах (см.класс "Timer").
Если надумаете строить графики, не забудьте включить у свойств историю (т.е. установить период хранения в днях больше "0").

Ну и по ведению, как говорится. На вкус и цвет все фломастеры разные, но представляется, что чтобы процитировать собеседника на форуме, технически проще использовать инструментарий форума (кнопка "кавычки" у каждого поста), чем вставлять картинки. ИМХО.
За это сообщение автора Chainik поблагодарил:
Nail (Ср дек 05, 2018 11:17 pm)
Рейтинг: 1.16%
Аватара пользователя
Nail
Сообщения: 376
Зарегистрирован: Пн мар 05, 2018 7:09 am
Откуда: Самара
Благодарил (а): 174 раза
Поблагодарили: 28 раз

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

Сообщение Nail » Чт дек 06, 2018 1:31 am

Что не сработал Опрс. В свойствах стоит данные (история на 10ч.) может этого еще нужно сделать?
Вложения
Screenshot_4.jpg
Screenshot_4.jpg (19.8 КБ) 4433 просмотра
Mini AMD A6 1450 Quad-core.Ubuntu Server 18.04 (64-bit). MegaD. Zigbee2mqtt+SLS DIN Mini. Broadlink.
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

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

Сообщение Chainik » Чт дек 06, 2018 9:05 am

Nail писал(а):
Чт дек 06, 2018 1:31 am
Что не сработал Опрс. В свойствах стоит данные (история на 10ч.) может этого еще нужно сделать?
Насколько я понимаю, история устанавливается в днях, т.е. "10ч." не пойдет. Нужно указать только числовое значение, т.е., например, "10". Что будет означать 10 дней хранить историю.

Если значения в остальные свойства от датчика приходят, предполагаю, что у вас датчик BMP280 (а не BME280), а у него нет функции измерения влажности.
За это сообщение автора Chainik поблагодарил:
Nail (Чт дек 06, 2018 10:05 am)
Рейтинг: 1.16%
Аватара пользователя
Nail
Сообщения: 376
Зарегистрирован: Пн мар 05, 2018 7:09 am
Откуда: Самара
Благодарил (а): 174 раза
Поблагодарили: 28 раз

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

Сообщение Nail » Чт дек 06, 2018 10:05 am

Вроде настроил , наверно что то так .
Вложения
Screenshot_5.jpg
Screenshot_5.jpg (71.36 КБ) 4412 просмотров
Mini AMD A6 1450 Quad-core.Ubuntu Server 18.04 (64-bit). MegaD. Zigbee2mqtt+SLS DIN Mini. Broadlink.
seregaural
Сообщения: 24
Зарегистрирован: Чт ноя 29, 2018 6:44 am
Благодарил (а): 3 раза
Поблагодарили: 0

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

Сообщение seregaural » Сб дек 22, 2018 6:48 pm

Не получается прикрутить датчики температуры ds18b20, способом описанным здесь на 104 странице. Не хватает знаний по видимому. кто сможет помочь ?
Ответить