Страница 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 и всё пучком!