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

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

Модератор: immortal

majkl84
Сообщения: 11
Зарегистрирован: Пт июн 30, 2017 9:11 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Модуль "MegaD"

Сообщение majkl84 » Вт июл 04, 2017 9:30 pm

Вроде все получилось сделал сценарий
СпойлерПоказать
//Отображение влажности (HTU21D/Si7021)
$hum = file_get_contents("http://10.0.6.65/sec/?pt=31&scl=30&i2c_dev=htu21d"); sg('HTU21D.Hum',$hum);
//Отображение температуры (HTU21D)
$temp = file_get_contents("http://10.0.6.65/sec/?pt=31&scl=30&i2c_ ... &i2c_par=1"); sg('HTU21D.Temp',$temp);

//Отображение атмосферного давления (BMP280/BME280)
$pres = file_get_contents("http://10.0.6.65/sec/?pt=31&scl=30&i2c_dev=bmx280"); sg('BME280.pres',$pres);
//Отображение температуры (BMP280/BME280)
$temp = file_get_contents("http://10.0.6.65/sec/?pt=31&scl=30&i2c_ ... &i2c_par=1"); sg('BME280.temp',$temp);
//Отображение влажности (BME280)
$hum = file_get_contents("http://10.0.6.65/sec/?pt=31&scl=30&i2c_ ... &i2c_par=2"); sg('BME280.hum',$hum);
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

Re: Модуль "MegaD"

Сообщение Chainik » Вт июл 04, 2017 9:38 pm

majkl84 писал(а):Вроде все получилось сделал сценарий
СпойлерПоказать
//Отображение влажности (HTU21D/Si7021)
$hum = file_get_contents("http://10.0.6.65/sec/?pt=31&scl=30&i2c_dev=htu21d"); sg('HTU21D.Hum',$hum);
//Отображение температуры (HTU21D)
$temp = file_get_contents("http://10.0.6.65/sec/?pt=31&scl=30&i2c_ ... &i2c_par=1"); sg('HTU21D.Temp',$temp);

//Отображение атмосферного давления (BMP280/BME280)
$pres = file_get_contents("http://10.0.6.65/sec/?pt=31&scl=30&i2c_dev=bmx280"); sg('BME280.pres',$pres);
//Отображение температуры (BMP280/BME280)
$temp = file_get_contents("http://10.0.6.65/sec/?pt=31&scl=30&i2c_ ... &i2c_par=1"); sg('BME280.temp',$temp);
//Отображение влажности (BME280)
$hum = file_get_contents("http://10.0.6.65/sec/?pt=31&scl=30&i2c_ ... &i2c_par=2"); sg('BME280.hum',$hum);
Теперь осталось использовать это в информерах на сцене, в меню, при построении графиков и т.д.
majkl84
Сообщения: 11
Зарегистрирован: Пт июн 30, 2017 9:11 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Модуль "MegaD"

Сообщение majkl84 » Вт июл 04, 2017 9:43 pm

Chainik писал(а):
majkl84 писал(а):Вроде все получилось сделал сценарий
СпойлерПоказать
//Отображение влажности (HTU21D/Si7021)
$hum = file_get_contents("http://10.0.6.65/sec/?pt=31&scl=30&i2c_dev=htu21d"); sg('HTU21D.Hum',$hum);
//Отображение температуры (HTU21D)
$temp = file_get_contents("http://10.0.6.65/sec/?pt=31&scl=30&i2c_ ... &i2c_par=1"); sg('HTU21D.Temp',$temp);

//Отображение атмосферного давления (BMP280/BME280)
$pres = file_get_contents("http://10.0.6.65/sec/?pt=31&scl=30&i2c_dev=bmx280"); sg('BME280.pres',$pres);
//Отображение температуры (BMP280/BME280)
$temp = file_get_contents("http://10.0.6.65/sec/?pt=31&scl=30&i2c_ ... &i2c_par=1"); sg('BME280.temp',$temp);
//Отображение влажности (BME280)
$hum = file_get_contents("http://10.0.6.65/sec/?pt=31&scl=30&i2c_ ... &i2c_par=2"); sg('BME280.hum',$hum);
Теперь осталось в информерах на сцене, в меню, при построении графиков и т.д.
В меню сделал теперь надо чтоб данный сценарий периодически выполнялся смотрю в сторону cron
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

Re: Модуль "MegaD"

Сообщение Chainik » Вт июл 04, 2017 9:49 pm

