Salvare i dati di Home Assistant su Google Sheets

Argomento: Configurazioni |
Livello: Novizio (Novizio, Esperto, Pro) |
Difficoltà: Media(Bassa, Media, Alta) |
Introduzione
In questo articolo vedremo come salvare i dati delle entità di Home Assistant su Google Sheets usando due approcci diversi, IFTTT e Appdaemon:
- IFTTT è uno strumento immediato, semplice ed adatto alle esigenze della maggior parte degli utenti
- Appdaemon è un potente sistema per la scrittura di app per Home Assistant che permette un elevato grado di personalizzazione di ciò che vogliamo ottenere.
Questo tipo di salvataggio delle entità, di HA, principalmente sensori, può risultare molto utile per visualizzare velocemente su Google Sheets i dati di consumo elettrico o le temperature medie della nostra abitazione e creare dei grafici o delle aggregazioni per esempio tramite tabelle pivot. Ciò non toglie che la soluzione target per il salvataggio dei dati resta un DB come InfluxDB, ottimizzato per la conservazione dei dati storici e la visualizzazione con Grafana, se sei curioso puoi dare un ‘occhiata ai nostri articoli sul tema (Ottimizzare la conservazione dei dati di HA e Configurazione e installazione di Grafana)
Per chi usa Nodered è disponibile una guida su Youtube di Nodered Italia che realizza quanto illustrato in questo articolo.
Come prerequisito per seguire e mettere in pratica quanto troverete nell’articolo, occorre avere una conoscenza di base di Home Assistant e nel caso si scegliesse di usare Appdaemon una certa padronanza dei più comuni costrutti di programmazione in Python.
IFTTT & Appdaemon: cosa sono?
IFTTT, abbreviazione di If This Then That, che tradotto in italiano suona più o meno “se questo allora quello” ovvero se avviene un certo evento allora “scatena” una azione, è un servizio web gratuito (almeno fino a tre applet) che permette la creazione di semplici catene di condizioni, chiamate applet. Le applet mettono quindi in comunicazione i dispositivi e le app che usiamo abitualmente tra cui Twitter, Dropbox, Amazon Alexa e Google Assistant in modo da fare azioni che singole app non sono in grado di fare. Ad esempio, un’applet può sincronizzare una todo-list di Alexa con Google Calendar. Oppure creare eventi nel calendario di iPhone, tramite Google Assistant. Nel nostro use-case useremo IFTTT per mettere in comunicazione HA con Google Sheets.
AppDaemon, di cui abbiamo parlato diverse volte nel corso degli ultimi due anni (Appdaemon:automazioni al massimo) è un ambiente di esecuzione multithread Python per la scrittura di applicazioni per Home Assistant. Non è pensato per sostituire script e automazioni, ma piuttosto per completare e potenziare quanto già offre Home Assistant. Per molte cose le automazioni funzionano bene e possono essere molto efficaci. Tuttavia, esistono automazioni molto complesse per le quali diventa difficile usare YAML: AppDaemon, in queste situazioni, ci da una mano.
Metodo 1: IFTTT
Configurazione di IFTTT
Circa 3 anni fa abbiamo scritto un articolo su IFTTT, di tempo ne è passato ma comunque è un buon punto di partenza per capire nel dettaglio come funziona questo servizio. Vediamo ora i passi necessari per configurare IFTTT:
- Creare un account su IFTTT (https://ifttt.com/user/new?wp_=1) e aggiungete i servizi Google Sheets e WebHook
- Configurare IFTTT su HA attraverso la guide ufficiale che troverete qui: https://www.home-assistant.io/integrations/ifttt/ , vi ricordo che per poter ricevere eventi da IFTTT, l’istanza di Home Assistant deve essere accessibile dal Web e devi avere configurato un URL esterno, a questo scopo vi consiglio di seguire questa guida.
- Se sei troppo pigro e non vuoi andare a cercare sul sito ufficiale di HA la procedura di installazione eccola di seguito: nella barra laterale fare clic su Impostazioni, dal menu di configurazione selezionare: Integrazioni, In basso a destra, fai clic sul pulsante Aggiungi integrazione, dall’elenco, cerca e seleziona “IFTTT“, segui le istruzioni sullo schermo per completare la configurazione.
Dopo aver seguito i passaggi indicati vi troverete l’integrazione configurata come nella figura sottostante dove troverete i dati affinchè HA possa ricevere i dati da IFTTT, cosa che per questo use-case non è strettamente necessaria ma può far comodo per altri usi.

Integrazione IFTTT
Per poter invece inviare i dati da Home Assistant verso IFTTT occorre segnarsi l’API key recuperabile qui e visibile nella figura sottostante come parte finale dell’URL: https://maker.ifttt.com/use/MYAPIKEY
, configurarla in HA come di seguito e riavviare:
1 2 3 |
# Example configuration.yaml entry ifttt: key: MYAPIKEY |

API key IFTTT
Configurazione di IFTTT
Eccoci alla parte più interessante ovvero come configurare IFTTT in modo che riceva i dati da HA e li salvi su un foglio Google Sheets, vediamo i passi da completare:
- Creiamo una applet IFTTT applet del tipo ‘IF Webhook THEN Google Sheets’ nella pagina https://ifttt.com/create/
- nella parte IF inseriremo l’evento di esempio “sensor_balcone“
- nella parte THEN inseriremo l’azione “add row to spreadsheet” come in figura sottostante, in questa fase è richiesta autorizzazione alla comunicazione di IFTTT verso il vostro account Google.

Applet IFTTT
La parte “THEN” risulterà come nella figura sottostante dove sono editabili i campi:
- “spreadsheet name” dove inserire in nome del documento GSheets lasciare quello proposto
- “formatted row”: dove ci sono i campi che conterrà il foglio di lavoro
- “drive folder path”: il path del file GSheets dentro Google Drive

Action IFTTT
Automazione in HA
Come automazione di esempio andiamo a configurare il salvataggio dei dati di temperatura, umidità e pressione verso IFTTT e quindi verso Google Sheets, le entità sono da personalizzare secondo quanto presente nel proprio HA:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Example configuration.yaml Automation entry automation: alias: sensor_balcone_spreadsheet id: 'sensor_balcone_spreadsheet' trigger: - platform: time_pattern minutes: "/15" action: service: ifttt.trigger data: event: 'sensor_balcone' value1: "{{ states('sensor.temperature_balcone')}}" value2: "{{ states('sensor.hum_balcone')}}" value3: "{{ states('sensor.pressure_balcone')}}" |
L’automazione è molto semplice:
- nella parte di
trigger
è specificato l’invio dei dati ogni 15 minuti, variabile a piacere; - nella parte
action
è specificato quali dati di HA inviare con il formato configurato nella parte “THEN” di IFTTT.
Il risultato sarà la visualizzazione su Google Sheets del documento IFTTT_Maker_Webhooks_Events
come nella figura sottostante, a cui è stato aggiunto anche un grafico (ovviamente costruito in maniera manuale partendo dal menù “Inserisci –> Grafico“); da notare che IFTTT specifica in 2000 il numero massimo di righe per foglio, quando si raggiunge questo numero viene creato un altro foglio.
Nel caso ci fossero dei problemi di interpretazione delle cifre decimali da parte di Gsheet, si può modificare l’automazione in modo da sostituire il punto con la virgola, ad esempio così: {{ states('sensor.pressure_balcone') | replace (".",",") }}
.

Esempio su GSheets
Metodo 2: Appdaemon
Installazione Appdaemon
L’installazione e la configurazione iniziale di Appdaemon sono state già trattate qui, quindi vi invito a leggere la guida e configurare il sistema in modo da trovarvi con una installazione funzionante. I file che compongono l’app sono scaricabili da qui:
L’altra cosa da fare è inserire nella configurazione dell’addon Appdaemon le librerie necessarie per far funzionare l’app, quindi nella barra laterale, Supervisor --> Appdaemon 4 --> Configuration
inseriamo:
1 2 |
python_packages: - gspread |
Accesso di HA a Google Sheets
Per poter utilizzare Google Sheets occorre procedere con l’abilitazione delle Google API, i passi sono simili alla configurazione dei Google Home che potete vedere a questo link, ed inoltre sono presenti numerose guide on-line che trattano questo argomento, la cosa migliore resta comunque affidarsi alla documentazione delle libreria Python Gspread che è quella utilizzata per la creazione dell’app, altri link sono in bibliografia.
Vediamo comunque i passaggi necessari per la modalità con account di servizio (“service account“) cioè un account Google destinato a bot che devono autenticarsi ed essere autorizzati ad accedere ai dati tramite API di Google. Poiché si tratta di un account separato, per impostazione predefinita non ha accesso a nessun foglio di lavoro finché il foglio non è condiviso con questo account.
- Creare un documento su Goggle Sheets e salvalo per esempio come “HA“
- Accedi alla console delle API di Google e crea di un nuovo progetto o usa un progetto già censito
- Vai su “API e servizi> Dashboard“, scegli “Abilita API e Servizi” e abilita le API di Google Drive e Google Sheets (link).
- Vai su “API e servizi> Credenziali” e scegli “Crea credenziali> Account di servizio“.
- Compilare il modulo, Fare clic su “Crea” e “Fine“.
- Premi “Gestisci account di servizio” sopra Account di servizio.
- Prem su ⋮ vicino all’account di servizio creato e selezionare “Gestisci chiavi“, quindi fare clic su “AGGIUNGI CHIAVE> Crea nuova chiave“.
- Seleziona il tipo di chiave JSON e premere “Crea“.
- Una volta creato e salvato il file JSON tieni da parte il valore del campo “client_email“, vai sul foglio “HA” del primo punto ed effettua la condivisione con l’indirizzo mail recuperato dal file JSON.
- Salva il file JSON dentro la cartella
/config
di HA o all’interno di una sottocartella
App Gsheets
L’app realizzata, che prende spunto da alcuni post del forum ufficiale, è in grado di scrivere su un file di GSheets ad intervalli regolari i dati dei sensori che sono specificati nel file di configurazione gsheets.yaml, andiamo a vedere come è composto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
google_sheets_temp: module: gsheets class: GSheets SpreadSheetName: "HA" PathJSON: "/config/file-esempio.json" RunEverySec: 1200 # every 20 mins RunOnceDay: false upload: [ { sheetName: "TH Balcone", nameInSheet1: "Temperatura", entity1: "sensor.balcone_temperature", nameInSheet2: "Umidità", entity2: "sensor.balcone_humidity", nameInSheet3: "Batteria", entity3: "sensor.balcone_battery" }, { sheetName: "TH Sala", nameInSheet1: "Temperatura Sala", entity1: "sensor.sala_temperature", nameInSheet2: "Umidità", entity2: "sensor.sala_humidity", nameInSheet3: "Pressione", entity3: "sensor.sala_pressure", nameInSheet4: "Batteria", entity4: "sensor.sala_battery" } ] |
Questi sono i parametri fondamentali da specificare:
module: gsheets, class: GSheets
: quest sono i parametri standard Appdaemon relativi all’appSpreadSheetName: "HA"
: questo è nome del documento GSheets su cui andremo a salvare i datiPathJSON: "/config/file-esempio.json"
: specifica il path del file JSON con le credenziali del service accountRunEverySec: 1200
: indica in secondi l’intervallo di tempo tra due successive scritture sul foglio di lavoro, nell’esempio 20 minuti (pari a 1200 secondi)RunOnceDay: false
:indica se il dato deve essere scritto solo ogni fine giornata, setrue
l’impostazione precedente non viene presa in considerazione e i dato viene scritto ogni giorno alle “23:59:40“
Sezione upload:
questa è la sezione fondamentale che specifica in quali fogli all’interno del file sono salvati i dati, i sensori dai quali i dati sono presi e le intestazioni delle colonne della struttura tabellare:
sheetName: "TH Balcone"
: foglio interno sul quale scrivere i datinameInSheet1: "Temperatura", entity1: "sensor.balcone_temperature"
: nameInSheet1 è il nome della colonna 1, entity1 è il nome dell’entità che sarà salvato su GSheetsnameInSheet2: "Umidità", entity2: "sensor.balcone_humidity"
: in analogia con i campi precedenti, da notare il codice numerico progressivonameInSheet3: "Batteria", entity3: "sensor.balcone_battery"
: in analogia con i campi precedenti, da notare il codice numerico progressivo
All’interno della sezione upload:
è possibile inserire più fogli ognuno con i dati di un sensore diverso.
La parte Python (gsheets.py) è l’app vera e propria ed è strutturata come una qualsiasi app realizzata con Appdaemon, vediamo i punti salienti:
-
- modulo
initialize
: recupera i dati specificati in gsheets.yaml e richiama il modulopublish_to_gs
. - modulo
publish_to_gs
: effettua la vera e propria scrittura sul documento dei dati dei sensori specificati in gsheets.yaml, il suo scopo e di verificare che il documento sia accessibile, che i fogli interni siano creati e di aggiungere su ogni foglio i dati recuperati, inserendo una riga ad ogni iterazione. - modulo
checkSheetsCreated
: restituisce una lista di tutti i fogli nel documento GSheets, ed è utilizzato nel metodo precedente
- modulo
Il risultato è visibile nell’immagine sottostante:

GSheets con Appdaemon
Visualizzazioni grafici GSheets in HA
Dopo aver salvato i dati dei sensori su GSheets il passo successivo è quello di visualizzare in Home Assistant un grafico relativo ai dati pubblicati, niente di più facile:
- dopo aver realizzato il grafico clicca su ⋮ in alto a destra e quindi clicca su “Pubblica grafico”;
- nella finestra che si aprirà effettua la pubblicazione del grafico e ricopiate da qualche parte il link generato, la figura sottostante fa vedere il risultato della pubblicazione;
- usa una card lovelace come “Picture card” inserendo il link del punto precedente, per visualizzare il grafico.

Pubblicazione del grafico GSheets
Conclusioni
L’articolo ha illustrato due metodi per scrivere i propri dati su Google Sheet, uno più semplice ed uno più complesso ma che permette ampie possibilità di personalizzazione, abbiamo visto anche come visualizzare in Home Assistant dei grafici realizzati attraverso i dati importati in GSheets.
Entrambi i metodi richiedono di customizzare la parte relativa ai sensori i cui dati saranno esportati e scritti nei fogli Google Sheets, ma niente di particolarmente complicato.
Se avete qualcosa da suggerire ci vediamo nei gruppi Telegram e Facebook.
Link utili e spunti interessanti:
-
-
-
- Post Community: https://community.home-assistant.io/t/writting-sensors-values-to-google-sheets/15864/
- Documentazione gspread: https://gspread.readthedocs.io/en/latest/
- gspread service account: https://gspread.readthedocs.io/en/latest/oauth2.html#for-bots-using-service-account
- Abilitazione API: https://www.analyticsvidhya.com/blog/2020/07/read-and-update-google-spreadsheets-with-python/
-
-