Не записывать некорректные данные в базу по MQTT

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

Модератор: immortal

Ответить
Аватара пользователя
progit
Сообщения: 3
Зарегистрирован: Пт окт 07, 2016 6:43 am
Благодарил (а): 1 раз
Поблагодарили: 0

Не записывать некорректные данные в базу по MQTT

Сообщение progit » Пт окт 07, 2016 10:33 am

Перечитал весь форум с сайтом, так и не получилось сделать, чтобы в базу не вносились некорректные данные с датчиков по MQTT. Как это сделать ?
Необходимо сделать, что если полученное значение > 150 - не вносилось в базу.

Используется стандартный класс Sensors. Создано 2 объекта: Temp и Hum со свойством Value.
Данные с датчиков ESP8266 поступают с топиков:
- Температура: /esp01/dhtt1
- Влажность: /esp01/dhth1
Выполнена привязка к объектам Temp и Hum и свойству Value. В классе Sensors создан метод SensorsLimit с кодом:

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

if ( isset($params['val']) && is_numeric($params['val']) ) {
    if ( $params['val'] < 150 ) {
        $val = trim($params['val']);
        $this->setProperty('Value', $val);
    }
}
В методе объекта Hum написан код для вызова SensorsLimit. Но что-то с ним не так, не срабатывает.

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

callMethod( 'Hum.SensorsLimit', array('val' => $params['Hum']['Value']) );
Изображение Изображение

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

Re: Не записывать некорректные данные в базу по MQTT

Сообщение nick7zmail » Пт окт 07, 2016 12:11 pm

Это вам в коде передающего устройства проще покапаться (как я понял - есп-шки), и просто не посылать корявые значения, а повторить опрос датчика. Еще помимо температуры и влажности я бы посоветовал передавать health - условный параметр - на сколько успешно опрошен датчик. Изначально 100%, если значение корявое, и повторилось, скажем 5 раз - скидывать health в 0, и передавать только его без температуры и влажности. Так МД (ну и вы тоже) узнаете, что датчик отвалился, и сможете принять решение, перепроверить датчик и т.п.

В коде AMS подобная проверка, по крайней мере для далласов, была.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
progit
Сообщения: 3
Зарегистрирован: Пт окт 07, 2016 6:43 am
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Не записывать некорректные данные в базу по MQTT

Сообщение progit » Пт окт 07, 2016 4:36 pm

Это вам в коде передающего устройства проще покапаться (как я понял - есп-шки), и просто не посылать корявые значения
Корявые значения температуры и влажности приходят при включении и выключении ESP, или когда датчики отвалятся - приходит значение 254. Используется прошивка от wifi-iot.com.
Пока система на начальном этапе настройки, видел пример с 1-wire датчиками, но здесь нужно по-другому. Нужно вызывать метод при изменении параметра, и если полученное значение не соответствует IF, то не писать в базу. А вот как это сделать не удается найти...
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Не записывать некорректные данные в базу по MQTT

Сообщение nick7zmail » Пт окт 07, 2016 5:25 pm

Тогда просто добавьте второе свойство. В первое передаётся число из есп, при его изменении запускается метод, который переносит значение во второе свойство, если значение соответствует вашим условиям.
За это сообщение автора nick7zmail поблагодарил:
progit (Пт окт 07, 2016 5:56 pm)
Рейтинг: 1.16%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
progit
Сообщения: 3
Зарегистрирован: Пт окт 07, 2016 6:43 am
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Не записывать некорректные данные в базу по MQTT

Сообщение progit » Пт окт 07, 2016 5:55 pm

Спасибо за подсказку, создал свойство correct и добавил код ниже. Вроде бы работает ;)

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

if ( isset($params['NEW_VALUE']) && is_numeric($params['NEW_VALUE']) ) {
    if ( $params['NEW_VALUE'] < 150 ) {
        $val = trim($params['NEW_VALUE']);
        $this->setProperty('correct', $val);
    }
}
 
Ответить