действия после срабатывания датчика движения

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

Модератор: immortal

Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: действия после срабатывания датчика движения

Сообщение Vovix » Вт дек 19, 2017 5:23 pm

Gelezako писал(а):это выход, но в принципе зачем плодить копии времени события с датчиков, если уже есть встроенное свойство Updated Timestamp, если конечно вы их подключили как простые устройства. Попробую реализовать такую проверку.
нет, я не использую Простые устройства!!!
код такой (возможно у вас он есть):

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

$last_register=registeredEventTime('inhouseMovement');
registerEvent('inhouseMovement',$this->name,2);
if (!$last_register || ((time()-$last_register)>3*60*60)) {
    say("Cработал датчик!");
}
в данном примере меня интересует данный датчик снова только через (3*60*60) секунд, т.е. через 3 часа!
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
2007-i
Сообщения: 55
Зарегистрирован: Вс янв 29, 2017 12:52 am
Откуда: Уфа
Благодарил (а): 5 раз
Поблагодарили: 1 раз

Re: действия после срабатывания датчика движения

Сообщение 2007-i » Пн дек 25, 2017 11:04 pm

Не подскажите как реализовать какое то действие по датчику движения (Объект: ESP82660022a64e-> свойство: ESP82660022a64e.gpio4) но с возвращением в исходное состояние. Например сработал датчик движения, посылается get команда на включение светодиодной ленты (pwm=255) но после пропадания движения через допустим 3 секунды возвращает значение pwm в исходное состояние которое было до срабатывания движения, например (pwm=10)?
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: действия после срабатывания датчика движения

Сообщение Vovix » Вт дек 26, 2017 11:56 am

2007-i писал(а):Не подскажите как реализовать какое то действие по датчику движения (Объект: ESP82660022a64e-> свойство: ESP82660022a64e.gpio4) но с возвращением в исходное состояние. Например сработал датчик движения, посылается get команда на включение светодиодной ленты (pwm=255) но после пропадания движения через допустим 3 секунды возвращает значение pwm в исходное состояние которое было до срабатывания движения, например (pwm=10)?
вариантов реализации может быть несколько, например один из (наверно не самый лучший):
1. Создаем метод у объекта ESP82660022a64e, например назовем его ChangeESPgpio4
2. В коде метода пишем реализацию следующего алгоритма:
____1) проверим состояние ESP82660022a64e.gpio4
____2) если есть движение, то отправляем get запрос на включение ленты
____3) даем команду на остановку таймера -

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

clearTimeOut("Название таймера"); 
____4) далее запускаем таймер

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

setTimeOut("Название таймера","ваш get запрос на ВыКЛЮЧЕНИЕ ленты",3); 
3. делаем привязку на запуск этого метода при изменении свойства ESP82660022a64e.gpio4

примерно так!
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
2007-i
Сообщения: 55
Зарегистрирован: Вс янв 29, 2017 12:52 am
Откуда: Уфа
Благодарил (а): 5 раз
Поблагодарили: 1 раз

Re: действия после срабатывания датчика движения

Сообщение 2007-i » Вт дек 26, 2017 7:10 pm

Vovix писал(а):
2007-i писал(а):Не подскажите как реализовать какое то действие по датчику движения (Объект: ESP82660022a64e-> свойство: ESP82660022a64e.gpio4) но с возвращением в исходное состояние. Например сработал датчик движения, посылается get команда на включение светодиодной ленты (pwm=255) но после пропадания движения через допустим 3 секунды возвращает значение pwm в исходное состояние которое было до срабатывания движения, например (pwm=10)?
вариантов реализации может быть несколько, например один из (наверно не самый лучший):
1. Создаем метод у объекта ESP82660022a64e, например назовем его ChangeESPgpio4
2. В коде метода пишем реализацию следующего алгоритма:
____1) проверим состояние ESP82660022a64e.gpio4
____2) если есть движение, то отправляем get запрос на включение ленты
____3) даем команду на остановку таймера -

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

clearTimeOut("Название таймера");
____4) далее запускаем таймер

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

setTimeOut("Название таймера","ваш get запрос на ВыКЛЮЧЕНИЕ ленты",3);
3. делаем привязку на запуск этого метода при изменении свойства ESP82660022a64e.gpio4

