Casa domotica con Telegram e Home Assistant

L'angolo dei lettori

Scritto da Vincenzo Caputo

Benvenuti nella rubrica "l'angolo dei lettori". Questo spazio è una sezione del blog che permette a chiunque di scrivere un articolo o realizzare un video, effettuare prove e test che riguardano il mondo della tecnologia e proporne la pubblicazione su queste pagine.

Oggi Nicola Bertelli, che ringraziamo per questa splendida guida, ci spiegherà come come gestire casa con Telegram.

Per molti scegliere di utilizzare questo servizio per gestire la domotica può sembrare inutile e soprattutto limitato rispetto magari all’interfaccia web di Home Assistant o altri assistenti.

Il primo motivo per cui si potrebbe scegliere questa via è l’immediatezza nell’inviare comandi al nostro sistema, avremo cioè i comandi che realmente ci interessano (solo quelli) a portata di mano senza attendere il caricamento di interfacce grafiche o il refresh di una pagina web.

Il secondo motivo è il superamente di quello che per molti è uno scoglio insormontabile: il port forwarding.

Se non volete per questioni di sicurezza o il vostro gestore non lo permette o semplicemente non siete in grado, non è necessario aprire porte in entrata nella vostra rete, inoltre una connessione criptata diventa superflua.

Telegram fornisce delle API pubbliche per la creazione e la gestione dei bot e Python mette a disposizione delle librerie per sfruttarle a pieno con la solita semplicità e personalizzazione che questo linguaggio ci regala.

Il bot che ho creato, interagirà con le API HTTP di Home Assistant che ci permettono di azionare switch, script, automazioni, servizi ecc ecc (http post) ma anche leggere sensori, stati degli switch ecc ecc (http get). Nel mio esempio in particolare andremo a gestire gli switch del salotto creati qui:

https://www.vincenzocaputo.com/picoblog/view/132/controllo_degli_interruttori_di_casa_con_raspberry_pi

Non perdiamo tempo e iniziamo a creare il nostro bot. Apriamo Telegram, andiamo nella barra delle ricerche e digitiamo Botfather

Selezioniamo e avviamo il bot.

digitiamo e vediamo tutti i comandi che abbiamo a disposizione

Ovviamente scegliamo /newbot inseriamo nome e username del bot a piacere, lui ci darà un token da utilizzare per accedere alle API HTTP

cambiamo l’immagine selezionando tra i comandi /setuserpic: selezionate il vostro bot e allegate l’immagine che volete caricare

Fatto questo andiamo a personalizzare i comandi proposti dal nostro Bot come segue:

  • Nella chat di Botfather lanciamo il comando (digitando) /mybots,
  • selezioniamo il bot che vogliamo modificare e poi Edit Bot,
  • selezioniamo edit Commands
  • inserite i due comandi come dall’immagine seguente ed inviate il messaggio

riceverete un messaggio di conferma

Ora tornate nella barra di ricerca e digitate lo username del vostro bot, selezionatelo e avviatelo. Se non vedete ancora l’immagine ed i  comandi aggiunti chiudete e riavviate Telegram.

Passiamo alla programmazione in python del nostro bot.Diamo per scontato che siete in grado di accedere alle cartelle di sistema ed al terminale.

Ora dobbiamo chiederci: dove vogliamo far girare il nostro bot?Potete usare il Raspberry che molti di voi usano per Home Assistant, potete usare il Raspberry che controlla le luci di casa, un qualsiasi pc o mini pc con qualsiasi distribuzione Linux. L’unica condizione necessaria è che sia connesso alla stessa rete dove si trova Home Assistant.

Bene, apriamo il terminale e installiamo la libreria necessaria alla gestione dei bot di Telegram con il seguente comando:

sudo pip install telepot

Ora scarichiamo dal mio Drive il file primo_avvio.py che ho creato appositamente per ricavare il valore di chat_id:

curl -L -o primo_avvio.py "https://drive.google.com/uc?export=download&id=1IZ2Hzr8PU3cdj1HmSvlnt7DnIOSAr4Ls"

adesso inseriamo il token alla riga 11, al posto del AAAAA:nano primo_avvio.pyspostatevi alla riga suddettamodificate, control+x, s seguito da invio

ora lanciate il file:python primo_avvio.py

vi comparirà Listening….

