Постоянное проговаривание свойства.

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Denis_k
Сообщения: 587
Зарегистрирован: Сб мар 19, 2016 7:24 pm
Благодарил (а): 299 раз
Поблагодарили: 27 раз

Re: Постоянное проговаривание свойства.

Сообщение Denis_k » Пт фев 28, 2020 2:20 pm

xor писал(а):
Чт фев 27, 2020 10:52 pm
писал по памяти, а её нету(

$params['NEW_VALUE'] , $params['OLD_VALUE']
отлично, спасибо, такая конструкция работает

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

If($params['NEW_VALUE']<>$params['OLD_VALUE'])
{
$open=gg("OpenClose01.status");
if ($open==1) 
{say ("Входная дверь закрыта",2);
}
else 
{say ("Входная дверь открыта",2);
}
}
MD на raspberry pi3
Аватара пользователя
xor
Сообщения: 2043
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 288 раз
Поблагодарили: 629 раз

Re: Постоянное проговаривание свойства.

Сообщение xor » Вс мар 01, 2020 10:52 am

Denis_k писал(а):
Пт фев 28, 2020 2:20 pm
xor писал(а):
Чт фев 27, 2020 10:52 pm
писал по памяти, а её нету(

$params['NEW_VALUE'] , $params['OLD_VALUE']
отлично, спасибо, такая конструкция работает

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

If($params['NEW_VALUE']<>$params['OLD_VALUE'])
{
$open=gg("OpenClose01.status");
if ($open==1) 
{say ("Входная дверь закрыта",2);
}
else 
{say ("Входная дверь открыта",2);
}
}
ну, можно подсократить, тут $params['NEW_VALUE'] у вас и есть новое значение OpenClose01.status

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

If($params['NEW_VALUE']<>$params['OLD_VALUE'])
{
if ($params['NEW_VALUE']==1) 
{say ("Входная дверь закрыта",2);
}
else 
{say ("Входная дверь открыта",2);
}
}
За это сообщение автора xor поблагодарил:
Denis_k (Вт мар 03, 2020 12:37 am)
Рейтинг: 1.16%
madbob
Сообщения: 24
Зарегистрирован: Пт ноя 25, 2016 11:50 am
Откуда: Москва
Благодарил (а): 10 раз
Поблагодарили: 3 раза

Re: Постоянное проговаривание свойства.

Сообщение madbob » Вс мар 01, 2020 1:54 pm

Chainik писал(а):
Чт фев 27, 2020 5:10 pm
Скорее всего при while у вас "набросало" сообщений в очередь и будет проговаривать до второго пришествия (хотя сам метод фактически закончил выполнение).
Попробуйте, как правильно подсказали, добавить в код строчку с SetTimeOut, скажем, с 10-секундной задержкой выполнения).

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

If  ($this->getProperty('status')) {
 say("пожар в гараже",3);
 SetTimeOut("MyTimer_33","$this->callMethod('ИМЯ_ТЕКУЩЕГО_МЕТОДА');",10);
}
Все равно проговаривает 1 раз, метод не перезапусается по окончании таймера.
Вложения
relay19.jpg
relay19.jpg (200.41 КБ) 3420 просмотров
Raspberry Pi 3 образ 3.31+GUI ESP12(IoT)кучка+ESP32
Chainik
Сообщения: 1463
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 261 раз
Поблагодарили: 454 раза

Re: Постоянное проговаривание свойства.

Сообщение Chainik » Вс мар 01, 2020 2:23 pm

madbob писал(а):
Вс мар 01, 2020 1:54 pm
...

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

If  ($this->getProperty('status')) {
 say("пожар в гараже",3);
 SetTimeOut("MyTimer_33","$this->callMethod('ИМЯ_ТЕКУЩЕГО_МЕТОДА');",10);
}
Все равно проговаривает 1 раз, метод не перезапусается по окончании таймера.
Значит, наверняка проблема с правильностью синтаксиса в том коде, что я предложил. Попробуйте указать имя Объекта.Метода в явном виде.

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

 SetTimeOut("MyTimer_33","callMethod('Relay19.statusUpdated');",10);
Если вам все же нужен классовый метод, можно написать так:

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

$ot=$this->object_title;
SetTimeOut("MyTimer_33","callMethod('".$ot.".statusUpdated');",10);
Logrus
Сообщения: 2088
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 459 раз

Re: Постоянное проговаривание свойства.

Сообщение Logrus » Вс мар 01, 2020 3:11 pm

SDevices_statusUpdated не предназначен для такого, есть SDevices_logicAction
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
madbob
Сообщения: 24
Зарегистрирован: Пт ноя 25, 2016 11:50 am
Откуда: Москва
Благодарил (а): 10 раз
Поблагодарили: 3 раза

Re: Постоянное проговаривание свойства.

Сообщение madbob » Вс мар 01, 2020 5:13 pm

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

if ($this->getProperty('status')) {
 say("пожар в гараже",3);
 SetTimeOut("Timer_fire_garage","callMethod('Relay19.statusUpdated');",10);
}
Ура! Так заработало в statusUpdated. Даже теща прибежала :)))
Logrus писал(а):
Вс мар 01, 2020 3:11 pm
SDevices_statusUpdated не предназначен для такого, есть SDevices_logicAction
Почему? Чем грозит использование этого кода в методе statusUpdate объекта в Sdevices ?
Спасибо всем за помощь!
Raspberry Pi 3 образ 3.31+GUI ESP12(IoT)кучка+ESP32
Logrus
Сообщения: 2088
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 459 раз

