Проверка на двойное срабатывание в onNewMinute
Модератор: immortal
- Gelezako
- Сообщения: 963
- Зарегистрирован: Чт июн 02, 2016 9:33 pm
- Благодарил (а): 205 раз
- Поблагодарили: 106 раз
- Контактная информация:
Проверка на двойное срабатывание в onNewMinute
Всем привет, у меня возникла следующия проблема. Есть датчик качества воздуха, данные по MQTT передаются в МД, в методе onNewMinute делается проверка, если значение с датчика превысило определённое число, то выдаётся голосовое оповещение. Но как правило даже если начать проветривать помещение, то уровень не падает сразу и получается что голосовое сообщение я слышу ещё несколько раз. В качестве решения я думаю создать счётчик, после превышения порога делать инкремент и после повторного срабатывания проверять значение счётчика, если 0, то проговаривать, если 1, то ждать к примеру 5 мин и по истечении времени если всё норм, то сбрасывать счётчик снова в ноль. Но я вот думаючто что наверно есть более лучшее решение, сто процентов кто-то уже сталкивался с такой задачей. Может я неверно делаю оповещение, может использовать другой подход? Буду рад любым идеям, кроме как использовать метод onNewHour, во-первых проверять раз в час это слишком долго, а во-вторых он у меня почему-то не работает.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
- xor
- Сообщения: 2045
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 289 раз
- Поблагодарили: 633 раза
Re: Проверка на двойное срабатывание в onNewMinute
А вы не смотрели в сторону использования механизма ивентов:
registerEvent($eventName, $details='',$expire_in=365); -- регистрация события $eventName
registeredEventTime($eventName); -- возвращает время последней регистрации события $eventName (-1 если еще не было такого события)?
registerEvent($eventName, $details='',$expire_in=365); -- регистрация события $eventName
registeredEventTime($eventName); -- возвращает время последней регистрации события $eventName (-1 если еще не было такого события)?
- Рейтинг: 1.16%
win10 connect https://connect.smartliving.ru/profile/303
- Gelezako
- Сообщения: 963
- Зарегистрирован: Чт июн 02, 2016 9:33 pm
- Благодарил (а): 205 раз
- Поблагодарили: 106 раз
- Контактная информация:
Re: Проверка на двойное срабатывание в onNewMinute
я не знаю как работают события, можно более развёрнуто рассказать про них? Честно говоря из вышеприведённого примера я не понял сути где и как их использовать.
Последний раз редактировалось Gelezako Пн июн 05, 2017 6:02 pm, всего редактировалось 1 раз.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
- xor
- Сообщения: 2045
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 289 раз
- Поблагодарили: 633 раза
Re: Проверка на двойное срабатывание в onNewMinute
Это не пример, это выдернуто из описания.
Для меня ивенты в мжд - это глобальные переменные с временем создания, заданной длительностью и деталями.
Напр, при ухудшении качества воздуха создается ивент
registerEvent("нечем дышать", $details='в сортире',$expire_in=1/24);
в системе появится ивент нечем дышать, можно узнать где(см. ниже registeredEventDetails) и во сколько (registeredEventTime("нечем дышать"))
+ несколько функций по работе с ивентами:
Для меня ивенты в мжд - это глобальные переменные с временем создания, заданной длительностью и деталями.
Напр, при ухудшении качества воздуха создается ивент
registerEvent("нечем дышать", $details='в сортире',$expire_in=1/24);
в системе появится ивент нечем дышать, можно узнать где(см. ниже registeredEventDetails) и во сколько (registeredEventTime("нечем дышать"))
+ несколько функций по работе с ивентами:
Код: Выделить всё
function registeredEventExpire($eventName){
$even=SQLSelectOne("SELECT UNIX_TIMESTAMP(EXPIRE) t FROM events WHERE EVENT_NAME='".$eventName."'");
if (is_array ($even )) {
return $even['t'];
} else {
return false;
}
}
// Получить детали события по его имени
function registeredEventDetails($eventName) {
$even=SQLSelectOne("SELECT * FROM events WHERE EVENT_NAME='".$eventName."'");
if (is_array ($even )) {
return $even['DETAILS'];
} else {
return false;
}
}
// Удалить событие по его имени
function registeredEventDelete($eventName) {
$fn = SQLExec("DELETE FROM events WHERE EVENT_NAME='".$eventName."'");
return $fn;
}
- Рейтинг: 1.16%
win10 connect https://connect.smartliving.ru/profile/303
- Gelezako
- Сообщения: 963
- Зарегистрирован: Чт июн 02, 2016 9:33 pm
- Благодарил (а): 205 раз
- Поблагодарили: 106 раз
- Контактная информация:
Re: Проверка на двойное срабатывание в onNewMinute
спасибо за ваши примеры, но прошу ещё немного помочь разобраться, я прошерстил весь сайт на предмет ивеннотов и попытался сам разобраться, но всё что я нашёл это лишь упоминание что они есть но как с ними работать так и не нашёл.
http://majordomo.smartliving.ru/Main/Pr ... gFunctions
http://majordomo.smartliving.ru/Main/ScSecurityWireless
Что я сделал? Я взял из вашего примера строку "registerEvent("нечем дышать", $details='в сортире',$expire_in=1/24);" и выполнил её. Но я не пойму где мне искать эти события, куда они добавляются, на какой вкладке смотреть?
http://majordomo.smartliving.ru/Main/Pr ... gFunctions
http://majordomo.smartliving.ru/Main/ScSecurityWireless
Что я сделал? Я взял из вашего примера строку "registerEvent("нечем дышать", $details='в сортире',$expire_in=1/24);" и выполнил её. Но я не пойму где мне искать эти события, куда они добавляются, на какой вкладке смотреть?
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
- xor
- Сообщения: 2045
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 289 раз
- Поблагодарили: 633 раза
Re: Проверка на двойное срабатывание в onNewMinute
xray вкладка events))
А еще можно посмотреть функции работы с историей. Типа, за последний час/полчаса/n минут среднее значение не улучшилось, опять покричать.
А еще можно посмотреть функции работы с историей. Типа, за последний час/полчаса/n минут среднее значение не улучшилось, опять покричать.
- Вложения
-
- 2017-06-05_15-31-47.png (7.52 КБ) 6714 просмотров
win10 connect https://connect.smartliving.ru/profile/303
- xor
- Сообщения: 2045
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 289 раз
- Поблагодарили: 633 раза
Re: Проверка на двойное срабатывание в onNewMinute
вот что-то похожее на ваш случай у себя раскопал.
За ивенты простити))
Всё на функциях истории сделано
Определяется начало/конец дождя и сообщается не чаще раза в полчаса:
За ивенты простити))
Всё на функциях истории сделано
Определяется начало/конец дождя и сообщается не чаще раза в полчаса:
Код: Выделить всё
$rate=(float)gg("ws.rainfallRate");
$isr=gg("ws.isRain");
if ($rate>0) {
//-----------------------------------------
//оценим сам дождь
$status='';
if ($rate==0) { $status='Сухо';
} elseif ($rate<0.31) { $status='Очень слабый дождь';
} elseif ($rate<2.6) { $status='Слабый дождь';
} elseif ($rate<8.1) { $status='Умеренный дождь';
} elseif ($rate<16.1) { $status='Ливень';
} elseif ($rate<50.1) { $status='Сильный ливень';
} else { $status='Потоп!';
}
sg('ws.rainfallRateStatus',$status);
//-----------------------------------------
if ($isr==0 && gethistorymax("ws.isRain",strtotime("-30 minute"))<1) { //переход из 0 в 1
say(getRandomLine("maybe").', сейчас за окном '.gg('ws.rainfallRateStatus'),1);
}
sg("ws.isRain",1);
} else { //rainfallRate=0
sg("ws.isRain",0);
sg('ws.rainfallRateStatus','Сухо');
sg('ws.rainfallStatus','Сухо');
if ($isr==1&&getHistorymax("ws.isRain",strtotime("-30 minute"))>0) { //переход из 1 в 0
//say(getRandomLine("maybe").", дождь закончился...",1);
}
}
- Рейтинг: 1.16%
win10 connect https://connect.smartliving.ru/profile/303
- Gelezako
- Сообщения: 963
- Зарегистрирован: Чт июн 02, 2016 9:33 pm
- Благодарил (а): 205 раз
- Поблагодарили: 106 раз
- Контактная информация:
Re: Проверка на двойное срабатывание в onNewMinute
начал реализовывать на ивентах и понял что с ними чуть сложнее даже получается чем и правда иметь переменную с нулём и еденицей. Но всё равно спасибо, буду знать, уверен они пригодятся для других проектов.
ЗЫ: а откуда вы брали значение "ws.rainfallRate" ? Своя метеостанция с датчиком или какой-то паблик сервис?
ЗЫ: а откуда вы брали значение "ws.rainfallRate" ? Своя метеостанция с датчиком или какой-то паблик сервис?
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
- xor
- Сообщения: 2045
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 289 раз
- Поблагодарили: 633 раза
Re: Проверка на двойное срабатывание в onNewMinute
Своя https://ru.aliexpress.com/item/Pro-Wire ... 0.0.I858we
Причем внешний блок мог не брать - ловит две соседские)
Причем внешний блок мог не брать - ловит две соседские)
win10 connect https://connect.smartliving.ru/profile/303
-
- Сообщения: 179
- Зарегистрирован: Вс июл 31, 2016 11:24 pm
- Благодарил (а): 35 раз
- Поблагодарили: 24 раза
Re: Проверка на двойное срабатывание в onNewMinute
Ух ты, знакомая станция/продавец.xor писал(а):Своя https://ru.aliexpress.com/item/Pro-Wire ... 0.0.I858we
Причем внешний блок мог не брать - ловит две соседские)
Прицениваюсь взять но есть вопросы как оно с сервером умного дома связывается.
У вас как реализовано?
P.S. С соседями у которых с такими же уличными блоками станции оказались - интересно получилось
