Страница 3 из 5

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

Добавлено: Ср ноя 08, 2017 12:41 pm
dr.pavlov.alex
woow писал(а):да и я тут хочу спросить у знающих, пользуюсь готовым имиджем на малинке там на панеле управления "висит" сообщение "кто-то дома коридор". где это находится? Для начала хочу найти и убрать, а потом как будет какой датчик сделаем и правильные действие, теперь не надо. Так как его убрать
Вот тут 0 поставьте: Rooms>Hall>свойство: Hall.SomebodyHere --0. Еще возможно метод обновите Rooms-> updateActivityStatus.

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

Добавлено: Ср ноя 08, 2017 6:57 pm
lupsik
Подскажу свою реализацию датчика движения.
Все подключено к ESP8266. Данные отправляются по MQTT протоколу. Majordomo установлен на Raspberry PI 3 из img.
На ESP8266 установлен модуль "Работа с прерываниями" для немедленной отправки в MQTT брокер информации о состоянии датчика.
Создан объект Движение со стандартными свойствами SMotions. В частности интересуют 2, а именно status и updatedText. С ESP8266 идет информация о любом переключении датчика. 1- есть движение, 0- нет движения.
При изменении статус status начинает изменяться свойство updatedText.
1. только что
2. 10 сек. назад
3. 1 мин. назад
Т.е. в данном свойстве указано, сколько прошло время после последнего изменения датчика.
В методе SDevices-> setUpdatedText Прописан скрипт следующего содержания.

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

$time= explode(" ", getGlobal('КухняДВ'.'.'.'updatedText'));
if ((getGlobal('КухняДВ'.'.'.'status') == 1) && (getGlobal('КухняДВ'.'.'.'Auto') == 1) && (timeBetween('07:00', '00:00')))
{
 setGlobal('СветКухня'.'.'.'status', '1'); 
 $colorDi=getGlobal('СветоДиодКухня'.'.'.'status');
 $b=substr($colorDi,1,2);
 $a=substr($colorDi,3,2);
 $c=substr($colorDi,5,2);
 for ($i=1; $i<=107; $i++)
 {
  $z.=$a.$b.$c;
 }
 setGlobal('СветоДиодКухня'.'.'.'color', $z);
}

if ((getGlobal('КухняДВ'.'.'.'status') == 1) && (getGlobal('КухняДВ'.'.'.'Auto') == 1) && (timeBetween('00:00', '07:00')))
{
 $colorDi=getGlobal('СветоДиодКухня'.'.'.'status');
 $b=substr($colorDi,1,2);
 $a=substr($colorDi,3,2);
 $c=substr($colorDi,5,2);
 for ($i=1; $i<=107; $i++)
 {
  $z.=$a.$b.$c;
 }
  setGlobal('СветоДиодКухня'.'.'.'color', $z);
}

if ((getGlobal('КухняДВ'.'.'.'status') == 0) && (getGlobal('КухняДВ'.'.'.'Auto') == 1) && ($time[0]>3) && ($time[1]=='мин.'))
{
 setGlobal('СветКухня'.'.'.'status', '0');
 $a='00';
 $b='00';
 $c='00';
 for ($i=1; $i<=107; $i++)
 {
  $z.=$a.$b.$c;
 }
 setGlobal('СветоДиодКухня'.'.'.'color', $z);
}
 
Скрипт срабатывает при обновлении свойства updatedText. Значение этого свойства записывается в массив time. time[1] - числовое значение, time[2]= "мин." или "сек."
Далее просто проверяю значение датчика и сколько минут прошло после последнего изменения.

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

Добавлено: Ср ноя 08, 2017 7:26 pm
Vovix
lupsik писал(а):Подскажу свою реализацию датчика движения.
Все подключено к ESP8266. Данные отправляются по MQTT протоколу. Majordomo установлен на Raspberry PI 3 из img.
На ESP8266 установлен модуль "Работа с прерываниями" для немедленной отправки в MQTT брокер информации о состоянии датчика.
Создан объект Движение со стандартными свойствами SMotions. В частности интересуют 2, а именно status и updatedText. С ESP8266 идет информация о любом переключении датчика. 1- есть движение, 0- нет движения.
При изменении статус status начинает изменяться свойство updatedText.
1. только что
2. 10 сек. назад
3. 1 мин. назад
Т.е. в данном свойстве указано, сколько прошло время после последнего изменения датчика.
В методе SDevices-> setUpdatedText Прописан скрипт следующего содержания.
SPOILERSPOILER_SHOW

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

