голосовое оповещение про открытую дверь

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

yurat2008
Сообщения: 147
Зарегистрирован: Сб мар 04, 2017 7:04 pm
Благодарил (а): 15 раз
Поблагодарили: 13 раз

голосовое оповещение про открытую дверь

Сообщение yurat2008 » Вс мар 19, 2017 10:52 pm

Помогите разобраться , а то запутался совсем

Задача следующая: есть esp8266 с прошивкой wifi-iot. Majordomo крутится на raspberry pi3. Пытаюсь используя activesend по wifi используя mqtt контролировать входную дверь. При открытии и закрытии одноразово Алиса должна проговорить что двери открыты или закрыты.
Сразу говорю (статья Подключаем датчик открытия въездных ворот) не подходит. Делал все по примеру . С использованием mqtt Получается циклическая ссылка.

Сделал следующим образом

Создал класс SMK
Свойства
SMK>status, SMK>statusText, SMK>updatedTimestamp

Методы

refresh

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

$status=$this->getProperty("status");
if ($status) {
 $this->callMethod('turnOn');
} else {
 $this->callMethod('turnOff');
}
statusСhanged

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

Он  пустой
turnOff

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

$this->setProperty("status",0);
$this->setProperty("statusText","открыто");
$this->setProperty("updatedTimestamp",time());
turnOn

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

$this->setProperty("status",1);
$this->setProperty("statusText","закрыто");
$this->setProperty("updatedTimestamp",time());
Создал обьект

smk>zzz

До этого момента все ок, все работает
СпойлерПоказать
005.jpg
005.jpg (26.04 КБ) 7929 просмотров
А вот дальше есть ньансы. Переделал код с форума под себя. Если запускать вручную он работает

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

if (gg("zzz.status")=="1") {
 ClearTimeOut("reminderGarageTimer");
 say("Входная дверь закрыта.",5);
} else {
 SetTimeOut("reminderGarageTimer","runScript('reminderGarage');", 15*60);
 say("Внимание! Открывается входная дверь.",5);
} 

А если вписывать в statusСhanged или turnOn (*turnOff *) получается многократный повтор.
006.jpg
006.jpg (34.08 КБ) 7929 просмотров
Вообщем помогите разобраться куда код пристроить чтобы работало
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

Re: голосовое оповещение про открытую дверь

Сообщение DimSun75 » Пн мар 20, 2017 1:16 am

Что за скрипт reminderGarage

Отправлено с моего SM-A520F через Tapatalk
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: голосовое оповещение про открытую дверь

Сообщение nick7zmail » Пн мар 20, 2017 6:42 am

У вас скорее всего метод со свойством связаны...и каждый раз когда MQTT передаёт статус - отрабатывает метод...попробуйте через дополнительное свойство....например status2, которое будет записываться только в случае, если значение из mqtt отличается от предыдущего...и с ним уже связывайте методы...должно быть всё ок....

Ну либо ещё вариант сделать обработку в методе используя $params['OLD_VALUE']; $params['NEW_VALUE'];...или как там они называются...
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
yurat2008
Сообщения: 147
Зарегистрирован: Сб мар 04, 2017 7:04 pm
Благодарил (а): 15 раз
Поблагодарили: 13 раз

Re: голосовое оповещение про открытую дверь

Сообщение yurat2008 » Пн мар 20, 2017 10:42 am

DimSun75 писал(а):Что за скрипт reminderGarage

Отправлено с моего SM-A520F через Tapatalk
Напоминалка через 15 минут

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

say('Напоминаю, что открыта входная дверь',5);
SetTimeOut("reminderGarageTimer","runScript('reminderGarage');", 15*60); 
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

Re: голосовое оповещение про открытую дверь

Сообщение DimSun75 » Пн мар 20, 2017 10:45 am

Ну я так и подумал. А что мешает добавить запуск таймера и оповещение в методы turnOn и turnOff?

Отправлено с моего SM-A520F через Tapatalk
yurat2008
Сообщения: 147
Зарегистрирован: Сб мар 04, 2017 7:04 pm
Благодарил (а): 15 раз
Поблагодарили: 13 раз

Re: голосовое оповещение про открытую дверь

Сообщение yurat2008 » Пн мар 20, 2017 10:48 am

nick7zmail писал(а):У вас скорее всего метод со свойством связаны...и каждый раз когда MQTT передаёт статус - отрабатывает метод...
Так и есть заходит в цикл при опросе в 5 сек через mqtt
nick7zmail писал(а): попробуйте через дополнительное свойство....например status2, которое будет записываться только в случае, если значение из mqtt отличается от предыдущего...и с ним уже связывайте методы...должно быть всё ок....

Ну либо ещё вариант сделать обработку в методе используя $params['OLD_VALUE']; $params['NEW_VALUE'];...или как там они называются...
Если есть под рукой ссылка - ткните носом в пример, а то пока ничего внятного не могу нагуглить
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: голосовое оповещение про открытую дверь

Сообщение nick7zmail » Пн мар 20, 2017 11:06 am

Ссылки нет, просто заключаете ваш код целиком в условие

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

if($params['NEW_VALUE']!=$params['OLD_VALUE']) {
//тут ваш код
} 
Тогда должно срабатывать только при изменении состояния.

UPD: Ссылка оказывается есть)) http://majordomo.smartliving.ru/Hints/Onchangemethod поиском нашел.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

Re: голосовое оповещение про открытую дверь

Сообщение DimSun75 » Пн мар 20, 2017 11:17 am

Зачем усложнять? Просто в метод turnOn добавляем запуск таймера и say ("Открываю дверь"), а в метод turnOff убиваем таймер и say закрываем.

Отправлено с моего SM-A520F через Tapatalk
yurat2008
Сообщения: 147
Зарегистрирован: Сб мар 04, 2017 7:04 pm
Благодарил (а): 15 раз
Поблагодарили: 13 раз

Re: голосовое оповещение про открытую дверь

Сообщение yurat2008 » Пн мар 20, 2017 11:21 am

Скажите или это работоспособно (нет сейчас возможности проверить)

метод refresh

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

$params['oldstatus'] =$this->getProperty('oldstatus');
$oldstatus=$this->getProperty("oldstatus");
$status=$this->getProperty("status");

if ($status)==("oldstatus") {
 break;
} else {
 if ($status) {
 $this->callMethod('turnOn');
} else {
 $this->callMethod('turnOff');
}
}
 
turnOff

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

$status=$this->getProperty("status");
$this->setProperty("oldstatus","status");
$this->setProperty("statusText","открыто");
$this->setProperty("updatedTimestamp",time());
 SetTimeOut("reminderGarageTimer","runScript('reminderGarage');", 15*60);
 say("Внимание! Открывается входная дверь.",5); 
turnOn

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

$status=$this->getProperty("status");
$this->setProperty("oldstatus","status");
$this->setProperty("statusText","закрыто");
$this->setProperty("updatedTimestamp",time());
 ClearTimeOut("reminderGarageTimer");
 say("Входная дверь закрыта.",5); 
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: голосовое оповещение про открытую дверь

Сообщение nick7zmail » Пн мар 20, 2017 11:22 am

DimSun75 писал(а):Зачем усложнять? Просто в метод turnOn добавляем запуск таймера и say ("Открываю дверь"), а в метод turnOff убиваем таймер и say закрываем.

Отправлено с моего SM-A520F через Tapatalk
А кто эти методы в таком случае вызывать будет?) метод, на сколько я понял, вызывается statuschanged...2 метода к 1 свойству не привязать...turnon и turnoff вроде вообще в этой схеме не используются.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Ответить