Home Assistant - Xiaomi Mi Air Purifier

Home Assistant - Xiaomi Mi Air Purifier

Do tej pory aby dowiedzieć się jak duże zanieczyszczenie mamy w mieszkaniu musiałem otworzyć telefon, wyszukać aplikację ze skrótem do oczyszczacza a następnie odczekać chwilę aż się załaduje. Obecnie mam to pod jednym kliknięciu na panelu HA. A gdy zanieczyszczenie będzie powyżej 8 AQI/PM2.5 to gdy jestem w domu otrzymuję powiadomienie na @ i oczyszczać się włącza.

Ważna informacja, wskazanie opisane jako AQI w HA jest równe PM2.5. Kto nie czytał o samym oczyszczaczu, tego zapraszam do tego artykułu: Xiaomi Mi Air Purifier 2s - tani w eksploatacji oczyszczacz powietrza.

Drugą rzeczą jest to, że nawet gdy oczyszczacz jest wyłączony (czyli tak naprawdę w trybie czuwania). To cały czas mamy dostęp do tych informacji i możemy je wykorzystać w automatyzacjach. 

Integracja

Największym "problemem" jest wyciągnięcie tokena, jak to zrobić opisuję tutaj: Home Assistant - Xiaomi Roborock V1/S50/S55/S5 - sprzątanie wybranego pokoju głosowo. Jednak tym razem postanowiłem skorzystać z emulatora androida czyli BlueStacks, ściągnąłem na niego specjalną wersję aplikacji Mi Home opisanej tutaj, link do tej wersji programu czyli 5.4.38 i nie trzeba nic kombinować. Więc jedyną zmianą względem poprzedniego opisu jest skorzystanie z emulatora zamiast usuwać i instalować na nowo aplikację na telefonie ;) 

Konfiguracja

Gdy już mamy token, to do configuration.ymla dodajemy: 

fan:
# Example configuration.yaml entry
  - platform: xiaomi_miio
    host: 192.168.0.39 #ip urządzenia (pamietaj aby było ono stałe)
    token: ########################
    name: Air Purifier

Gotowe, pojawi się nam taka oto karta: 

Jak widzicie jest ona trochę zmodyfikowana ponieważ wyjąłem na wierzch trzy informacje a zrobiłem to następująco, do pliku configuration.yaml dodałem: 

sensor:
  - platform: template
    sensors:
      mi_aqi:
        friendly_name: "Air Purifier"
        unit_of_measurement: 'AQI'
        value_template: "{{ state_attr('fan.xiaomi_miio_device', 'aqi') }}"
      mi_humidity:
        friendly_name: "Air Purifier Humidity"
        unit_of_measurement: '%'
        value_template: "{{ state_attr('fan.xiaomi_miio_device', 'humidity') }}"
      mi_temperature:
        friendly_name: "Air Purifier Temperature"
        unit_of_measurement: '°C'
        value_template: "{{ state_attr('fan.xiaomi_miio_device', 'temperature') }}"

A zakładkę skonfigurowałem następująco: 

Dzięki temu mamy od razu 3 parametry dostępne zawsze w karcie oczyszczacza. Dodatkowo wyciągnąłem je od razu na górę aby mieć podgląd cały czas na parametry tego pomieszczenia:

Automatyzacja 

Jeżeli masz oczyszczacz z europejskiej dystrybucji tak jak ja to nie masz rozbudowanych automatyzacji. Mnie osobiście mega irytowało, że np. chodzi całą noc nawet jeżeli jest ok. 1 AQI albo idziemy spać a w nocy AQI podskakuje (bo zmienia się ciśnienie i wiatr) i przydało by się aby powietrze oczyścił. Dlatego dodałem 3 proste automatyzacje: 

- id: AQI_BAD
  alias: AQI Bad
  trigger:
  - above: '12'
    entity_id: fan.xiaomi_miio_device
    for:
      minutes: 5
    platform: numeric_state
    value_template: '{{ state.attributes.aqi }}'
  condition:
    condition: and
    conditions:
    - after: '10:00:00'
      before: '23:00:00'
      condition: time
    - condition: zone
      entity_id: person.grzegorz
      zone: zone.home
  action:
  - data:
      message: AQI is hight, turning on the Purifier!
      title: Jakość powietrza do bani!
    service: notify.powiadomienie_mail
  - entity_id: fan.xiaomi_miio_device
    service: fan.turn_on
  - entity_id: fan.xiaomi_miio_device
    service: fan.set_speed
    data:
      speed: auto
