Страница 1 из 1

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

Добавлено: Пт окт 07, 2016 10:33 am
progit
Перечитал весь форум с сайтом, так и не получилось сделать, чтобы в базу не вносились некорректные данные с датчиков по 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']) );
Изображение Изображение

Как я понял, опция "Запускать метод при изменении" здесь не поможет.

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

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

В коде AMS подобная проверка, по крайней мере для далласов, была.

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

Добавлено: Пт окт 07, 2016 4:36 pm
progit
Это вам в коде передающего устройства проще покапаться (как я понял - есп-шки), и просто не посылать корявые значения
Корявые значения температуры и влажности приходят при включении и выключении ESP, или когда датчики отвалятся - приходит значение 254. Используется прошивка от wifi-iot.com.
Пока система на начальном этапе настройки, видел пример с 1-wire датчиками, но здесь нужно по-другому. Нужно вызывать метод при изменении параметра, и если полученное значение не соответствует IF, то не писать в базу. А вот как это сделать не удается найти...

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

Добавлено: Пт окт 07, 2016 5:25 pm
nick7zmail
Тогда просто добавьте второе свойство. В первое передаётся число из есп, при его изменении запускается метод, который переносит значение во второе свойство, если значение соответствует вашим условиям.

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

Добавлено: Пт окт 07, 2016 5:55 pm
progit
Спасибо за подсказку, создал свойство 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);
    }
}