Torino ITA)
+39 01119115797
info@netpic.it

Integrazione dati sulla qualità dell’aria di Tado in Home Assistant

Integrazione dati sulla qualità dell’aria di Tado in Home Assistant

Chi utilizza il sistema di termostati intelligenti della Tado che ben si integrano in Home Assistant con integrazione nativa, si sarà chiesto come recuperare i dati della qualità dell’aria che compaiono nel cloud Tado, sotto la scheda “Benessere ambientale” e poterli visualizzare in Home Assistant:
Cloud TADO:

 

Ora per poter integrare questi dati sono necessari alcuni elementi:
  1. user/pass dell’account al cloud Tado
  2. la posizione lat/long della propria abitazione
  3. l’ID della propria Home (casa)
  4. Home Assistant installato con l’integrazione Tado
PASSO 1
Nel mio caso ad esempio utilizzerò: tadouser@dominio.com/ABC123
Per effettuare il test delle credenziali utilizzare la seguente sintassi via browser
La chiamata alle API Deve restituire  i valori del proprio account ed in particolare l’home ID in questa forma:
“homes”:[{“id”:048111,”name”:”Via dei passeri 20″}]
Nel mio caso l’HOME ID ottenuta è 048111
PASSO 2
Accedere a https://www.latlong.net/ per ottenere la posizione della propria casa
Nel mio caso (ad esempio):
45.172550 LAT
7.161710 LONG
PASSO 3
Utilizzare l’HOME ID per effettuare la chiamata via browser e ottenere i dati sulla qualità dell’aria, secondo questa sintassi:
https://acme.tado.com/v1/homes/<HOME ID>/airComfort?latitude=45.172550 &longitude=7.161710 &username=tadouser@dominio.com&password=ABC123
Nel mio caso, ad esempio:
A questo punto dobbiamo ottenere una mezza pagina di righe con valori relativi ai nostri dati Tado, ad esempio:
{“roomMessages”: [{“roomId”: 7, “message”: “Questa stanza \u00e8 comoda e confortevole. Amerai stare in casa oggi.”, “visual”: “success”, “link”: null}, {“roomId”: 1, “message”: “Comincia a far freddo qui. Imposta la modalit\u00e0 Heat a una temperatura di circa 21\u00b0 per un po’ di tepore e comfort.”, “visual”: null, “link”: {“text”: “Avvia modalit\u00e0 Heat”, “type”: “internal”, “url”: “tado://zones/1”}}, {“roomId”: 2, “message”: “Hai caldo? Assicurati di bere molta acqua e di rimanere idratato.”, “visual”: “water_glass”, “link”: null}, {“roomId”: 4, “message”: “Non fa troppo freddo qui per essere…..
A questo punto siamo pronti per inserire il codice nel nostro file di configurazione configuration.yaml
- platform: rest
    # API call to get air quality
    # Result goes into outdoorQuality attribute in JSON format
    name: TadoAir
    verify_ssl: true
    scan_interval: 1800
    resource: https://acme.tado.com/v1/homes/0481111/airComfort?latitude=45.072550&longitude=7.561710&username=tadouser@dominio.com/&password=ABC123 # inserire i parametri del nostro account Tado
    headers:
      User-Agent: Home Assistant
      Content-Type: application/json
    method: GET
    json_attributes:
      - roomMessages
      - outdoorQuality
    value_template: 'Tado airComfort'

 # Enumerate JSON to populate various template sensors
  - platform: template
    sensors:
      air_quality:
        value_template: '{{ states.sensor.tadoair.attributes["outdoorQuality"]["aqi"]["level"] | capitalize }}'
        friendly_name: "Air Quality"
        icon_template: mdi:air-filter
        unique_id: "air_quality"
        # Pollen sensors
      air_pollen_level:
        value_template: >
          {% if states('sensor.tadoair.attributes["outdoorQuality"]["pollens"]["dominant"]["level"]') == 'unknown' %}
            None.
          {% else %}
            {{states('sensor.tadoair.attributes["outdoorQuality"]["pollens"]["dominant"]["level"]')}}
          {% endif %}
        friendly_name: "Pollen Level"
        icon_template: mdi:flower
        unique_id: "pollen_level"
      air_pollen_level_grass:
        value_template: '{{ states.sensor.tadoair.attributes["outdoorQuality"]["pollens"]["types"][0]["forecast"][0]["level"] | capitalize }}.'
        friendly_name: "Grass Pollen"
        icon_template: mdi:flower
        unique_id: "grass_pollen_level"
      air_pollen_level_grass_tomorrow:
        value_template: '{{ states.sensor.tadoair.attributes["outdoorQuality"]["pollens"]["types"][0]["forecast"][1]["level"] | capitalize  }}.'
        friendly_name: "Grass Pollen Tomo."
        icon_template: mdi:flower
        unique_id: "grass_pollen_level_tomorrow"
      air_pollen_level_weed:
        value_template: '{{ states.sensor.tadoair.attributes["outdoorQuality"]["pollens"]["types"][1]["forecast"][0]["level"] | capitalize  }}.'
        friendly_name: "Plant Pollen"
        icon_template: mdi:sprout
        unique_id: "plant_pollen_level"
      air_pollen_level_weed_tomorrow:
        value_template: '{{ states.sensor.tadoair.attributes["outdoorQuality"]["pollens"]["types"][1]["forecast"][1]["level"] | capitalize  }}.'
        friendly_name: "Plant Pollen Tomo."
        icon_template: mdi:sprout
        unique_id: "plant_pollen_level_tomorrow"
      air_pollen_level_tree:
        value_template: '{{ states.sensor.tadoair.attributes["outdoorQuality"]["pollens"]["types"][2]["forecast"][0]["level"] | capitalize  }}.'
        friendly_name: "Tree Pollen "
        icon_template: mdi:tree
        unique_id: "tree_pollen_level"
      air_pollen_level_tree_tomorrow:
        value_template: '{{ states.sensor.tadoair.attributes["outdoorQuality"]["pollens"]["types"][2]["forecast"][1]["level"] | capitalize }}.'
        friendly_name: "Tree Pollen Tomo."
        icon_template: mdi:tree
        unique_id: "tree_pollen_level_tomorrow"
      air_pollution_level_pm10:
        value_template: '{{ states.sensor.tadoair.attributes["outdoorQuality"]["pollutants"][0]["level"] | capitalize }}: {{ states.sensor.tadoair.attributes["outdoorQuality"]["pollutants"][0]["concentration"]["value"]}}μg/m³'
        friendly_name: "PM 10"
        icon_template: mdi:tree
        unique_id: "pollution_pm10"
      air_pollution_level_pm25:
        value_template: '{{ states.sensor.tadoair.attributes["outdoorQuality"]["pollutants"][1]["level"] | capitalize }}: {{ states.sensor.tadoair.attributes["outdoorQuality"]["pollutants"][1]["concentration"]["value"]}}μg/m³'
        friendly_name: "PM 2.5"
        icon_template: mdi:tree
        unique_id: "pollution_pm25"
      air_pollution_level_ozone:
        value_template: '{{ states.sensor.tadoair.attributes["outdoorQuality"]["pollutants"][2]["level"] | capitalize }}: {{ states.sensor.tadoair.attributes["outdoorQuality"]["pollutants"][2]"concentration"]"value"]}}ppb'
        friendly_name: "Ozone"
        icon_template: mdi:tree
        unique_id: "pollution_ozone"
      air_pollution_level_sulphur:
        value_template: '{{ states.sensor.tadoair.attributes["outdoorQuality"]["pollutants"][3]["level"] | capitalize }}: {{ states.sensor.tadoair.attributes["outdoorQuality"]["pollutants"][3]["concentration"]["value"]}}ppb'
        friendly_name: "Sulphur Dioxide"
        icon_template: mdi:tree
        unique_id: "pollution_sulphur"
      air_pollution_level_carbon:
        value_template: '{{ states.sensor.tadoair.attributes["outdoorQuality"]["pollutants"][4]["level"] | capitalize }}: {{ states.sensor.tadoair.attributes["outdoorQuality"]["pollutants"][4]["concentration"]["value"]}}ppb'
        friendly_name: "Carbon Monoxide"
        icon_template: mdi:tree
        unique_id: "pollution_carbon"
      air_pollution_level_nitrogen:
        value_template: '{{ states.sensor.tadoair.attributes["outdoorQuality"]["pollutants"][5]["level"] | capitalize }}: {{ states.sensor.tadoair.attributes["outdoorQuality"]["pollutants"][5]["concentration"]["value"]}}ppb'
        friendly_name: "Nitrogen Dioxide"
        icon_template: mdi:tree
        unique_id: "pollution_nitrogen"
Prima di riavviare controllare al correttezza del codice, nel menu “Strumenti per sviluppatori” e poi “Verifica configurazione”.
PASSO 4
Dopo aver riavviato HA è possibile creare una card, magari su una plancia dedicata, in cui inserire le entità che saranno diventate disponibili. Come esempio vi propongo il mio codice:
Per visualizzare i dati delle qualità dell’aria:
type: entities
entities:
  - entity: sensor.tadoair
  - entity: sensor.air_quality
    name: Qualità dell'aria
  - entity: sensor.air_pollution_level_carbon
    name: Monossido di carbonio
  - entity: sensor.air_pollution_level_pm25
    name: Polveri sottili (pm2.5)
  - entity: sensor.air_pollution_level_pm10
    name: Polveri sottili (pm10)
  - entity: sensor.air_pollution_level_ozone
    name: Ozono
  - entity: sensor.air_pollution_level_nitrogen
    name: Biossido di Azoto
  - entity: sensor.air_pollution_level_sulphur
    name: Biossido di zolfo
state_color: true
title: 'Parametri dell''aria esterna '
Per visualizzare i dati dello stato dei pollini:
type: entities
entities:
  - entity: sensor.air_pollen_level
    name: Livello pollini
  - entity: sensor.air_pollen_level_grass
    name: Graminacee
  - entity: sensor.air_pollen_level_grass_tomorrow
    name: Graminacee (domani)
  - entity: sensor.air_pollen_level_weed
    name: Piante erbacee (Artemisia, Ambrosia, Parietaria)
  - entity: sensor.air_pollen_level_weed_tomorrow
    name: Piante erbacee (domani)
  - entity: sensor.air_pollen_level_tree
    name: Piante arboree (Frassino, Betulla, Cipresso, Ulivo, Platano)
  - entity: sensor.air_pollen_level_tree_tomorrow
    name: Piante arboree (domani)
state_color: true
title: Previsione Pollini
Otterremo delle viste di questo tipo:

Ovviamente diventa poi facile creare avvisi e automazioni in base ai valori indicati di qualità dell’aria e stato di inquinamento da pollini.
Liberamente tratto da: