Страница 1 из 3
Постоянное проговаривание свойства.
Добавлено: Сб фев 01, 2020 5:26 pm
madbob
Подскажите пожалуйста! Нужен код метода statusUpdated
Чтобы пока status=1 Алиса постоянно проговаривала сообщение. Если
Код: Выделить всё
If ($this->getProperty('status')) {
say("пожар в гараже",3);
}
То, соответственно, проговаривает один раз, как и должна при изменении статуса. Если
Код: Выделить всё
while (gg('Relay19.status') == 1)
{
say("пожар в гараже",5);
}
То не перестает проговаривать даже при изменении статуса в 0.
Как остановить выполнение этого метода, когда болтает без остановки? Я смог только перезагрузкой , существуют же менее радикальные способы?
В железе сделано с помощью ESP, на которой висит датчик качества воздуха. Простое устройство, в которое шлются значения этого датчика. При превышении уставки условное управление другим ПУ типа реле «включить», при снижении «выключить».
Re: Постоянное проговаривание свойства.
Добавлено: Чт фев 27, 2020 12:56 pm
skysilver
Через таймеры нужно такие вещи делать. setTimeOut в Базе знаний.
Re: Постоянное проговаривание свойства.
Добавлено: Чт фев 27, 2020 5:10 pm
Chainik
madbob писал(а): ↑Сб фев 01, 2020 5:26 pm
Подскажите пожалуйста! Нужен код метода statusUpdated
Чтобы пока status=1 Алиса постоянно проговаривала сообщение. Если
Код: Выделить всё
If ($this->getProperty('status')) {
say("пожар в гараже",3);
}
То, соответственно, проговаривает один раз, как и должна при изменении статуса....
Скорее всего при while у вас "набросало" сообщений в очередь и будет проговаривать до второго пришествия (хотя сам метод фактически закончил выполнение).
Попробуйте, как правильно подсказали, добавить в код строчку с SetTimeOut, скажем, с 10-секундной задержкой выполнения).
Код: Выделить всё
If ($this->getProperty('status')) {
say("пожар в гараже",3);
SetTimeOut("MyTimer_33","$this->callMethod('ИМЯ_ТЕКУЩЕГО_МЕТОДА');",10);
}
Re: Постоянное проговаривание свойства.
Добавлено: Чт фев 27, 2020 7:24 pm
Denis_k
чтобы не плодить тем:
добавляю в методе statusUpdated объекта OpenClose01 следующие строки:
Код: Выделить всё
$open=gg("OpenClose01.status");
if ($open==1)
{say ("Входная дверь закрыта",2);
}
else
{say ("Входная дверь открыта",2);
}
и получаю в чате "Входная дверь открыта" дважды, сообщение про закрытие приходит в единственно числе
Re: Постоянное проговаривание свойства.
Добавлено: Чт фев 27, 2020 7:36 pm
xor
Denis_k писал(а):чтобы не плодить тем:
добавляю в методе statusUpdated объекта OpenClose01 следующие строки:
Код: Выделить всё
$open=gg("OpenClose01.status");
if ($open==1)
{say ("Входная дверь закрыта",2);
}
else
{say ("Входная дверь открыта",2);
}
и получаю в чате "Входная дверь открыта" дважды, сообщение про закрытие приходит в единственно числе
Стандарт для МДМ - говорить только при смене статуса с 0 на 1 или наоборот. Если лень читать про олд_валюе/нью_валюе, а дублирование идёт с небольшим интервалом, вместо сэй можно использовать тайм-аут с тем же сэй, но с задержкой в неск секунд. Так будет подавляться повтор, но это, кмк, неправильно
Отправлено с моего Redmi 4X через Tapatalk
Re: Постоянное проговаривание свойства.
Добавлено: Чт фев 27, 2020 7:37 pm
Chainik
Для начала надо убедиться, что этот метод не запускается дважды (скорее всего, запускается).
Для этого можно перед вашим кодом добавить проверочное:
И вообще, неплохо бы понять, какое оборудование запускает у вас этот метод.
Re: Постоянное проговаривание свойства.
Добавлено: Чт фев 27, 2020 7:45 pm
Denis_k
Chainik писал(а): ↑Чт фев 27, 2020 7:37 pm
И вообще, неплохо бы понять, какое оборудование запускает у вас этот метод.
датчик xiaomi из модуля zigbee2mqtt
Re: Постоянное проговаривание свойства.
Добавлено: Чт фев 27, 2020 7:57 pm
Chainik
Может быть у вас дребезг контактов геркона. Можете действительно, как предлагает ув.
xor, "подавить" этот повтор установкой задержки:
Код: Выделить всё
$open=gg("OpenClose01.status");
if ($open==1)
{say ("Входная дверь закрыта",2);
}
else
{setTimeOut('myTimer_99','say("Входная дверь открыта",5);',2);
}
Re: Постоянное проговаривание свойства.
Добавлено: Чт фев 27, 2020 8:33 pm
xor
Chainik писал(а):Для начала надо убедиться, что этот метод не запускается дважды (скорее всего, запускается).
Для этого можно перед вашим кодом добавить проверочное:
И вообще, неплохо бы понять, какое оборудование запускает у вас этот метод.
Мои датчики все сигналы дублируют, но самое правильное решение, кмк, проверка в связанном методе
If($params['NEW_VALUE']<>$params['OLD_VALUE']){//тут код}
Отправлено с моего Redmi 4X через Tapatalk
Re: Постоянное проговаривание свойства.
Добавлено: Чт фев 27, 2020 10:52 pm
xor
писал по памяти, а её нету(
$params['NEW_VALUE'] , $params['OLD_VALUE']