$time= explode(" ", getGlobal('КухняДВ'.'.'.'updatedText'));
if ((getGlobal('КухняДВ'.'.'.'status') == 1) && (getGlobal('КухняДВ'.'.'.'Auto') == 1) && (timeBetween('07:00', '00:00')))
{
 setGlobal('СветКухня'.'.'.'status', '1'); 
 $colorDi=getGlobal('СветоДиодКухня'.'.'.'status');
 $b=substr($colorDi,1,2);
 $a=substr($colorDi,3,2);
 $c=substr($colorDi,5,2);
 for ($i=1; $i<=107; $i++)
 {
  $z.=$a.$b.$c;
 }
 setGlobal('СветоДиодКухня'.'.'.'color', $z);
}

if ((getGlobal('КухняДВ'.'.'.'status') == 1) && (getGlobal('КухняДВ'.'.'.'Auto') == 1) && (timeBetween('00:00', '07:00')))
{
 $colorDi=getGlobal('СветоДиодКухня'.'.'.'status');
 $b=substr($colorDi,1,2);
 $a=substr($colorDi,3,2);
 $c=substr($colorDi,5,2);
 for ($i=1; $i<=107; $i++)
 {
  $z.=$a.$b.$c;
 }
  setGlobal('СветоДиодКухня'.'.'.'color', $z);
}

if ((getGlobal('КухняДВ'.'.'.'status') == 0) && (getGlobal('КухняДВ'.'.'.'Auto') == 1) && ($time[0]>3) && ($time[1]=='мин.'))
{
 setGlobal('СветКухня'.'.'.'status', '0');
 $a='00';
 $b='00';
 $c='00';
 for ($i=1; $i<=107; $i++)
 {
  $z.=$a.$b.$c;
 }
 setGlobal('СветоДиодКухня'.'.'.'color', $z);
}
Скрипт срабатывает при обновлении свойства updatedText. Значение этого свойства записывается в массив time. time[1] - числовое значение, time[2]= "мин." или "сек."
Далее просто проверяю значение датчика и сколько минут прошло после последнего изменения.
А вы точно тот самый метод выложили? - тот который нужно?

и какая цель в такой записи - setGlobal('СветоДиодКухня'.'.'.'color', $z); ?
можно же так: setGlobal('СветоДиодКухня.color', $z); ? или я что-то не понимаю?

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

Добавлено: Ср ноя 08, 2017 7:40 pm
lupsik
Vovix писал(а): А вы точно тот самый метод выложили? - тот который нужно?
Да нет все верно.
Vovix писал(а): и какая цель в такой записи - setGlobal('СветоДиодКухня'.'.'.'color', $z); ?
Задает цвет светодиодной подсветки
Vovix писал(а): можно же так: setGlobal('СветоДиодКухня.color', $z); ? или я что-то не понимаю?
Конечно можно. )))

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

Добавлено: Вт ноя 28, 2017 12:30 am
rial2001
neromih писал(а):У меня реализация не через простые устройства, а просто как сказать объектами.
Настраивал у себя:

.........

2. Проблемы:
1. Если в свойства без разницы какое SMotions-> motionDetected или SDevices-> statusUpdated
добавить код что бы при 0 MD произносил "обнаружено движение" то соответственно это будет сделано несколько раз.
2. Если добавить код для включения и выключения освещения, то соответственно он будет вкл и выкл освещение 5 раз :)

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

sg("Switch0.status","1");
sg('Switch0.statusText','Включено');
clearTimeOut("Switch0");
SetTimeOut("Switch0",'sg("Switch0.status","0"); 
sg("Switch0.statusText","Выключено");',[b]10[/b]);

вписал данный код в метод statusUpdated
10 время через которое отключится реле.

Может быть пригодится кому нибудь, работает.
Смысл в том если SecuritySwitch.status значение 0 - режим не охраны а наблюдения, соответственно включает реле, если наоборот то говорит проникновение.

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

if (gg('SecuritySwitch.status') == "0") {
sg("Switch0.status","1");
sg('Switch0.statusText','Включено');
SetTimeOut("Switch0",'sg("Switch0.status","0"); 
sg("Switch0.statusText","Выключено");',10);
} else {
say("Проникновение",5);
}
В принципе эта настройка будет справедлива почти ко всем датчикам движения
Решалась ли как данная проблема? Вот такая же сборка ОДИН-В-ОДИН через ПРОСТЫЕ устройства:
+ Статус датчика всегда горит красным...пока копаю...вопросов на форуме довольно много...а вот конкретного решения не нашел.
ЗЫ Брокер не предлагать))))

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

Добавлено: Вт ноя 28, 2017 3:43 am
neromih
rial2001 писал(а):
neromih писал(а):У меня реализация не через простые устройства, а просто как сказать объектами.
Настраивал у себя:

.........

2. Проблемы:
1. Если в свойства без разницы какое SMotions-> motionDetected или SDevices-> statusUpdated
добавить код что бы при 0 MD произносил "обнаружено движение" то соответственно это будет сделано несколько раз.
2. Если добавить код для включения и выключения освещения, то соответственно он будет вкл и выкл освещение 5 раз :)

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

sg("Switch0.status","1");
sg('Switch0.statusText','Включено');
clearTimeOut("Switch0");
SetTimeOut("Switch0",'sg("Switch0.status","0"); 
sg("Switch0.statusText","Выключено");',[b]10[/b]); 

вписал данный код в метод statusUpdated
10 время через которое отключится реле.

Может быть пригодится кому нибудь, работает.
Смысл в том если SecuritySwitch.status значение 0 - режим не охраны а наблюдения, соответственно включает реле, если наоборот то говорит проникновение.

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

if (gg('SecuritySwitch.status') == "0") {
sg("Switch0.status","1");
sg('Switch0.statusText','Включено');
SetTimeOut("Switch0",'sg("Switch0.status","0"); 
sg("Switch0.statusText","Выключено");',10);
} else {
say("Проникновение",5);
} 
В принципе эта настройка будет справедлива почти ко всем датчикам движения
Решалась ли как данная проблема? Вот такая же сборка ОДИН-В-ОДИН через ПРОСТЫЕ устройства:
+ Статус датчика всегда горит красным...пока копаю...вопросов на форуме довольно много...а вот конкретного решения не нашел.
ЗЫ Брокер не предлагать))))
Статус какой горит красным? :) Я простые устройства не использую.

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

Добавлено: Вт ноя 28, 2017 10:52 pm
rial2001
neromih писал(а):
rial2001 писал(а):
neromih писал(а):У меня реализация не через простые устройства, а просто как сказать объектами.

Статус какой горит красным? :) Я простые устройства не использую.
Статус красным горит - индикация движения на сцене, т.е. датчик не опрашивается о состоянии покоя и отражает последнее полученное значение, меняет его только при последующем обнаружении движения. Думаю это связано с тем, что ПРОСТЫЕ устройства определяют "1" как движение, а МЕГА наоборот "0"
Так не смог побороть.
Сейчас буду перекидывать датчик в группу SMotions как увас.
Хотел уточнить решение как убрать повторы "обнаружено движение" по 3-4 раза за одно 1 срабатывание датчика - есть решение?

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

Добавлено: Пн дек 18, 2017 7:53 pm
Gelezako
rial2001 писал(а): Хотел уточнить решение как убрать повторы "обнаружено движение" по 3-4 раза за одно 1 срабатывание датчика - есть решение?
та же самая беда, но как решить я так и не нашёл

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

Добавлено: Вт дек 19, 2017 9:44 am
Vovix
Gelezako писал(а):
rial2001 писал(а): Хотел уточнить решение как убрать повторы "обнаружено движение" по 3-4 раза за одно 1 срабатывание датчика - есть решение?
ну почему-же?
не совсем понял, что там наворочено у всех выше, но
можно с таймерами, но удобнее:

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

registerEvent($eventName, $details='',$expire_in=365); -- регистрация события $eventName

registeredEventTime($eventName); -- возвращает время последней регистрации события $eventName (-1 если еще не было такого события)
Например так:
1) сработал датчик
2) запрашиваем время регистрации события в прошлый раз (-1 будет первый раз)
3) регистрируем событие
4) определяем сколько прошло времени с регистрации события и было ли оно вообще
5) если меньше чем надо, то ни чего не делаем
6) если больше или первый раз, то хотим говорим хотим что-то выполняем

З.Ы.
хотя возможно, вы используете "Простые устройства"....брр... но там вероятно, тоже можно поправить... наверно!

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

Добавлено: Вт дек 19, 2017 4:46 pm
Gelezako
это выход, но в принципе зачем плодить копии времени события с датчиков, если уже есть встроенное свойство Updated Timestamp, если конечно вы их подключили как простые устройства. Попробую реализовать такую проверку.