Можно и через крон.
А можно и в этом же скрипте организовать. Для этого допишите в конце сценария код, чтобы он перезапускал сам себя

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

setTimeOut('myTimer_opros','runScript("opros");',60*5);
В onNewMinute допишите

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

if ($m%5 == 0) {runScript("opros");} 
где "opros" - имя сценария (у вас, вероятно, будет свое).
В упомянутой статье на ab-log об этом написано.
Последний раз редактировалось Chainik Чт июл 06, 2017 8:39 pm, всего редактировалось 1 раз.
ferenir
Сообщения: 18
Зарегистрирован: Сб июн 03, 2017 4:57 am
Откуда: Красноярск
Благодарил (а): 9 раз
Поблагодарили: 1 раз

Re: Модуль "MegaD"

Сообщение ferenir » Ср июл 05, 2017 3:14 am

koshnv писал(а): Я правильно понял:
1) Создаю сколько надо объектов tempSensor в дефолтом классе
2) Скрипт опроса шины и разбора строки ответа из методов объекта переношу в сценарий и вешаю в крон
3) Скрипт реакций на пороги показаний то же в сценарий и в крон.
1. Лучше свойств. Зачем плодить сущности? %)
2. Можно и в крон, у меня опрос раз в час через onNewHour
3. Вызов реакции на показания может быть реализован в том же скрипте, что и опрос датчиков. Т.е. сделали сценарий на превышение температуры и вызываете его сразу после опроса, при достижении порога.
In vino veritas...
_________________
http://connect.smartliving.ru/profile/1533
jeyka
Сообщения: 1
Зарегистрирован: Чт июл 06, 2017 5:09 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Модуль "MegaD"

Сообщение jeyka » Чт июл 06, 2017 5:25 pm

Постигла и меня эта учесть с датчиками находящимися на одной шине MegaD 2561
Написал сценарий , но заметил одну особенность, что иногда данные не приходят, Дело в том что иногда по запросу выдается запись busy и данные не записываются.
Написал такой код может его можно оптимизировать ?

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

$V=file_get_contents("http://192.168.0.14/sec/?pt=31&cmd=list");
$B = substr($V,0,4);
$T = substr($V,13,5);
if ($B == 'busy') { 
runScript("proverka");
} else {
setGlobal('Livingroom.Temperature',$T);
}
И еще один вопрос .
Если добавляю в onNewMinute Код: runScript("proverka"); то данные считываются каждую минуту, даже если в сценарии "proverka" написать setTimeOut('myTimer_proverka','runScript("proverka");',60*15);
Я пока вышел из положения следующим кодом в onNewMinute

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

if ($m%15 == 0) {runScript("proverka");} 
Правильно ли это ?
Для датчиков пока не создавал отдельный свойств, использую текущие.
За это сообщение автора jeyka поблагодарил:
Chainik (Чт июл 06, 2017 8:03 pm)
Рейтинг: 1.16%
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

Re: Модуль "MegaD"

Сообщение Chainik » Чт июл 06, 2017 8:03 pm

jeyka писал(а):Постигла и меня эта учесть с датчиками находящимися на одной шине MegaD 2561
Написал сценарий , но заметил одну особенность, что иногда данные не приходят, Дело в том что иногда по запросу выдается запись busy и данные не записываются.
Написал такой код может его можно оптимизировать ?

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

$V=file_get_contents("http://192.168.0.14/sec/?pt=31&cmd=list");
$B = substr($V,0,4);
$T = substr($V,13,5);
if ($B == 'busy') { 
runScript("proverka");
} else {
setGlobal('Livingroom.Temperature',$T);
}
С моей дилетанской точки зрения ваш код логичный, понятный и оптимизация тут вряд ли нужна. В всяком случае я не знаю (пока) как это можно сделать.
Может быть, поскольку 1-wire - шина медленная, я бы попробовал добавить перед runScript("proverka"); паузу, например, 0,1 секунду

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

usleep(100000); 
jeyka писал(а):И еще один вопрос .
Если добавляю в onNewMinute Код: runScript("proverka"); то данные считываются каждую минуту, даже если в сценарии "proverka" написать setTimeOut('myTimer_proverka','runScript("proverka");',60*15);
Я пока вышел из положения следующим кодом в onNewMinute

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

if ($m%15 == 0) {runScript("proverka");} 
Правильно ли это ?
Для датчиков пока не создавал отдельный свойств, использую текущие.
Похоже, вы правы. Я, когда писал код, ориентировался на свой же аналог, в котором таймер был по продолжительности менее минуты. А ведь в случае, когда он более минуты, вся картина меняется. Поправлю код в своих предыдущих постах, чтобы других не дезориентировать. А вам спасибо за бдительность!
Jeugenius
Сообщения: 18
Зарегистрирован: Пн мар 27, 2017 6:39 pm
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Модуль "MegaD"

Сообщение Jeugenius » Пт июл 07, 2017 3:01 pm

Так ничего и не понял! Привязан модуль MegaD-2561 (в 30 порту DS18B20). Создан объект "TempTP1" в классе "TemperatureSensors". В сцене создан элемент "ТП1" типа информер с привязанным объектом "TempTP1" и свойством "Value". Это все ради теплых полов. Ну почему, блин в сцене, на этом элементе температура не меняется динамически (что бы видно было что она растет при включении теплого пола). Меняется она, только когда включаешь или выключаешь теплый пол (в это время с Меги получают обновленные значения и другие объекты) Будто опрос Меги происходит только при ручной манипуляции. В меге поставил "srvLoop" - без толку! Что делать?
За это сообщение автора Jeugenius поблагодарил:
wildsm (Сб авг 12, 2017 6:21 pm)
Рейтинг: 1.16%
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

Re: Модуль "MegaD"

Сообщение Chainik » Пт июл 07, 2017 4:47 pm

Давайте попробуем по порядку.
1. В строке браузера наберите команду
http://192.168.0.14/sec/?pt=30&cmd=get
IP-адрес Меги и пароль, разумеется, ваши.
Если в ответ на страничке появляется температура с датчика - отлично, значит все работает "штатно".

2. Создаем скрипт (сценарий), который назовем, к примеру, "opros" с кодом

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

$T=file_get_contents("http://192.168.0.14/sec/?pt=30&cmd=get");
$T = substr($T,5,5);
sg('TempTP1.Value',$T);

setTimeOut('myTimer_opros','runScript("opros");',60*5); 
Запускаем сценарий и смотрим на значение объекта "TempTP1.Value", которое должно перезаписываться каждые 5 минут. Это можно отследить в X-Rey (даже если температура не менялась).

3. Если информер связан с о свойством "TempTP1.Value", значит изменения должны отобразиться и в этом информере на сцене.

4. Чтобы скрипт запустился после старта Мажордомо, в onNewMinute допишите код

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

if ($m%5 == 0) {runScript("opros");} 

Подозреваю, что вы пользуетесь модулем "Простые устройства". Сам им не пользуюсь, поэтому в этом случае ничего подсказать не смогу, как правильно нужно там все настроить.
Jeugenius
Сообщения: 18
Зарегистрирован: Пн мар 27, 2017 6:39 pm
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Модуль "MegaD"

Сообщение Jeugenius » Пт июл 07, 2017 5:30 pm

Chainik писал(а):Давайте попробуем по порядку.
1. В строке браузера наберите команду
http://192.168.0.14/sec/?pt=30&cmd=get
IP-адрес Меги и пароль, разумеется, ваши.
Если в ответ на страничке появляется температура с датчика - отлично, значит все работает "штатно".

2. Создаем скрипт (сценарий), который назовем, к примеру, "opros" с кодом

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

$T=file_get_contents("http://192.168.0.14/sec/?pt=30&cmd=get");
$T = substr($T,5,5);
sg('TempTP1.Value',$T);

setTimeOut('myTimer_opros','runScript("opros");',60*5); 
Запускаем сценарий и смотрим на значение объекта "TempTP1.Value", которое должно перезаписываться каждые 5 минут. Это можно отследить в X-Rey (даже если температура не менялась).

3. Если информер связан с о свойством "TempTP1.Value", значит изменения должны отобразиться и в этом информере на сцене.

4. Чтобы скрипт запустился после старта Мажордомо, в onNewMinute допишите код

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

if ($m%5 == 0) {runScript("opros");} 

Подозреваю, что вы пользуетесь модулем "Простые устройства". Сам им не пользуюсь, поэтому в этом случае ничего подсказать не смогу, как правильно нужно там все настроить.
По адресу, в Мегу на порт захожу и вижу значение - норм. Создал сценарий, запустил, в X-Ray видно что он запустился всего один раз и причем не прислал никакого значения. Теперь ни в свойстве "Temp.TP1" ни в элементе на сцене нет значения(((
А эт я ошибся в сценарии с адресом Меги. Исправил но до сих пор нет циклического опроса(((
Ответить