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: xiaomi_miio.fan_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. 

Automatyzacje w nodeRED

Obecnie rozwijam automatyzacje i dużo przeniosłem właśnie tutaj wygląda to tak

Kod do skopiowania:

[
    {
        "id": "e8974576.12a5a8",
        "type": "server-state-changed",
        "z": "d82aabb3.376668",
        "name": "Iga AQI >5",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "exposeToHomeAssistant": false,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "entityidfilter": "sensor.mi_aqi2",
        "entityidfiltertype": "exact",
        "outputinitially": false,
        "state_type": "num",
        "haltifstate": "5",
        "halt_if_type": "num",
        "halt_if_compare": "gt",
        "outputs": 2,
        "output_only_on_state_change": true,
        "x": 100,
        "y": 1520,
        "wires": [
            [
                "1bb68416.5dd60c"
            ],
            [
                "6628deb.8007a2"
            ]
        ]
    },
    {
        "id": "1bb68416.5dd60c",
        "type": "api-current-state",
        "z": "d82aabb3.376668",
        "name": "AQI >5?",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "outputs": 2,
        "halt_if": "5",
        "halt_if_type": "num",
        "halt_if_compare": "gt",
        "override_topic": false,
        "entity_id": "sensor.mi_aqi2",
        "state_type": "num",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 370,
        "y": 1580,
        "wires": [
            [
                "6ce4a0e2.f46b4"
            ],
            [
                "6628deb.8007a2"
            ]
        ]
    },
    {
        "id": "6628deb.8007a2",
        "type": "api-current-state",
        "z": "d82aabb3.376668",
        "name": "Mi Air On?",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "fan.oczyszczacz_iga",
        "state_type": "str",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 740,
        "y": 1480,
        "wires": [
            [
                "d5283ad4.a11458"
            ],
            []
        ]
    },
    {
        "id": "6ce4a0e2.f46b4",
        "type": "api-current-state",
        "z": "d82aabb3.376668",
        "name": "Silent?",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "outputs": 2,
        "halt_if": "Silent",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "sensor.mi_speed2",
        "state_type": "str",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 380,
        "y": 1700,
        "wires": [
            [
                "6628deb.8007a2"
            ],
            [
                "8d82e83.e429f18"
            ]
        ]
    },
    {
        "id": "2395ca93.040fb6",
        "type": "inject",
        "z": "d82aabb3.376668",
        "name": "22:01",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "repeat": "",
        "crontab": "01 22 * * *",
        "once": false,
        "onceDelay": 0.1,
        "x": 100,
        "y": 1620,
        "wires": [
            [
                "1bb68416.5dd60c"
            ]
        ]
    },
    {
        "id": "9c86b1a8.53721",
        "type": "inject",
        "z": "d82aabb3.376668",
        "name": "08:01",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "repeat": "",
        "crontab": "01 08 * * *",
        "once": false,
        "onceDelay": 0.1,
        "x": 100,
        "y": 1580,
        "wires": [
            [
                "1bb68416.5dd60c"
            ]
        ]
    },
    {
        "id": "d5283ad4.a11458",
        "type": "trigger",
        "z": "d82aabb3.376668",
        "op1": "",
        "op2": "{\"occupancy\":false}",
        "op1type": "nul",
        "op2type": "json",
        "duration": "5",
        "extend": false,
        "units": "min",
        "reset": "",
        "bytopic": "all",
        "name": "",
        "x": 910,
        "y": 1480,
        "wires": [
            [
                "5fa88b05.523ac4"
            ]
        ]
    },
    {
        "id": "8d82e83.e429f18",
        "type": "time-range-switch",
        "z": "d82aabb3.376668",
        "name": "",
        "lat": "50.2443",
        "lon": "19.04186",
        "startTime": "8:00",
        "endTime": "22:00",
        "startOffset": 0,
        "endOffset": 0,
        "x": 440,
        "y": 1800,
        "wires": [
            [
                "905de58e.ca7958"
            ],
            [
                "b5f57af4.4af1c8"
            ]
        ]
    },
    {
        "id": "5fa88b05.523ac4",
        "type": "api-current-state",
        "z": "d82aabb3.376668",
        "name": "AQI <5?",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "outputs": 2,
        "halt_if": "5",
        "halt_if_type": "num",
        "halt_if_compare": "lt",
        "override_topic": false,
        "entity_id": "sensor.mi_aqi2",
        "state_type": "num",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 1080,
        "y": 1480,
        "wires": [
            [
                "b6f544dd.35f2a8",
                "270078dd.6f0558"
            ],
            []
        ]
    },
    {
        "id": "905de58e.ca7958",
        "type": "api-current-state",
        "z": "d82aabb3.376668",
        "name": "Mi Air On?",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "fan.oczyszczacz_iga",
        "state_type": "str",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 700,
        "y": 1560,
        "wires": [
            [
                "ff9f1edd.dcce1"
            ],
            [
                "b76ff0d9.31c37"
            ]
        ]
    },
    {
        "id": "b5f57af4.4af1c8",
        "type": "api-current-state",
        "z": "d82aabb3.376668",
        "name": "Mi Air On?",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "fan.oczyszczacz_iga",
        "state_type": "str",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 600,
        "y": 1940,
        "wires": [
            [
                "ebcd0f46.8fbd1"
            ],
            [
                "a28651fc.a679c"
            ]
        ]
    },
    {
        "id": "24841a03.34aae6",
        "type": "api-call-service",
        "z": "d82aabb3.376668",
        "name": "Fan OFF",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "debugenabled": false,
        "service_domain": "fan",
        "service": "turn_off",
        "entityId": "fan.oczyszczacz_iga",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 1380,
        "y": 1480,
        "wires": [
            []
        ]
    },
    {
        "id": "ff9f1edd.dcce1",
        "type": "trigger",
        "z": "d82aabb3.376668",
        "op1": "",
        "op2": "{\"occupancy\":false}",
        "op1type": "nul",
        "op2type": "json",
        "duration": "5",
        "extend": true,
        "units": "s",
        "reset": "",
        "bytopic": "all",
        "name": "",
        "x": 890,
        "y": 1620,
        "wires": [
            [
                "c97b9c9a.32734"
            ]
        ]
    },
    {
        "id": "b76ff0d9.31c37",
        "type": "api-call-service",
        "z": "d82aabb3.376668",
        "name": "Fan On",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "debugenabled": false,
        "service_domain": "fan",
        "service": "turn_on",
        "entityId": "fan.oczyszczacz_iga",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 890,
        "y": 1560,
        "wires": [
            [
                "ff9f1edd.dcce1"
            ]
        ]
    },
    {
        "id": "ebcd0f46.8fbd1",
        "type": "api-call-service",
        "z": "d82aabb3.376668",
        "name": "Fan set silent",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "debugenabled": false,
        "service_domain": "fan",
        "service": "set_speed",
        "entityId": "fan.oczyszczacz_iga",
        "data": "{\"speed\":\"silent\"}",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 960,
        "y": 2000,
        "wires": [
            []
        ]
    },
    {
        "id": "a28651fc.a679c",
        "type": "api-call-service",
        "z": "d82aabb3.376668",
        "name": "Fan On",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "debugenabled": false,
        "service_domain": "fan",
        "service": "turn_on",
        "entityId": "fan.oczyszczacz_iga",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 590,
        "y": 2000,
        "wires": [
            [
                "11f8c7ff.f4b098"
            ]
        ]
    },
    {
        "id": "270078dd.6f0558",
        "type": "trigger",
        "z": "d82aabb3.376668",
        "op1": "",
        "op2": "{\"occupancy\":false}",
        "op1type": "nul",
        "op2type": "json",
        "duration": "5",
        "extend": true,
        "units": "s",
        "reset": "",
        "bytopic": "all",
        "name": "",
        "x": 1240,
        "y": 1480,
        "wires": [
            [
                "24841a03.34aae6"
            ]
        ]
    },
    {
        "id": "c97b9c9a.32734",
        "type": "api-current-state",
        "z": "d82aabb3.376668",
        "name": "AQI <20",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "outputs": 2,
        "halt_if": "20",
        "halt_if_type": "num",
        "halt_if_compare": "lt",
        "override_topic": false,
        "entity_id": "sensor.mi_aqi2",
        "state_type": "num",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 670,
        "y": 1700,
        "wires": [
            [
                "b6f544dd.35f2a8"
            ],
            [
                "1c73fd77.dfe7f3"
            ]
        ]
    },
    {
        "id": "11f8c7ff.f4b098",
        "type": "trigger",
        "z": "d82aabb3.376668",
        "op1": "",
        "op2": "{\"occupancy\":false}",
        "op1type": "nul",
        "op2type": "json",
        "duration": "5",
        "extend": true,
        "units": "s",
        "reset": "",
        "bytopic": "all",
        "name": "",
        "x": 750,
        "y": 2020,
        "wires": [
            [
                "ebcd0f46.8fbd1"
            ]
        ]
    },
    {
        "id": "b6f544dd.35f2a8",
        "type": "api-call-service",
        "z": "d82aabb3.376668",
        "name": "Fan set auto",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "debugenabled": false,
        "service_domain": "fan",
        "service": "set_speed",
        "entityId": "fan.oczyszczacz_iga",
        "data": "{\"speed\":\"auto\"}",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 1080,
        "y": 1720,
        "wires": [
            []
        ]
    },
    {
        "id": "1c73fd77.dfe7f3",
        "type": "api-call-service",
        "z": "d82aabb3.376668",
        "name": "Fan set favorite",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "debugenabled": false,
        "service_domain": "fan",
        "service": "set_speed",
        "entityId": "fan.oczyszczacz_iga",
        "data": "{\"speed\":\"favorite\"}",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 690,
        "y": 1760,
        "wires": [
            [
                "c54936df.da6b28"
            ]
        ]
    },
    {
        "id": "c54936df.da6b28",
        "type": "api-current-state",
        "z": "d82aabb3.376668",
        "name": "AQI <30",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "outputs": 2,
        "halt_if": "30",
        "halt_if_type": "num",
        "halt_if_compare": "lt",
        "override_topic": false,
        "entity_id": "sensor.mi_aqi2",
        "state_type": "num",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 730,
        "y": 1820,
        "wires": [
            [
                "7de5374a.413b58"
            ],
            [
                "f3f68696.c1c008"
            ]
        ]
    },
    {
        "id": "7de5374a.413b58",
        "type": "api-call-service",
        "z": "d82aabb3.376668",
        "name": "Fan set speed 5",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "debugenabled": false,
        "service_domain": "xiaomi_miio",
        "service": "fan_set_favorite_level",
        "entityId": "fan.oczyszczacz_iga",
        "data": "{\"level\":\"5\"}",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 910,
        "y": 1800,
        "wires": [
            []
        ]
    },
    {
        "id": "f3f68696.c1c008",
        "type": "api-current-state",
        "z": "d82aabb3.376668",
        "name": "AQI <40",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "outputs": 2,
        "halt_if": "40",
        "halt_if_type": "num",
        "halt_if_compare": "lt",
        "override_topic": false,
        "entity_id": "sensor.mi_aqi2",
        "state_type": "num",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 770,
        "y": 1880,
        "wires": [
            [
                "517917bf.844988"
            ],
            [
                "91c18667.0acaa8"
            ]
        ]
    },
    {
        "id": "517917bf.844988",
        "type": "api-call-service",
        "z": "d82aabb3.376668",
        "name": "Fan set speed 8",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "debugenabled": false,
        "service_domain": "xiaomi_miio",
        "service": "fan_set_favorite_level",
        "entityId": "fan.oczyszczacz_iga",
        "data": "{\"level\":\"8\"}",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 950,
        "y": 1880,
        "wires": [
            []
        ]
    },
    {
        "id": "91c18667.0acaa8",
        "type": "api-call-service",
        "z": "d82aabb3.376668",
        "name": "Fan set speed 14",
        "server": "1f429aee.4d84d5",
        "version": 1,
        "debugenabled": false,
        "service_domain": "xiaomi_miio",
        "service": "fan_set_favorite_level",
        "entityId": "fan.oczyszczacz_iga",
        "data": "{\"level\":\"14\"}",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 960,
        "y": 1940,
        "wires": [
            []
        ]
    }
]

Uwagi

Uwaga1: od grudnia zmieniło się servicefan_set_favorite_level oraz domainxiaomi_miio (ważne zwłaszcza w nodeRED).

Uwaga2: model 2s ma 14 poziomów favorite a nie 16 jak pozostałe modele. 


Ź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!


Dziwi brak reklam? Przeczytaj dlaczego i wesprzyj projekt na  lub