- id: AQI_OK
  alias: AQI OK
  trigger:
  - platform: numeric_state
    entity_id: fan.xiaomi_miio_device
    value_template: '{{ state.attributes.aqi }}'
    below: 5
    for:
      minutes: 10
  condition:
  - condition: state
    entity_id: fan.xiaomi_miio_device
    state: 'on'
  action:
  - service: notify.powiadomienie_mail
    data:
      title: Jakość powietrza dobra - wyłączam oczyszczacz.
      message: AQI is low, the Purifier is turned off.
  - service: fan.turn_off
    entity_id: fan.xiaomi_miio_device
- id: AQI_BAD_NIGHT
  alias: AQI Bad Night
  trigger:
  - above: '8'
    entity_id: fan.xiaomi_miio_device
    for:
      minutes: 3
    platform: numeric_state
    value_template: '{{ state.attributes.aqi }}'
  condition:
    condition: and
    conditions:
    - condition: state
      entity_id: fan.xiaomi_miio_device
      state: 'off'
    - condition: time
      after: '23:00:00'
      before: '10:00:00'
    - condition: zone
      entity_id: person.grzegorz
      zone: zone.home
  action:
  - entity_id: fan.xiaomi_miio_device
    service: fan.turn_on
  - entity_id: fan.xiaomi_miio_device
    service: fan.set_speed
    data:
      speed: silent

 Jak widać powyżej ograniczyłem się do tego czy jestem w domu, godzin oraz zanieczyszczenia. Niestety mam problem z ustawieniem go aby zmieniał prędkość w zależności od AQI bo coś mi nie działa to z opisu w źródłach.

Następnie dzięki komentarzom rozbudowałem lekko automatyzację: 

- id: AQI_VERY_BAD
  alias: AQI Very Bad
  trigger:
  - above: '15'
    entity_id: fan.xiaomi_miio_device
    for:
      minutes: 5
    platform: numeric_state
    value_template: '{{ state.attributes.aqi }}'
  - above: '20'
    entity_id: fan.xiaomi_miio_device
    for:
      minutes: 5
    platform: numeric_state
    value_template: '{{ state.attributes.aqi }}'
  condition:
    condition: and
    conditions:
    - after: '10:00:00'
      before: '23:00:00'
      condition: time
    - condition: zone
      entity_id: person.grzegorz
      zone: zone.home
  action:
  - data:
      message: "AQI {{ state_attr('fan.xiaomi_miio_device', 'aqi') }}, turning on the Purifier!"
      title: Jakość powietrza bardzo zła!
    service: notify.powiadomienie_mail
  - entity_id: fan.xiaomi_miio_device
    service: fan.turn_on
  - entity_id: fan.xiaomi_miio_device
    service: fan.set_speed
    data:
      speed: favorite
  - service: fan.xiaomi_miio_set_favorite_level      
    data_template:
      entity_id: fan.xiaomi_miio_device
      level: >
        {% if state_attr('fan.xiaomi_miio_device', 'aqi') | int > 30 %}
        15
        {% elif state_attr('fan.xiaomi_miio_device', 'aqi') | int > 25 %}
        12
        {% elif state_attr('fan.xiaomi_miio_device', 'aqi') | int > 20 %}
        10
        {% elif state_attr('fan.xiaomi_miio_device', 'aqi') | int > 15 %}
        8
        {% else %}
        5
        {% endif %}

Możecie zwróci uwagę na dwa aspekty: 

  • message: "AQI {{ state_attr('fan.xiaomi_miio_device', 'aqi') }}, turning on the Purifier!" - pozwala mi to wysłać od razu w powiadomieniu wartość AQI
  • {% if state_attr('fan.xiaomi_miio_device', 'aqi') | int > 30 %} - pozwala mi sterować prędkością trybu favorite w zależności od zanieczyszczenia (i nie polegać na automatyzacji) - jeżeli mamy urządzenie w przedpokoju to dopiero mocniej działając ma jakąkolwiek szanse wyciągnąć coś z pokoi, stąd dodanie takiej automatyzacji. 

Źródła: 

https://community.home-assistant.io/t/automating-air-purifiers/81745/6 

https://www.home-assistant.io/integrations/fan.xiaomi_miio


Chcesz wiedzieć więcej? Dołącz do naszej grupy na FB - będzie nam też miło jak polubisz nasz Fanpage!