Странное поведение свойств объектов.
Модератор: immortal
- maksimka
- Сообщения: 23
- Зарегистрирован: Сб апр 07, 2018 2:04 pm
- Откуда: Новосибирск
- Благодарил (а): 13 раз
- Поблагодарили: 12 раз
Странное поведение свойств объектов.
Добре, други! Выручайте.
Есть датчик движения, который каждый раз при фиксации движения передает 1 в свойство Motion07.status.
Есть скрипт, который выполняется, если Motion07.status = 1.
Проблема в том, что если в Motion07.status уже стоит 1, и срабатывает датчик, скрипт выполняется!
Как сделать так, чтобы срабатывание происходило только при ИЗМЕНЕНИИ свойства с 0 на 1, а не при обновлении с 1 на 1 как сейчас?
Есть датчик движения, который каждый раз при фиксации движения передает 1 в свойство Motion07.status.
Есть скрипт, который выполняется, если Motion07.status = 1.
Проблема в том, что если в Motion07.status уже стоит 1, и срабатывает датчик, скрипт выполняется!
Как сделать так, чтобы срабатывание происходило только при ИЗМЕНЕНИИ свойства с 0 на 1, а не при обновлении с 1 на 1 как сейчас?
- xor
- Сообщения: 2039
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: Странное поведение свойств объектов.
Это стандартная ситуация, жалко, что вы не поискали готовое решение. Если скрипт вызывается привязанным к изменению свойства методом, там есть параметры $params['NEW_VALUE']
$params['OLD_VALUE'], которые надо и проверять
Отправлено с моего Redmi 4X через Tapatalk
$params['OLD_VALUE'], которые надо и проверять
Отправлено с моего Redmi 4X через Tapatalk
win10 connect https://connect.smartliving.ru/profile/303
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1753 раза
- Контактная информация:
Re: Странное поведение свойств объектов.
А ноль в Motion07.status у тебя кто записывает?
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
- maksimka
- Сообщения: 23
- Зарегистрирован: Сб апр 07, 2018 2:04 pm
- Откуда: Новосибирск
- Благодарил (а): 13 раз
- Поблагодарили: 12 раз
Re: Странное поведение свойств объектов.
А можно подробнее? Там это где?xor писал(а): ↑Сб фев 16, 2019 1:23 pmЭто стандартная ситуация, жалко, что вы не поискали готовое решение. Если скрипт вызывается привязанным к изменению свойства методом, там есть параметры $params['NEW_VALUE']
$params['OLD_VALUE'], которые надо и проверять
Отправлено с моего Redmi 4X через Tapatalk
Перелопатил почти весь форум, но так и не наткнулся на подобное поведение у кого то. Возможно не то искал.
- maksimka
- Сообщения: 23
- Зарегистрирован: Сб апр 07, 2018 2:04 pm
- Откуда: Новосибирск
- Благодарил (а): 13 раз
- Поблагодарили: 12 раз
Re: Странное поведение свойств объектов.
0 вписывает похоже сам датчик спустя ему одному ведомый таймаут (не связанный с Motion07.timeout). Ибо других источников 0 я не нашел ((
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: Странное поведение свойств объектов.
Если вы руководствовались этим примером
Код: Выделить всё
//Скрипт запускается при срабатывании датчика движения
$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
}
Код: Выделить всё
setTimeOut('myTimer_Silence','sg("SensorА.Silence", 0);',60*30);
- maksimka
- Сообщения: 23
- Зарегистрирован: Сб апр 07, 2018 2:04 pm
- Откуда: Новосибирск
- Благодарил (а): 13 раз
- Поблагодарили: 12 раз
Re: Странное поведение свойств объектов.
Вот этот пример я и брал за основу.
Так вот вместо срабатывания раз в 3 минуты - "Кыса ссыт" звучит каждый раз как срабатывает датчик. И 0 свойству присваивается спустя 30 секунд примерно, а не через 60*3. Мистика короче )
Код: Выделить всё
if (getGlobal('Motion07.KatTualet') == 1) {
say('Кыса ссыт...',1);
sg("Motion07.KatTualet", 1);
setTimeOut('myTimer_Silence','sg("Motion07.KatTualet", 0);',60*3);
}
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: Странное поведение свойств объектов.
Ну все правильно. В примере в условии If стоит "<>1". Сделайте также, т.е.
и по идее все должно заработать.
Код: Выделить всё
if (getGlobal('Motion07.KatTualet') <> 1)
- maksimka
- Сообщения: 23
- Зарегистрирован: Сб апр 07, 2018 2:04 pm
- Откуда: Новосибирск
- Благодарил (а): 13 раз
- Поблагодарили: 12 раз
Re: Странное поведение свойств объектов.
при <>1 срабатывает при любом значении свойства, кроме 1. Что то тут еще надо..Chainik писал(а): ↑Сб фев 16, 2019 4:47 pmНу все правильно. В примере в условии If стоит "<>1". Сделайте также, т.е.и по идее все должно заработать.Код: Выделить всё
if (getGlobal('Motion07.KatTualet') <> 1)
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: Странное поведение свойств объектов.
На первый взгляд больше ничего не надо. Итак "при <>1 срабатывает при любом значении свойства, кроме 1":
Код: Выделить всё
if (getGlobal('Motion07.KatTualet') <> 1)
Код: Выделить всё
say('Кыса ссыт...',1);
Код: Выделить всё
sg("Motion07.KatTualet", 1);
Код: Выделить всё
setTimeOut('myTimer_Silence','sg("Motion07.KatTualet", 0);',60*3);