примерно так!
Спасибо.
Забыл написать что прошивка от wifi-iot.com и есть возможность считывать состояние портов (в данном случает значение pwm, либо через свойства обьекта либо через get запрос: http://[ip_adr]/pwmprint

Я не совсем силён в программировании, поэтому не знаю как правильно считать состояние pwm и записать его что бы потом отправить это же значение (т.е. ту же яркость ленты). Т.е. в коридоре горит свет на значении pwm=70, проходишь мимо, срабатывает датчик и яркость меняется на pwm=255, потом при отсутствии движения яркость устанавливается снова на pwm=70.
Как то так.
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: действия после срабатывания датчика движения

Сообщение Vovix » Вт дек 26, 2017 8:23 pm

2007-i писал(а):....

Спасибо.
Забыл написать что прошивка от wifi-iot.com и есть возможность считывать состояние портов (в данном случает значение pwm, либо через свойства обьекта либо через get запрос: http://[ip_adr]/pwmprint

Я не совсем силён в программировании, поэтому не знаю как правильно считать состояние pwm и записать его что бы потом отправить это же значение (т.е. ту же яркость ленты). Т.е. в коридоре горит свет на значении pwm=70, проходишь мимо, срабатывает датчик и яркость меняется на pwm=255, потом при отсутствии движения яркость устанавливается снова на pwm=70.
Как то так.
для Спасибо есть кнопочка!!!
А программистом придется стать... раз решили использовать MDM!
по прошивке wifi-iot.com все прописано у них-же, почитайте!!!
За это сообщение автора Vovix поблагодарил:
2007-i (Вт дек 26, 2017 8:31 pm)
Рейтинг: 1.16%
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
2007-i
Сообщения: 55
Зарегистрирован: Вс янв 29, 2017 12:52 am
Откуда: Уфа
Благодарил (а): 5 раз
Поблагодарили: 1 раз

Re: действия после срабатывания датчика движения

Сообщение 2007-i » Вт дек 26, 2017 9:44 pm

Vovix писал(а): А программистом придется стать... раз решили использовать MDM!
по прошивке wifi-iot.com все прописано у них-же, почитайте!!!
Накидал скрипт. Так правильно будет?

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

$value=getGlobal("ESP82660022a64e.pwm0"); // состояние pwm0
if ((getGlobal('ESP82660022a64e.gpio4')) =="1") // если есть движение
{
 getURL('http://192.168.10.165/?pwm0=255', 0);
}
clearTimeOut("Название таймера"); // остановка таймера
setTimeOut("Название таймера",'http://192.168.10.165/?pwm0=$value', 0); // запуск таймера и отправка команды с предыдущим значением pwm   
Если есть ошибки, пожалуйста поправьте, пока нет возможности добавить в мажордомо для проверки.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: действия после срабатывания датчика движения

Сообщение skysilver » Вт дек 26, 2017 11:36 pm

2007-i писал(а):Если есть ошибки, пожалуйста поправьте, пока нет возможности добавить в мажордомо для проверки.

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

setTimeOut('Название таймера', 'getURL("http://192.168.10.165/?pwm0='.$value.'", 0);', 0); // запуск таймера и отправка команды с предыдущим значением pwm       
clearTimeOut('Название таймера') можно не вызывать.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
2007-i
Сообщения: 55
Зарегистрирован: Вс янв 29, 2017 12:52 am
Откуда: Уфа
Благодарил (а): 5 раз
Поблагодарили: 1 раз

Re: действия после срабатывания датчика движения

Сообщение 2007-i » Ср дек 27, 2017 12:18 am

skysilver писал(а):
2007-i писал(а):Если есть ошибки, пожалуйста поправьте, пока нет возможности добавить в мажордомо для проверки.

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

setTimeOut('Название таймера', 'getURL("http://192.168.10.165/?pwm0='.$value.'", 0);', 0); // запуск таймера и отправка команды с предыдущим значением pwm        
clearTimeOut('Название таймера') можно не вызывать.
Как я понимаю это для принудительного останова таймера что бы избежать ошибок. Нет?
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: действия после срабатывания датчика движения

Сообщение skysilver » Ср дек 27, 2017 12:20 am

2007-i писал(а):Как я понимаю это для принудительного останова таймера что бы избежать ошибок. Нет?
Да, но clear и так вызывается внутри setTimeOut. Так что можно, но необязательно.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
dengi.76
Сообщения: 222
Зарегистрирован: Вт фев 06, 2018 9:40 pm
Откуда: Пермь
Благодарил (а): 117 раз
Поблагодарили: 7 раз

Re: действия после срабатывания датчика движения

Сообщение dengi.76 » Вт апр 03, 2018 11:48 am

Привет ДРУЗЬЯ ! В датчике движения Broadlink в метод logicAction у объекта "входная дверь" имею такой код :

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

$ot = $this->object_title;
$status = $this->getProperty('status');
$updatedTime = $this->getProperty('updated');
$passed = time() - $updatedTime;
$newTimeout = 0;

if (!$status) {
    ClearTimeOut($ot.'_passed');
    say("Входная дверь закрыта",2);
}

if ($passed < 60 && $status) {
    $newTimeout = 60;
    say("Входная дверь открыта",2);
} elseif ($passed < 90 && $status) {
    $newTimeout = 120;
    say("Входная дверь открыта ".round($passed/60)." минуту",2);
} elseif ($passed < 240 && $status) {
    $newTimeout = 120;
    say("Входная дверь открыта ".round($passed/60)." минуты",2);
} elseif ($passed < 1900 && $status) {
    $newTimeout = 300;
    say("Входная дверь открыта ".round($passed/60)." минут",2);
}

if ($newTimeout > 0) {
    setTimeOut($ot.'_passed','callMethod("'.$ot.'.logicAction");',$newTimeout);
}
, и он прекрасно работает ! Посоветуйте что нужно изменить в коде чтоб он заработал в датчиках движения Xiaomi, т.к. у датчика от Broadlink свойства 0 при закрытой, 1 при открытой, у Xiaomi наоборот !
Заранее СПАСИБО !!!
Ответить