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

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

Модератор: immortal

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

Re: Модуль "MegaD"

Сообщение Chainik » Вт сен 18, 2018 3:50 pm

С "Простыми устройствами" не разбирался (говорят, не такие уж они и простые), поэтому тут подсказать не могу.
Что касается вопроса, куда "запихивать" мой php-код... Вам надо немножко "поразбираться" в объектной модели Мажордомо (классы, объекты, методы, свойства и т.д.).

Делать с кодом примерно следующее (это не догма, просто как вариант).
1. Создаете в объектах новый класс. Называете его, к примеру "Sensors".
2. В классе создаете Метод, например, "GetHumidity". И создаете свойство, например, "Нumidity".
3. Создаете в классе Sensors новый объект, например, "HumSensor01". Добавляете в метод GetHumidity ДАННОГО ОБЪЕКТА (а не класса) код:

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

$Hum = file_get_contents("http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=bmx280&i2c_par=2");
$Hum = round($Hum, 1);
$this->setProperty('Нumidity',$Hum);
Для теста, чтобы убедиться, что все в коде написано правильно, запускаете вручную Объект.Метод "HumSensor01.GetHumidity". После исполнения, в свойстве "Нumidity" объекта "HumSensor01" должно появиться текущее значение влажности с датчика.

4. В «onNewMinute» (ниже строки «$m=date('i',time());») пишите:

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

if ($m%5 == 0) {callMethod('HumSensor01.GetHumidity');}
Если надо опрашивать раз в минуту, тогда просто пишите:

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

callMethod('HumSensor01.GetHumidity');
5. Если надо строить графики, у свойства класса "Нumidity" необходимо включить историю.
За это сообщение автора Chainik поблагодарили (всего 2):
Unripe (Вт сен 18, 2018 4:26 pm) • semkyskov (Вт сен 18, 2018 11:39 pm)
Рейтинг: 2.33%
Аватара пользователя
Nail
Сообщения: 373
Зарегистрирован: Пн мар 05, 2018 7:09 am
Откуда: Самара
Благодарил (а): 174 раза
Поблагодарили: 28 раз

Re: Модуль "MegaD"

Сообщение Nail » Ср окт 31, 2018 1:57 pm

