Страница 3 из 4
Re: Как выключить свет?
Добавлено: Сб фев 08, 2020 6:51 pm
Chainik
lihodeev писал(а): Сб фев 08, 2020 5:54 pm
Chainik писал(а): Сб фев 08, 2020 3:07 pm
Я бы попробовал решить так. Заводим отдельное свойство, которое будет фиксировать первое срабатывание (OBJECT.pervoe_srabatyvanie).
А дальше прописываем логику:
... НО когда прописываю код в мотиондетектед датчика - при первом же срабатывании датчика включается свет. Не может ли датчик два раза менять свое состояние к ряду? В качестве бреда - может дребезг контактов??
ЗЫ датчик движения HC-SR501
Можно попробовать ввести период "нечувствительности" после первого срабатывания. Добавим еще одно свойство: OBJECT.DoNotReact.
И введем период, в течение которого после первого срабатывания не должен включаться свет, независимо от количества срабатываний в этот период.
Код: Выделить всё
//Проверяем, было ли уже первое срабатывание и активирован ли период "нечувствительности"
if ((gg('OBJECT.pervoe_srabatyvanie') == 1) && (gg('OBJECT.DoNotReact') == 0)) {
//Уже было первое срабатывание (текущее срабатывание не первое) и период "нечувствительности" истек (== "0")
//тут ДЕЙСТВИЕ по управлению светом (код)
} else {
if (gg('OBJECT.pervoe_srabatyvanie') <> 1) {
//Ранее срабатываний не было, тогда текущее срабатывание является первым (зафиксируем это)
sg('OBJECT.pervoe_srabatyvanie', 1);
//Устанавливаем время, через которое произойдет новый эпизод, когда очередное срабатывание надо считать первым (обнулим свойство, допустим, через 15 секунд)
SetTimeOut("MyTimer_999","sg('OBJECT.pervoe_srabatyvanie', 0);",15);
//При значении свойства DoNotReact == "1" свет включаться не должен
sg('OBJECT.DoNotReact', 1);
//Задаем продолжительность периода "нечувствительности" к срабатываниям датчика движения (пусть будет 5 сек.)
SetTimeOut("MyTimer_555","sg('OBJECT.DoNotReact', 0);",5);
return"";
}
}
Re: Как выключить свет?
Добавлено: Сб фев 08, 2020 7:22 pm
lihodeev
Chainik писал(а): Сб фев 08, 2020 6:51 pm
Можно попробовать ввести период "нечувствительности" после первого срабатывания. Добавим еще одно свойство: OBJECT.DoNotReact.
И введем период, в течение которого после первого срабатывания не должен включаться свет, независимо от количества срабатываний в этот период.
это выход , код проверил, и работает, но все таки интересно разобраться откуда несколько срабатываний? Не из AMS часом? Потому что снепшоты по датчику движения из камеры в телеграмм мне приходит тоже в двух экземплярах, не мог понять почему, но похоже причина одна
Re: Как выключить свет?
Добавлено: Вс фев 09, 2020 12:23 pm
Jilber
lihodeev писал(а): Сб фев 08, 2020 6:37 pm
2020-02-08 17:34:39 0 /objects/?job=8348922
2020-02-08 17:34:32 1 /objects/?object=pirPRH&op=m&m=update&v=0
2020-02-08 17:34:31 0 /objects/?job=8348910
2020-02-08 17:34:29 1 /objects/?object=pirPRH&op=m&m=update&v=1
откуда может браться?
А перемычка в каком положении стоит ? Режим "H" — в этом режиме при срабатывании датчика несколько раз подряд на его выходе (на OUT) остается высокий логический уровень. Режим "L" — в этом режиме на выходе при каждом срабатывании датчика появляется отдельный импульс.
Re: Как выключить свет?
Добавлено: Вс фев 09, 2020 1:11 pm
xor
Chainik писал(а): Сб фев 08, 2020 6:51 pm
lihodeev писал(а): Сб фев 08, 2020 5:54 pm
Chainik писал(а): Сб фев 08, 2020 3:07 pm
Я бы попробовал решить так. Заводим отдельное свойство, которое будет фиксировать первое срабатывание (OBJECT.pervoe_srabatyvanie).
А дальше прописываем логику:
... НО когда прописываю код в мотиондетектед датчика - при первом же срабатывании датчика включается свет. Не может ли датчик два раза менять свое состояние к ряду? В качестве бреда - может дребезг контактов??
ЗЫ датчик движения HC-SR501
Можно попробовать ввести период "нечувствительности" после первого срабатывания. Добавим еще одно свойство: OBJECT.DoNotReact.
И введем период, в течение которого после первого срабатывания не должен включаться свет, независимо от количества срабатываний в этот период.
Код: Выделить всё
//Проверяем, было ли уже первое срабатывание и активирован ли период "нечувствительности"
if ((gg('OBJECT.pervoe_srabatyvanie') == 1) && (gg('OBJECT.DoNotReact') == 0)) {
//Уже было первое срабатывание (текущее срабатывание не первое) и период "нечувствительности" истек (== "0")
//тут ДЕЙСТВИЕ по управлению светом (код)
} else {
if (gg('OBJECT.pervoe_srabatyvanie') <> 1) {
//Ранее срабатываний не было, тогда текущее срабатывание является первым (зафиксируем это)
sg('OBJECT.pervoe_srabatyvanie', 1);
//Устанавливаем время, через которое произойдет новый эпизод, когда очередное срабатывание надо считать первым (обнулим свойство, допустим, через 15 секунд)
SetTimeOut("MyTimer_999","sg('OBJECT.pervoe_srabatyvanie', 0);",15);
//При значении свойства DoNotReact == "1" свет включаться не должен
sg('OBJECT.DoNotReact', 1);
//Задаем продолжительность периода "нечувствительности" к срабатываниям датчика движения (пусть будет 5 сек.)
SetTimeOut("MyTimer_555","sg('OBJECT.DoNotReact', 0);",5);
return"";
}
}
зачем столько кода и свойств?
при срабатывании дд проверяем
Код: Выделить всё
if(timeoutexists('timer')){
// уже не первое срабатывание, включим свет
cm('включим свет');
settimeout('timer','cm("выключим свет");',15);//перезапустим таймер
}else{
//таймера нет, значит первое срабатывание
// просто запустим таймер
settimeout('timer','cm("выключим свет");',15);
}
Re: Как выключить свет?
Добавлено: Вс фев 09, 2020 1:56 pm
Chainik
Там еще имеется некоторая проблемка с тем, что используемый датчик движения часто выдает сигнал о срабатывании (может выдавать чуть ли ни каждые пару секунд). У меня, к примеру, такой проблемы нет: датчики движения при обнаружении движения размыкают сигнальную цепь на 6 секунд, а последующее срабатывание происходит не раньше, чем через 4-5 секунд (т.е. минимальная периодичность срабатывания получается около 10 секунд).
Может действительно автору перемычку надо переставить, как написано выше.
Re: Как выключить свет?
Добавлено: Вс фев 09, 2020 2:32 pm
Jilber
Там есть ещё некоторые тонкости с наводками, заземлением, и т.д. В
этой теме обсуждали.
Re: Как выключить свет?
Добавлено: Вс фев 09, 2020 3:35 pm
lihodeev
наводки- не думаю, поскольку если бы они были, то датчик срабатывал и без причины(воздействия), чего у меня нет, ложных срабатываний нет(хотя, были до того как на 2560 не поставил на входы RS цепочки). Я приводил лог, но мне не понятно "кто" дергает состояния ...
2020-02-08 17:34:39 0 /objects/?job=8348922
2020-02-08 17:34:32 1 /objects/?object=pirPRH&op=m&m=update&v=0
2020-02-08 17:34:31 0 /objects/?job=8348910
2020-02-08 17:34:29 1 /objects/?object=pirPRH&op=m&m=update&v=1
может служба или задача что то делает параллельно друг с другом? На счет перемычки - может быть, я не помню в каком положении она стоит(посмотрю). Хотя, код
$a=(gg('No.time'));
$b = $a+1;
sg('No.time',$b);
всегда правильное количество отрабатывает.. как бы ложных срабатываний пока не видел. В любом случае спасибо за принятое участие в моей хотелке