Re: Постоянное проговаривание свойства.

Сообщение Logrus » Пн мар 02, 2020 8:40 pm

madbob писал(а):
Вс мар 01, 2020 5:13 pm

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

if ($this->getProperty('status')) {
 say("пожар в гараже",3);
 SetTimeOut("Timer_fire_garage","callMethod('Relay19.statusUpdated');",10);
}
Ура! Так заработало в statusUpdated. Даже теща прибежала :)))
Logrus писал(а):
Вс мар 01, 2020 3:11 pm
SDevices_statusUpdated не предназначен для такого, есть SDevices_logicAction
Почему? Чем грозит использование этого кода в методе statusUpdate объекта в Sdevices ?
Спасибо всем за помощь!
в инжекции есть много лишнего
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
madbob
Сообщения: 24
Зарегистрирован: Пт ноя 25, 2016 11:50 am
Откуда: Москва
Благодарил (а): 10 раз
Поблагодарили: 3 раза

Re: Постоянное проговаривание свойства.

Сообщение madbob » Вт мар 03, 2020 8:33 pm

Logrus писал(а):
Пн мар 02, 2020 8:40 pm
в инжекции есть много лишнего
Мне пока не понять :( катастрофы, надеюсь, не будет?
Raspberry Pi 3 образ 3.31+GUI ESP12(IoT)кучка+ESP32
Logrus
Сообщения: 2088
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 459 раз

Re: Постоянное проговаривание свойства.

Сообщение Logrus » Вт мар 03, 2020 9:17 pm

не должно, но лишняя не нужная нагрузка
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
xor
Сообщения: 2043
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 288 раз
Поблагодарили: 629 раз

Re: Постоянное проговаривание свойства.

Сообщение xor » Вт мар 03, 2020 9:45 pm

madbob писал(а):
Вт мар 03, 2020 8:33 pm
Logrus писал(а):
Пн мар 02, 2020 8:40 pm
в инжекции есть много лишнего
Мне пока не понять :( катастрофы, надеюсь, не будет?
я б вообще вынес крик о пожаре в отдельный скрипт, допустим, FireAlarm

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

//script FireAlarm
if (gg('Object.status')) { //кричать, пока свойство=1
 say("пожар в гараже",3);
 SetTimeOut("Timer_fire_garage","runscript('FireAlarm');",10);
}
а инициировал бы его один раз вызовом из откуда он там вызывается

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

//say("пожар в гараже",3);
 runscript('FireAlarm');
Ответить