ПОМОГИТЕ кому не сложно ARDUINO датчики

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1754 раза
Контактная информация:

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение skysilver » Чт сен 15, 2016 3:19 pm

nick7zmail писал(а):Просто чтобы использовать массив $params - его в скрипт передать сперва надо. Изначально он пустой...аналогично с методами - при запуске метода, $params туда закинуть сперва надо.
Насчет скриптов (сценариев) правы, а вот насчет методов не совсем. Если метод будет связан со свойством объекта, то при изменении этого свойства любым способом в метод будет автоматически передано три параметра:
$params['PROPERTY'] -- текстовое имя изменяемого свойства
$params['NEW_VALUE'] -- присваиваемое значение
$params['OLD_VALUE'] -- предыдущее значение
Вот с ними уже и можно работать в методе. Параметр status при этом, конечно, не передается. Да и Sergey2055 не указал, что он все-таки вызывает - скрипт, метод или связанный метод. ))
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение nick7zmail » Чт сен 15, 2016 3:31 pm

Точно)) не всегда пустой. Просто ни разу этим не пользовался)) не пригождалось как то, вот и запамятовал.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение Sergey2055 » Пн сен 19, 2016 7:56 am

Всем привет. Раз продолжаем беседу то проблема была вот в чем, конечно она для меня пока и осталась, просто я ее решил по другому. При изменении свойсва Status конкретного объекта, хотел реализовать изменение свойства statustext, для чего я прописал в метод именно этого объекта скрипт как было в статье здесь на сайте вот он:

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

if ((int)$params['status']==0) {
 say("Внимание! Открывается въезд в  гараж.",5);
} else {
 say("Гараж закрыт.",5);
}

if ($params['status']) {
 $this->setProperty('statusText','закрыт');
} else {
 $this->setProperty('statusText','открыт');
}
 
но почему то у меня ничего не меняется и не происходит. Точнее меняется свойство status text конкретного объекта если я меняю состояние status конкретного объекта ну скажем таким способом:

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

http://АДРЕС_СЕРВЕРА/objects/?object=sensorGarage&op=m&m=statusChanged&status=0
 

А вот если status меняется каким либо другим способом ну как например мне помог решить nick7zmail то свойство status text уже не меняется. Я так понимаю потому что при запросе с пустой страницы указывается каким методом меняется поле status, а в методе уже прописан скрипт, а если status менять другим способом то скрипт метода уже не отрабатывается. Я так понимаю? Получается надо вызвать метод где уже находится тот самый скрипт?
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение nick7zmail » Пн сен 19, 2016 8:16 am

Мне кажется метод запускается...просто при изменении другим способом - в массив $params нифига не попадает, и получается $params['status'] всегда равен 0. Я еще раз повторюсь (вроде в предыдущих сообщениях писал уже вариант решения):
вместо

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

if ((int)$params['status']==0) 
используйте

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

if (gg('garage.status')==0)//вместо garage - ваш объект   
либо

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

if ($this->GetProperty('status')==0)//должно работать для всего класса   
второй случай сработает для класса - если ваш код написан в классовом методе, и так же будет доступен для других объектов в классе (к примеру если есть помимо garage к примеру door, и у него тоже есть status равное 1/0 - то код так же будет выполняться и при изменении door.status...соответственно все setGlobal(); надо заменить на $this->SetProperty('тут только свойсво, без объекта'); (собственно как у вас сейчас и сделано).
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение Sergey2055 » Пн сен 19, 2016 10:58 am

Я это уже пробовал не прокатывает почему то.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение nick7zmail » Пн сен 19, 2016 11:11 am

Sergey2055 писал(а):Я это уже пробовал не прокатывает почему то.
Давайте снова по-порядку.
Если не прокатывает то что я указал - то скорее всего у вас свойство вообще не связанно с методом. Первое что надо сделать - пойти в свойства !Класса! (не объекта, именно класса). Найдите мои скрины, последний скрин - вверху строчка Основное-Свойства-методы-Объекты - вот это как раз для класса. Туда где зеленая стрелочка - для конкретного объекта. Нам в верхней строке свойства нужны. Заходим туда, смотрим...если пусто - создаёте свойство status, указываете выполнить при изменении - выбираете ваш метод. Если уже есть свойство статус - нажимаете редактировать - выставляете "Выполнить при изменении" - ваш метод.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение Sergey2055 » Пн сен 19, 2016 4:21 pm

Попробовал разные вариации. Вообще реакции никакой. Примерный смысл то понятен ну нет реакции. Может у меня глюк какой или я не до конца что то делаю буду разбираться. Вопрос такого плана к знатокам: как обычно строится система умного дома в общении с датчиками и выключателями, т.е. если это выключатель заводится обратная связь или нет и с какой периодичностью обычно опрашиваются датчики. Я могу конечно сделать как мне хочется но как лучше, мож по опыту как кто скажет.
Просто немного подумываю большую часть функций выкинуть из ардуины сервера и прикрутить ардуину c NRF24L01 напрямую к majordomo а скриптами выполнить всю обработку команд.
Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение Sergey2055 » Пн сен 19, 2016 10:10 pm

И еще хотел спросить попутно. nick7zmail - мне помог реализовать запрос и вытягивание данных одним пакетом. За что и спасибо. оч круто вышло. Но вот есть проблемка: сервер на ардуине счас немного перегружен постоянными запросами. Хочу немного его переделать. Хочу разделить на другую дуину. Одна будет отвечать чисто за работу с датчиками. Просто их опрашивать и кидать данные в Majordomo, а другая будет отвечать только за исполнительные устройства реле, выключатель итд. Но возник такой вопрос данные с датчиков в Mjdomo как все таки лучше слать, чтоб меньше перегружать Mjdomo, вытягивать их с дуины скажем каждые 5-10 сек или чтобы дуина сама их отправляла обычным get запросом тем самым изменяя свойство конкретного объекта. Или сильной разницы не будет.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение serghei » Пн сен 19, 2016 10:22 pm

А что за сервер на ардуине ? Если это АМС , то ардуина каждые 20 секунд отдает значения мощностей , а МД просто хранит их историю и строит графики. Температуры можно отдавать гораздо реже. А управлять реле может и сама ардуина и МД отдавать только статус ON-OFF. Можно и управлять релюшками из МД , но ведь это случается редко.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение Sergey2055 » Вт сен 20, 2016 7:50 am

Добрый день. Сервер на дуине самодельный. Основная его роль связать всю сеть беспроводных устройств построенных на базе nrf24l01 во едино. Управление релюшками случается редко, но статутс в каком состоянии находится устройство надо передавать постоянно в majordomo. В идеале конечно произошло событие, статутс передали и все. Но из за того что пакеты в эфире могут теряться приходится городить сложную сеть с подтверждением доставки либо постоянным опросом в каком состоянии устройство. Хоть и производитель на радиомодули гарантирует определенные характеристики в идеале все гораздо хуже и из за загруженности эфира 2,4 ГГц и из за неоднородности материала и стен и перекрытий итд.
Ответить