Страница 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". Сделайте также, т.е.

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

if (getGlobal('Motion07.KatTualet') <> 1)
и по идее все должно заработать.

Re: Странное поведение свойств объектов.

Добавлено: Вс фев 17, 2019 2:42 pm
maksimka
Chainik писал(а):
Сб фев 16, 2019 4:47 pm
Ну все правильно. В примере в условии If стоит "<>1". Сделайте также, т.е.

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

if (getGlobal('Motion07.KatTualet') <> 1)
и по идее все должно заработать.
при <>1 срабатывает при любом значении свойства, кроме 1. Что то тут еще надо..

Re: Странное поведение свойств объектов.

Добавлено: Вс фев 17, 2019 2:57 pm
Chainik
maksimka писал(а):
Вс фев 17, 2019 2:42 pm
...
при <>1 срабатывает при любом значении свойства, кроме 1. Что то тут еще надо..
На первый взгляд больше ничего не надо. Итак "при <>1 срабатывает при любом значении свойства, кроме 1":

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

if (getGlobal('Motion07.KatTualet') <> 1)
Поскольку значение <>1, произносится фраза:

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

say('Кыса ссыт...',1);
Свойству "Motion07.KatTualet" присваивается значение "1", при котором условие в If выполнятся не будет и, соответственно, будет тишина:

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

sg("Motion07.KatTualet", 1);
Через 3 минуты свойству "Motion07.KatTualet" присваивается значение "0", при котором произнесение фразы возобновится

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

setTimeOut('myTimer_Silence','sg("Motion07.KatTualet", 0);',60*3);
Нигде не увидел нарушения логики.