Страница 1 из 1

Проблема с умной розеткой (двойное срабатывание метода)

Добавлено: Чт мар 22, 2018 11:10 am
dmnbi4
Добрый день!

Система MJD установлена с образа Сергея с полследними обновлениями. на Raspberry Pi.
Настроил в своей системе умную розетку Xiaomi. Через модуль XiaomiHome и простые устройства.
Вывел её на главную сцену и настроил простенький метод который срабатывает при изменении статуса:

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

$current_state = getGlobal('XiRelay04.status');
$date = date("Y-m-d H:i:s");// 2001-03-10 17:16:18
if ($current_state == 0) {
        say("Розетка выключена $date.", 2);
 } 
else {
        say("Розетка включена $date.", 2);
} 
Если выключить или включить розетку с кнопки на устройстве то приходит одно сообщение о смене статуса.
Но при срабатывание этого метода при вызове со сцены происходит двойное срабатывание. И сообщения о включении или выключении задваиваются.
Пробывал переопределять метод statusupdated но всё тоже-самое. Я так понимаю что вызывается метод обновления состояния дважды.

Re: Проблема с умной розеткой (двойное срабатывание метода)

Добавлено: Чт мар 22, 2018 3:51 pm
dmnbi4
Уточняющая информация:

Re: Проблема с умной розеткой (двойное срабатывание метода)

Добавлено: Чт мар 22, 2018 4:04 pm
fandaymon
Это абсолютно нормальная работа - Нажали на иконку - вызвался метод - изменился статус - сработал метод изменения статуса - модуль отправил пакет розетке - розетка переключилась - отправила информацию об изменении статуса - статуса ещё раз проапдейтался - сработал метод.
Не очень понятно зачем говорить что розетка сработала, но если очень надо, то проверяйте старое значение статуса - если оно поменялось - выводите сообщение, если нет - не выводите

Re: Проблема с умной розеткой (двойное срабатывание метода)

Добавлено: Чт мар 22, 2018 4:56 pm
Logrus
вот нормально и подробно оформлено и сразу ответ )))
viewtopic.php?f=6&t=4122&start=90#p67429

Re: Проблема с умной розеткой (двойное срабатывание метода)

Добавлено: Пт мар 23, 2018 4:55 pm
Dicont
Помогает просто поставить задержку, допустим выключил розетку
проверка состояния
if (gg("Relay08.status")!="0"){
say ("Розетка выключена",2);
sg ("Relay08.status",0);
sleep (5);
//для обновления значений
sg ("Relay08.status",0);
}
Но это наверно не совсем правильно

Re: Проблема с умной розеткой (двойное срабатывание метода)

Добавлено: Пт мар 23, 2018 4:59 pm
dmnbi4
Если я пишу такой код, то метод вообще не работает:

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

include(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$current_state = getGlobal('XiRelay04.status');
$date = date("Y-m-d H:i:s");// 2001-03-10 17:16:18
if ($params['NEW_VALUE']==$params['OLD_VALUE']) return;
if ($current_state == 0) {
        say("Розетка выключена $date.", 2);
        //$telegram_module->sendMessageToAll("Розетка выключена $date.");
} 
else {
        say("Розетка включена $date.", 2);
        //$telegram_module->sendMessageToAll("Розетка включена $date.");   
} 

Re: Проблема с умной розеткой (двойное срабатывание метода)

Добавлено: Пт мар 23, 2018 5:29 pm
dmnbi4
Подскажите как правильно применить вот эту конструкцию:

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

if ($params['NEW_VALUE']==$params['OLD_VALUE']) return; 

Re: Проблема с умной розеткой (двойное срабатывание метода)

Добавлено: Пт мар 23, 2018 6:54 pm
fandaymon
dmnbi4 писал(а):Подскажите как правильно применить вот эту конструкцию:

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

if ($params['NEW_VALUE']==$params['OLD_VALUE']) return; 
Надо её применять в том методе, который отрабатывает при изменении свойства status. И лучше её ставить первой.
И вместо этого $current_state = getGlobal('XiRelay04.status'); можно просто написать $current_state = $params['NEW_VALUE'];

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

if ($params['NEW_VALUE']==$params['OLD_VALUE']) return;
$current_state = $params['NEW_VALUE'];
$date = date("Y-m-d H:i:s");// 2001-03-10 17:16:18

include(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();

if ($current_state == 0) {
        say("Розетка выключена $date.", 2);
        //$telegram_module->sendMessageToAll("Розетка выключена $date.");
} 
else {
        say("Розетка включена $date.", 2);
        //$telegram_module->sendMessageToAll("Розетка включена $date.");   
} 

Re: Проблема с умной розеткой (двойное срабатывание метода)

Добавлено: Сб мар 24, 2018 12:50 am
dmnbi4
Эврика!!! Спасибло большое! Всё заработало! Добавил в метод statusupdated и всё пучком!