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:
- user/pass dell’account al cloud Tado
- la posizione lat/long della propria abitazione
- l’ID della propria Home (casa)
- 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: