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

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

Модератор: immortal

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" ни в элементе на сцене нет значения(((
А эт я ошибся в сценарии с адресом Меги. Исправил но до сих пор нет циклического опроса(((
ferenir
Сообщения: 18
Зарегистрирован: Сб июн 03, 2017 4:57 am
Откуда: Красноярск
Благодарил (а): 9 раз
Поблагодарили: 1 раз

Re: Модуль "MegaD"

Сообщение ferenir » Пт июл 07, 2017 7:19 pm

Jeugenius писал(а):Так ничего и не понял! Привязан модуль MegaD-2561 (в 30 порту DS18B20). Создан объект "TempTP1" в классе "TemperatureSensors". В сцене создан элемент "ТП1" типа информер с привязанным объектом "TempTP1" и свойством "Value". Это все ради теплых полов. Ну почему, блин в сцене, на этом элементе температура не меняется динамически (что бы видно было что она растет при включении теплого пола). Меняется она, только когда включаешь или выключаешь теплый пол (в это время с Меги получают обновленные значения и другие объекты) Будто опрос Меги происходит только при ручной манипуляции. В меге поставил "srvLoop" - без толку! Что делать?
А свойство Value у объекта TempTP1 есть? srvLoop тоже не очень работает, на ab-log про это много написано. Чтобы на сцене что-то менялось динамически, оно в принципе должно меняться динамически, оно меняется?
In vino veritas...
_________________
http://connect.smartliving.ru/profile/1533
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

Re: Модуль "MegaD"

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

Jeugenius писал(а):По адресу, в Мегу на порт захожу и вижу значение - норм. Создал сценарий, запустил, в X-Ray видно что он запустился всего один раз и причем не прислал никакого значения. Теперь ни в свойстве "Temp.TP1" ни в элементе на сцене нет значения(((
Jeugenius, ну вы уж определитесь с наименованием Объект.Свойства, либо это "TempTP1.Value", либо "Temp.TP1".
Компьютер - штука "железная" и тут нельзя "путаться в показаниях"...
Jeugenius
Сообщения: 18
Зарегистрирован: Пн мар 27, 2017 6:39 pm
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Модуль "MegaD"

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

Chainik писал(а):
Jeugenius писал(а):По адресу, в Мегу на порт захожу и вижу значение - норм. Создал сценарий, запустил, в X-Ray видно что он запустился всего один раз и причем не прислал никакого значения. Теперь ни в свойстве "Temp.TP1" ни в элементе на сцене нет значения(((
Jeugenius, ну вы уж определитесь с наименованием Объект.Свойства, либо это "TempTP1.Value", либо "Temp.TP1".
Компьютер - штука "железная" и тут нельзя "путаться в показаниях"...
Да да неправильно выразился. Есть объект Temp.TP1 у него свойство TempTP1.Value. В свойстве значение тоже не меняется.

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

Re: Модуль "MegaD"

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

Я правильно понимаю, что Объект.Свойство именуется как "Temp.TP1.TempTP1.Value"?
Если я не прав, напишите, как ваше Объект.Свойство точно поименовано.
Ответить