Умный дом в котором я живу. Фильтрация  данных  с сенсоров

Привет, друзья. Давненько не  писал про умный дом. То  работа, то собственно  поиск решений и тестирование проблем по умному дому. 


В общем, сенсоры  и  обработка  сигналов  с  них.

Воткнув пачку  сенсоров и  настроив управление  зачастую  сталкиваемся  с  тем, что  сигнал  сенсора довольно  зашумлен и  работать с ним  тяжело. Разве  что управление  по гистерезису  будет ок.  Да и база  данных  распухает  с неимоверной  быстротой.

Умный дом в котором я живу. Фильтрация  данных  с сенсоров Умный дом, Датчик, Длиннопост

Ни про  вменяемое  управление пропорционально сигналу можно  забыть. По такому сигналу  очиститель  щелкал скоростями  в пропорциональном режиме  как дурной и это довольно  сильно раздражало,  я уже молчу  о том, чтоб прикручивать  какое-то более умное регулирование ПИ, ПД или ПИД


Итак,  данные надо  отфильтровать.


Для этого  удобнее  разбить  фильтра на raw (c сырыми данными) и filtred (c  данными отфильтрованными).

Для  этого в  configuration. yaml  приводим строку sensors к виду

sensor: !include_dir_merge_list sensor
Создаем  каталог sensor где будут описаны  все наши сенсоры.

Вообще,  если подразумевается какая-то сложная  структура  -  очень удобная штука.

Она читает  все  файлы  по  дереву в  каталоге sensor  и лепит из них  один большой конфиг.
Гораздо удобнее  чем лазить по  конфигу в  тысячу -другую строк.

В файле raw.yaml создаем  "сырой" сенсор, который  читает  значение атрибута 


pm25_sensor_raw:
friendly_name: PM25  raw
value_template: "{{ states('sensor.co2_cleargrass') }}"
unit_of_measurement: 'AQI'
Далее  методом проб и  ошибок  был  подобран  фильтр  который  дает отличную  кривую, с которой  уже можно работать:
- platform: filter
name: "PM2.5_raw"
entity_id: sensor.pm25_sensor_raw
filters:
- filter: outlier
window_size: 10
radius: 3.0
- filter: lowpass
time_constant: 10
precision: 1
Как видим  он  состоит из  НЧ фильтра и фильтра выбросов.

Но  здесь меня  ждала  засада.  Если вдруг  датчик отвалился, фильтра переставал  работать и  отваливалась автоматизация, т.к. фильтрованный сигнал  перестает быть числом.

Лечение  данной проблемы  заняло у меня довольно  много времени,  но  был найден оптимальный вариант: присваивать  значение, если  значение фильтра неизвестно.

Встал вопрос какое. Можно присвоить  очень большое или  маленькое значение -  это решение отлично, если фильтр  быстро  поднимется.

Мой вариант -  присваивать  значение  чуть  выше нижнего порога регулирования. Это позволит  не  молотить  исполнительным устройством на полную,  и дождаться реакции  оператора на  сообщение в телегу "датчик сдох".

Вот окончательный код  сырого датчика

pm25_sensor_raw:
friendly_name: PM25  raw
value_template: >
{% if states.sensor.co2_cleargrass.state is defined %}
{{ states('sensor.pm25') }}
{% else %}
5
{% endif %}
unit_of_measurement: 'AQI'
В итоге  мы получаем  вот  такое качество  сигнала
Умный дом в котором я живу. Фильтрация  данных  с сенсоров Умный дом, Датчик, Длиннопост

И  за час

Умный дом в котором я живу. Фильтрация  данных  с сенсоров Умный дом, Датчик, Длиннопост

С таким сигналом  управления  уже  можно  работать. и  даже простейшее П-регулирование обеспечивает комфортное  управление.

И размер  бд (хранятся  эвенты за неделю) упал  с 1,8 гб до 400 мегов

Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий

Это датчик загрязненности воздуха? Что Вы регулировать собираетесь по его данным?

раскрыть ветку (3)
Автор поста оценил этот комментарий

Датчик pm2. 5 по его данным и по данным tvoc регулируется скорость очистителя воздуха.

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

Первое, что попросят, или к чему придете сами - изменять скорость очистителя сравнительно редко, чтобы подвывания не раздражали.

Так что такая фильтрация не особо и нужна, уважаемый коллега, достаточно простого усреднения/интегрирования за фиксированный интервал времени.   

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Так  эта задача и решалась. Всплески  резко   переключали   скорость  туда- обратно.  Бесило  безумно. Плавное  изменение управляющего сигнала решает 2  задачи: сохранение скорости  реакции на  повышение  фоновых показателей  и  фильтрация  случайных воздействий.  скажем   дыхнуть на   датчик co2 не   покажет  безумный  моментальный рост показаний.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку