Страница 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 Прописан скрипт следующего содержания.
Код: Выделить всё
$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, если конечно вы их подключили как простые устройства. Попробую реализовать такую проверку.