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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
dmnbi4
Сообщения: 9
Зарегистрирован: Ср мар 07, 2018 1:10 pm

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

Сообщение 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 но всё тоже-самое. Я так понимаю что вызывается метод обновления состояния дважды.
Вложения
Сцена с которой происходит вызов
Сцена с которой происходит вызов
Снимок экрана 2018-03-22 в 11.05.39.png (2.23 МБ) 5906 просмотров
История (Чат с Алисой)
История (Чат с Алисой)
Снимок экрана 2018-03-22 в 11.03.05.png (63.38 КБ) 5906 просмотров
dmnbi4
Сообщения: 9
Зарегистрирован: Ср мар 07, 2018 1:10 pm

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

Сообщение dmnbi4 »

Уточняющая информация:
Вложения
Снимок экрана 2018-03-22 в 15.24.16.png
Снимок экрана 2018-03-22 в 15.24.16.png (138.92 КБ) 5880 просмотров
Снимок экрана 2018-03-22 в 15.22.44.png
Снимок экрана 2018-03-22 в 15.22.44.png (177.37 КБ) 5880 просмотров
Снимок экрана 2018-03-22 в 15.23.34.png
Снимок экрана 2018-03-22 в 15.23.34.png (163.65 КБ) 5880 просмотров
Снимок экрана 2018-03-22 в 15.33.37.png
Снимок экрана 2018-03-22 в 15.33.37.png (44.19 КБ) 5880 просмотров
Снимок экрана 2018-03-22 в 15.36.40.png
Снимок экрана 2018-03-22 в 15.36.40.png (80.13 КБ) 5880 просмотров
fandaymon
Сообщения: 1576
Зарегистрирован: Сб янв 13, 2018 5:00 pm

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

Сообщение fandaymon »

Это абсолютно нормальная работа - Нажали на иконку - вызвался метод - изменился статус - сработал метод изменения статуса - модуль отправил пакет розетке - розетка переключилась - отправила информацию об изменении статуса - статуса ещё раз проапдейтался - сработал метод.
Не очень понятно зачем говорить что розетка сработала, но если очень надо, то проверяйте старое значение статуса - если оно поменялось - выводите сообщение, если нет - не выводите
Logrus
Сообщения: 2113
Зарегистрирован: Пт апр 07, 2017 12:20 pm

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

Сообщение Logrus »

вот нормально и подробно оформлено и сразу ответ )))
viewtopic.php?f=6&t=4122&start=90#p67429
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Dicont
Сообщения: 112
Зарегистрирован: Вс дек 17, 2017 11:24 pm

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

Сообщение Dicont »

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

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

Сообщение 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.");   
} 
dmnbi4
Сообщения: 9
Зарегистрирован: Ср мар 07, 2018 1:10 pm

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

Сообщение dmnbi4 »

Подскажите как правильно применить вот эту конструкцию:

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

if ($params['NEW_VALUE']==$params['OLD_VALUE']) return; 
fandaymon
Сообщения: 1576
Зарегистрирован: Сб янв 13, 2018 5:00 pm

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

Сообщение 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.");   
} 
dmnbi4
Сообщения: 9
Зарегистрирован: Ср мар 07, 2018 1:10 pm

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

Сообщение dmnbi4 »

Эврика!!! Спасибло большое! Всё заработало! Добавил в метод statusupdated и всё пучком!
Ответить