Lasciate in esecuzione il terminale e tornate al vostro bot su telegram, digitate qualunque cosa e inviate il messaggio, lui risponderà con il nostro nome e con il chat_id, annotatelo.

Questo è un valore numerico che vi rappresenta in qualunque chat o bot di Telegram, non a caso coincide con quello inserito per le notifiche in Home Assistant.

Bene, torniamo al nostro terminale, creiamo la cartella e scarichiamo il file di gestione vero e proprio del bot:

mkdir bot_casacd bot_casa

Scarichiamo il filecurl -L -o domotica_casa.py "https://drive.google.com/uc?export=download&id=14z1Jw6294nYWGH0UxZyDLimCytWw0UGr"

Qui dovremo fare diverse modifiche:

Al posto di  ‘http://INDIRIZZO-HOME-ASSISTANT:8123/api/states/’ (attenzione all’apice all’inizio e alla fine) dobbiamo inserire il nostro indirizzo di Home Assistant, può essere un indirizzo IP (http://192.168…..) , oppure tipo https://pincopallino.duckdns.org, o anche http://pincopallino.duckdns.org, è molto importante scrivere la parte finale :8123/api/states/

Come vedete ho impostato due funzioni, una per la lettura dello stato delle luci o di qualsiasi altra entità di Home Assistant, un’altra per richiamare il servizio switch toggle. Utilizzando quest’ultima, entrando con il nome dello switch (switch.luce_cucina per esempio) se è la luce accesa la spegnerà altrimenti verrà accesa.

Inserite la vostra chat_id al posto di 12345678, questo permetterà solo a voi di utilizzare il bot. Per permettere ad altri di interagire con il vostro bot dovete modificare la condizione con quanti numeri di chat_id vi servono come nell’esempio seguente:

if (chat_id==12345678) or (chat_id==87654321) or  (chat_id==00000000):

In questa fase imposto on_chat_message in modo che quando seleziono il comando o semplicemente digito /luci_salotto compariranno 5 pulsanti: i primi 4 lanciano la funzione toggle vista in precedenza, richiamando una on_callback_query, l’ultimo invece mi informerà sullo stato attuale delle luci.

Vorrei far notare che quando lancio il comando della funzione toggle, subito dopo vado a leggere lo stato effettivo dello switch, il messaggio di risposta corrisponde quindi allo stato effettivo della nostra entità

Ora andiamo in fondo al file e Inseriamo il nostro token:

Salviamo il tutto e avviamo:python domotica_casa.py

Questo è quello che otteniamo da Telegram interagendo con i pulsanti a video

Sul nostro terminale vedremo la corrispondenza della query eseguita

Se tutto lavora al meglio non dobbiamo fare altro che mettere nell’avvio al boot il nostro file domotica_casa.py.

Se state usando lo stesso Raspberry della guida precedente modificate il file avvio.sh con due righe:

sleep 5 &python /home/pi/bot_casa/domotica_bot.py &

Riavviamo e avremo il nostro bot operativo.

Bonus:

Se volete che il bot vi invii un messaggio vocale con lo stato delle vostre luci, al posto di lanciare il comando indicato precedentemente   curl -L -o domotica_casa.py ………

digitate:

sudo pip install gTTScurl -L -o domotica_casa.py "https://drive.google.com/uc?export=download&id=12i2oYfTt7gM5K8wBd4qnIlZrpsIrDZxa"

Come al solito è un unico comando da eseguire in un’unica volta, lanciate il vostro file python (python domotica_casa.py) dopodichè selezionate stato dalla vostra inline Keyboard e, dopo pochi secondi vi arriverà un messaggio vocale dove vi descriverà lo stato delle luci.

Bene ringraziamo ancora una volta Nicola per quest'ottima guida ed andiamo a guardare il solito video dimostrativo di fine articolo dove possiamo vedere il sistema in azione. Buona visione!

Produrre e aggiornare contenuti su vincenzocaputo.com richiede molto tempo e lavoro. Se il contenuto che hai appena letto è di tuo gradimento e vuoi supportarmi, clicca uno dei link qui sotto per fare una donazione.

Vincenzo Caputo

Nato a Matera, il 1° novembre 1977. Sono da sempre appassionato di tecnologia e ho un'esperienza lavorativa ventennale nel settore IT. Mi piace sperimentare e cercare sempre nuove soluzioni e soprattutto mi piace comunicare le mie esperienze agli altri.


Vai ai commenti