Страница 1 из 1
Странное поведение свойств объектов.
Добавлено: Сб фев 16, 2019 12:35 pm
maksimka
Добре, други! Выручайте.
Есть датчик движения, который каждый раз при фиксации движения передает 1 в свойство Motion07.status.
Есть скрипт, который выполняется, если Motion07.status = 1.
Проблема в том, что если в Motion07.status уже стоит 1, и срабатывает датчик, скрипт выполняется!
Как сделать так, чтобы срабатывание происходило только при ИЗМЕНЕНИИ свойства с 0 на 1, а не при обновлении с 1 на 1 как сейчас?
Re: Странное поведение свойств объектов.
Добавлено: Сб фев 16, 2019 1:23 pm
xor
Это стандартная ситуация, жалко, что вы не поискали готовое решение. Если скрипт вызывается привязанным к изменению свойства методом, там есть параметры $params['NEW_VALUE']
$params['OLD_VALUE'], которые надо и проверять
Отправлено с моего Redmi 4X через Tapatalk
Re: Странное поведение свойств объектов.
Добавлено: Сб фев 16, 2019 1:54 pm
skysilver
А ноль в Motion07.status у тебя кто записывает?
Re: Странное поведение свойств объектов.
Добавлено: Сб фев 16, 2019 3:31 pm
maksimka
xor писал(а): ↑Сб фев 16, 2019 1:23 pm
Это стандартная ситуация, жалко, что вы не поискали готовое решение. Если скрипт вызывается привязанным к изменению свойства методом, там есть параметры $params['NEW_VALUE']
$params['OLD_VALUE'], которые надо и проверять
Отправлено с моего Redmi 4X через Tapatalk
А можно подробнее? Там это где?
Перелопатил почти весь форум, но так и не наткнулся на подобное поведение у кого то. Возможно не то искал.
Re: Странное поведение свойств объектов.
Добавлено: Сб фев 16, 2019 3:34 pm
maksimka
skysilver писал(а): ↑Сб фев 16, 2019 1:54 pm
А ноль в Motion07.status у тебя кто записывает?
0 вписывает похоже сам датчик спустя ему одному ведомый таймаут (не связанный с Motion07.timeout). Ибо других источников 0 я не нашел ((
Re: Странное поведение свойств объектов.
Добавлено: Сб фев 16, 2019 4:05 pm
Chainik
maksimka писал(а): ↑Сб фев 16, 2019 3:34 pm
skysilver писал(а): ↑Сб фев 16, 2019 1:54 pm
А ноль в Motion07.status у тебя кто записывает?
0 вписывает похоже сам датчик спустя ему одному ведомый таймаут (не связанный с Motion07.timeout). Ибо других источников 0 я не нашел ((
Если вы руководствовались этим примером
Код: Выделить всё
//Скрипт запускается при срабатывании датчика движения
$LimitValue = 50; //Пороговое значение
If (gg('SensorА.value') < $LimitValue && gg('SensorА.Silence') <> "1" && timeBetween('06:00', '22:59')) {
say("Шеф, все пропало! Гипс снимают, клиент уезжает...");
sg("SensorА.Silence", 1); //Пока свойство SensorА.Silence будет = 1, сообщение произноситься не будет
setTimeOut('myTimer_Silence','sg("SensorА.Silence", 0);',60*30); //через полчаса свойству SensorА.Silence будет присвоено значение = 0
}
то тут "0" записывается по окончании вот этого таймера
Код: Выделить всё
setTimeOut('myTimer_Silence','sg("SensorА.Silence", 0);',60*30);
через 1800 секунд, т.е. через полчаса.
Re: Странное поведение свойств объектов.
Добавлено: Сб фев 16, 2019 4:39 pm
maksimka
Вот этот пример я и брал за основу.
Код: Выделить всё
if (getGlobal('Motion07.KatTualet') == 1) {
say('Кыса ссыт...',1);
sg("Motion07.KatTualet", 1);
setTimeOut('myTimer_Silence','sg("Motion07.KatTualet", 0);',60*3);
}
Так вот вместо срабатывания раз в 3 минуты - "Кыса ссыт" звучит каждый раз как срабатывает датчик. И 0 свойству присваивается спустя 30 секунд примерно, а не через 60*3. Мистика короче )
Re: Странное поведение свойств объектов.
Добавлено: Сб фев 16, 2019 4:47 pm
Chainik
Ну все правильно. В примере в условии If стоит "<>1". Сделайте также, т.е.
и по идее все должно заработать.
Re: Странное поведение свойств объектов.
Добавлено: Вс фев 17, 2019 2:42 pm
maksimka
Chainik писал(а): ↑Сб фев 16, 2019 4:47 pm
Ну все правильно. В примере в условии If стоит "<>1". Сделайте также, т.е.
и по идее все должно заработать.
при <>1 срабатывает при любом значении свойства, кроме 1. Что то тут еще надо..
Re: Странное поведение свойств объектов.
Добавлено: Вс фев 17, 2019 2:57 pm
Chainik
maksimka писал(а): ↑Вс фев 17, 2019 2:42 pm
...
при <>1 срабатывает при любом значении свойства, кроме 1. Что то тут еще надо..
На первый взгляд больше ничего не надо. Итак "при <>1 срабатывает при любом значении свойства, кроме 1":
Поскольку значение <>1, произносится фраза:
Свойству "Motion07.KatTualet" присваивается значение "1", при котором условие в If выполнятся не будет и, соответственно, будет тишина:
Через 3 минуты свойству "Motion07.KatTualet" присваивается значение "0", при котором произнесение фразы возобновится
Код: Выделить всё
setTimeOut('myTimer_Silence','sg("Motion07.KatTualet", 0);',60*3);
Нигде не увидел нарушения логики.