Страница 105 из 141

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

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

Путь у нас именно таким объектом будет «Lamp_01». При этом объект «Lamp_02» будет отрабатывать только короткие нажатия.
Сразу покажу настройку портов, на примере одного из входов (контроллер MegaD-2561, прошивка: 4.13b8).
Настройка входа Меги
Настройка входа Меги
Настройка входа в интерфейсе контроллера.png (7.6 КБ) 5110 просмотров
Галка напротив поля «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» на вкладке «Данные».
Настройка в модуле &quot;MegaD&quot;
Настройка в модуле "MegaD"
Настройка в модуле MegaD на вкладке Данные.png (51.32 КБ) 5110 просмотров


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

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

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

При этом статусы объектов изменяются одновременно с переключением выходов.
Отдельную периодическую проверку текущих статусов на случай выполнения контроллером действий по умолчанию, разумеется, тоже проводить будет не лишним. Только делать это уже можно не так часто, допустим, 1 раз в 15 минут.

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

Добавлено: Вт дек 04, 2018 3:16 pm
Nail
Никак не прикручу к МД. с чего начать, с объекта? и куда вставить код?

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

Добавлено: Вт дек 04, 2018 3:45 pm
Chainik
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" будут записываться новые значения давления, температуры и влажности.

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

Добавлено: Ср дек 05, 2018 7:18 pm
Nail
"И вот в который раз "старик забрасывал невод"..."))) Учусь.с нуля трудновато.

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

Добавлено: Ср дек 05, 2018 9:12 pm
Nail
Осталось дело за малым), Пункт 6 ,где найти «onNewMinute» в каком окне?),где указаны строки «$m=date('i',time());»)

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

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

Ну и по ведению, как говорится. На вкус и цвет все фломастеры разные, но представляется, что чтобы процитировать собеседника на форуме, технически проще использовать инструментарий форума (кнопка "кавычки" у каждого поста), чем вставлять картинки. ИМХО.

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

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

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

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

Если значения в остальные свойства от датчика приходят, предполагаю, что у вас датчик BMP280 (а не BME280), а у него нет функции измерения влажности.

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

Добавлено: Чт дек 06, 2018 10:05 am
Nail
Вроде настроил , наверно что то так .

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

Добавлено: Сб дек 22, 2018 6:48 pm
seregaural
Не получается прикрутить датчики температуры ds18b20, способом описанным здесь на 104 странице. Не хватает знаний по видимому. кто сможет помочь ?