Тут собрался попробовать собрать мини Систему (хотя в этом "ноль") контроля отоплением на Мега 2561 (https://www.ab-log.ru/smart-house/ethernet/megad-2561)
КАК и куда можно подключить датчик NTC 10К ? (https://ru.aliexpress.com/item/2x-NTC-1 ... 33edHwHylt)
Подскажите пжл.(так как их удобно по резьбе вкрутить в бак с тенами(для точности показаний) мне так кажется.
Mini AMD A6 1450 Quad-core.Ubuntu Server 18.04 (64-bit). MegaD. Zigbee2mqtt+SLS ZigBee Gateway. Broadlink.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Модуль "MegaD"

Сообщение skysilver » Ср окт 31, 2018 2:26 pm

Nail писал(а):
Ср окт 31, 2018 1:57 pm
КАК и куда можно подключить датчик NTC 10К ?
Имхо, на на форуме аб-лог в части железа быстрее получишь ответ.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

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

Сообщение serghei » Ср окт 31, 2018 4:38 pm

Хмм.... Похоже это аналоговый датчик и на сайте продовца есть калибровочные таблицы. Можно в реальном времени мониторить температуру.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Аватара пользователя
Nail
Сообщения: 373
Зарегистрирован: Пн мар 05, 2018 7:09 am
Откуда: Самара
Благодарил (а): 174 раза
Поблагодарили: 28 раз

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

Сообщение Nail » Вс ноя 18, 2018 10:16 pm

Знает кто как реализовать в МД , сразу двух датчиков на одном порту Меги 2561?
Вложения
Screenshot_2.jpg
Screenshot_2.jpg (5.23 КБ) 4244 просмотра
Screenshot_1.jpg
Screenshot_1.jpg (6.04 КБ) 4244 просмотра
Mini AMD A6 1450 Quad-core.Ubuntu Server 18.04 (64-bit). MegaD. Zigbee2mqtt+SLS ZigBee Gateway. Broadlink.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Вс ноя 18, 2018 10:41 pm

Nail писал(а):
Вс ноя 18, 2018 10:16 pm
Знает кто как реализовать в МД , сразу двух датчиков на одном порту Меги 2561?
Можно попробовать строковые функции:

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

//Получаем список значений (адрес, пароль, порт, разумеется, ваши)
$Val = file_get_contents("http://192.168.0.14/sec/?pt=32&cmd=list");
$T1 = substr($Val,"eedb39231601:",5);
$T2 = substr($Val,"ffdb02541604:",5);
sg('Ваш_объект.Ваше_свойство_для_Т1', $T1);
sg('Ваш_объект.Ваше_свойство_для_Т2', $T2);
За это сообщение автора Chainik поблагодарил:
Nail (Пн ноя 19, 2018 3:10 pm)
Рейтинг: 1.16%
Аватара пользователя
Nail
Сообщения: 373
Зарегистрирован: Пн мар 05, 2018 7:09 am
Откуда: Самара
Благодарил (а): 174 раза
Поблагодарили: 28 раз

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

Сообщение Nail » Вс ноя 18, 2018 10:49 pm

Val = file_get_contents("http://192.168.0.14/sec/?pt=32&cmd=list");
Порт наверно мне указать pt =31?
я в РНР новичок, куда вставлять код?
Mini AMD A6 1450 Quad-core.Ubuntu Server 18.04 (64-bit). MegaD. Zigbee2mqtt+SLS ZigBee Gateway. Broadlink.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Вс ноя 18, 2018 11:13 pm

Nail писал(а):
Вс ноя 18, 2018 10:49 pm
Val = file_get_contents("http://192.168.0.14/sec/?pt=32&cmd=list");
Порт наверно мне указать pt =31?
я в РНР новичок, куда вставлять код?
Тут, скорее, знание основ Мажордомо. Конечно, указываете тот порт, к которому подключена шина с датчиками.
В общем, в админке
1. В объектах создаем новый класс. Назовем его, к примеру, «TempSensors».
2. Добавим в созданный класс свойства. Допустим, назовем свойство для значения температуры "Value", а для уникального адреса датчика -- "SensorAddress".
3. Добавим в класс метод. Назовем его, к примеру, "GetValue". И запишем в него код метода:

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

//Получаем список значений (адрес, пароль, порт, разумеется, ваши)
$Val = file_get_contents("http://192.168.0.14/sec/?pt=31&cmd=list");
//Если шина в момент запроса значений занята их конвертацией, то дополнительно имеет смысл перезапустить метод, выждав небольшую паузу
if ($Val == "Busy") {
setTimeOut($this->object_title,'callMethod($this->object_title.".GetValue");',1);
return"";
}

$Address = $this->getProperty('SensorAddress');
$T = substr($Val,$Address,5);
$this->setProperty('Value',$T);
4. Добавим в класс объекты (отдельный на каждый датчик температуры). Назовем их, к примеру, «TempSensors_01», «TempSensors_02» и т.д.
Теперь для каждого объекта заполним свойство "SensorAddress". Т.е. для «TempSensors_01» -- "eedb39231601:", а для «TempSensors_02» -- "ffdb02541604:".

Ну и пробуем запускать методы внутри объектов вручную. Если я не накосячил с кодом, после исполнения в свойствах объектов "Value" должно появляться значение температуры.

Чтобы запускать методы автоматически с определенной периодичностью, можете сделать по аналогии с тем вариантом, который я описал на предыдущей странице.
Последний раз редактировалось Chainik Пн ноя 19, 2018 12:39 am, всего редактировалось 4 раза.
За это сообщение автора Chainik поблагодарил:
Nail (Вс ноя 18, 2018 11:35 pm)
Рейтинг: 1.16%
Аватара пользователя
Nail
Сообщения: 373
Зарегистрирован: Пн мар 05, 2018 7:09 am
Откуда: Самара
Благодарил (а): 174 раза
Поблагодарили: 28 раз

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

Сообщение Nail » Вс ноя 18, 2018 11:35 pm

СПС. Попробую отпишусь.
Mini AMD A6 1450 Quad-core.Ubuntu Server 18.04 (64-bit). MegaD. Zigbee2mqtt+SLS ZigBee Gateway. Broadlink.
beavisgood
Сообщения: 51
Зарегистрирован: Пт дек 18, 2015 5:42 pm
Благодарил (а): 20 раз
Поблагодарили: 10 раз

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

Сообщение beavisgood » Вт ноя 20, 2018 7:26 am

Привет, у меня вопрос по подключению, кнопки и реле, с железными кнопками возникли проблемы.
Кнопка P0, Реле Р7, классика.

Попытка 1: МОДУЛЬ MegaD:
Сначала пробовал связать эти два объекта через Модуль MegaD, на классических объектах Relay, (status, turnon, turnoff, switch)
из софта реле управляется отлично, но как в дело вступает железная кнопка, начинаются мигания, включения, отключения, реле живет своей жизнью.
Так то все красиво выглядит и логично, настроили модуль, кнопку нажали, мега отправила это событие к мажору.
Мажор принял решение, и выдал команду меге, включи реле, мега приняла эту команду, поменяла состояние порта.
Но к сожалению на связке модуль MegaD этот вариант не работает, Почему? мне не понятно до конца.

Попытка 2: ПРОСТЫЕ УСТРОЙСТВА + МОДУЛЬ MegaD
Пробовал этот вариант, задумка класс, быстро красиво, все понятно, но
не работает примерно так же как и выше описал, реле живет своей жизнью.
У меня есть подозрения, что причина в том что к одному объекту Relay, привязывается два объекта P0 и P7, которые связанны между собой.
Один включает, другой выключает, получается Лебедь, Рак, Щука, каждый меняет статус, в итоге глюки.

Попытка 3: Понял что на хромой кобыле к MegaD не подъедешь
Перечитал все MegaD ветки форума, а это ого го сколько....
В итоге что сделал:
Порт Р0 настроил в режиме Р, действие по умолчанию (ecmd: 7:2)
Создал класс и объекты по инструкции
https://ab-log.ru/forum/viewtopic.php?f=1&t=1328 (в конце поста, после подзаголовка "ДОПОЛНЕНИЕ/УТОЧНЕНИЕ").
Добавил в megad.class.php $params['m']=$m;,
вопрос почему эту строчку не добавляют в стандартную комплектацию модуля? обновления уже были, добавить же не сложно?

В метод switch добавил такой код:

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

if($_GET['m'] == 2) { // прилетело сообщение о длинном нажатии
  say("длинное нажатие",2);
  return "";
}

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); }
  
Этот код отлавливает "второе пришествие m == 2 и выходит из метода ничего не делая.
Теперь заработало УРА. Мужики спасибо большое за эту работу.
Вопрос как теперь правильно обработать длинное нажатие? через связку объект:
this->getProperty('ipAddress')."/".$this->getPropert......... пример кода есть?

при условии Р0 настроил в режиме Р, действие по умолчанию (ecmd: 7:2), я это сделал специально, т.к. хочу сохранить автономность MegaD, когда сервер упал
Linux DietPi, OrangePi-PC, MyMegaD328
Connect: http://connect.smartliving.ru/profile/689
Ответить