Перемычку попробую как доберусь, и отпишусь
Re: Как выключить свет?
Добавлено: Вс фев 09, 2020 8:13 pm
xor
lihodeev писал(а): Вс фев 09, 2020 3:35 pm
наводки- не думаю, поскольку если бы они были, то датчик срабатывал и без причины(воздействия), чего у меня нет, ложных срабатываний нет(хотя, были до того как на 2560 не поставил на входы RS цепочки). Я приводил лог, но мне не понятно "кто" дергает состояния ...
2020-02-08 17:34:39 0 /objects/?job=8348922
2020-02-08 17:34:32 1 /objects/?object=pirPRH&op=m&m=update&v=0
2020-02-08 17:34:31 0 /objects/?job=8348910
2020-02-08 17:34:29 1 /objects/?object=pirPRH&op=m&m=update&v=1
может служба или задача что то делает параллельно друг с другом? На счет перемычки - может быть, я не помню в каком положении она стоит(посмотрю). Хотя, код
$a=(gg('No.time'));
$b = $a+1;
sg('No.time',$b);
всегда правильное количество отрабатывает.. как бы ложных срабатываний пока не видел. В любом случае спасибо за принятое участие в моей хотелке

Перемычку попробую как доберусь, и отпишусь
судя по логу - вот эта вот запись с джоб - похоже на то, что после сработки дд запускается таймер сброса в 0
Re: Как выключить свет?
Добавлено: Чт фев 13, 2020 10:23 pm
lihodeev
lihodeev писал(а): Вс фев 09, 2020 3:35 pm
Перемычку попробую как доберусь, и отпишусь
перемычку переставил, все работает уже отлично.
вторая хотелка - у меня в половине комнат стоят терминалы на апельсинках, решил немного модернизировать , и так -
добавляем в таблицу terminals поле LOCATION_ID
я руками занес значения в поле LOCATION_ID из одноименного поля из таблицы devices в строки которые ответствуют IP терминалов
сделал шаблон поведения - выключи (.+)
с таким кодом
Код: Выделить всё
$point=$matches[1];
$terminal_rec=SQLSelectOne("SELECT * FROM terminals WHERE LOCATION_ID LIKE
'%".DBSafe($replyto)."%' ORDER BY LATEST_REQUEST_TIME DESC LIMIT 1");
$terminal=$terminal_rec[LOCATION_ID];
$terminal_dev=SQLSelectOne("SELECT * FROM devices WHERE LOCATION_ID='$terminal' AND TITLE='$point'");
$object=$terminal_dev[LINKED_OBJECT];
callMethod("$object.turnoff");
немного изменил названия в простых устройствах(что не очень понравилось) подсветка на подсветку вентиляция на вентиляцию. Теперь Алиса определяет с какой комнаты отдается команда и управляет устройством в этой комнате. Раньше надо было дать команду -включи свет в кухне - а сейчас просто - включи свет. Впрочем старые шаблоны я оставил для того, чтобы можно было выключить свет из прихожей в кухне. Вопрос - как можно сделать нормальные названия в простых устройствах? А код - может кто скажет что не так, или как можно проще сделать.
Re: Как выключить свет?
Добавлено: Чт фев 13, 2020 10:42 pm
tarasfrompir
lihodeev писал(а): Чт фев 13, 2020 10:23 pm
Раньше надо было дать команду -включи свет в кухне - а сейчас просто - включи свет. Впрочем старые шаблоны я оставил для того, чтобы можно было выключить свет из прихожей в кухне. Вопрос - как можно сделать нормальные названия в простых устройствах? А код - может кто скажет что не так, или как можно проще сделать.
вопрос в том что это написано уже месяц как в ядре - мдм и использование локации терминала и устройства в той же локации.уже даже в мастер перенесено. так что обновляйся и пробуй.
И шаблон такой не нужен...
Также и сделано - и для названий устройств .
Только для того чтобы можно было включить свет в другой комнате используй альтернативное название.
ТОесть в зале делаеш устройство с названием свет и альтернативным названием свет в зале.
И если подаеш на терминал из локации зал - включи свет то включит свет в зале.
А если ты в спальне - то говоришь включи свет в зале... И включится свет в зале...
Ну как то так сумбурно и не доходчиво -