INTRODUZIONE
Questa guida permetterà di far si che possiate collegarvi al pannello web del vostro Home Assistant (oppure utilizzare l’app dedicata: link al playstore) anche senza dover essere connessi sotto la stessa rete locale in cui è collegato il Raspberry. Che voi siate a lavoro, in viaggio o da qualsiasi altra parte, vi basterà una qualsiasi connessione internet per poter gestire tutto l’apparato domotico di casa vostra.
Per poter effettuare questa “magia” ci affideremo al servizio gratuito chiamato DuckDNS.
Colleghiamoci all’indirizzo internet https://www.duckdns.org , registriamoci e creiamo un nostro dominio con nome a piacere che rappresenterà l’url a cui collegarci da qualsiasi parte del mondo per accedere al nostro Home Assistant di casa. In questa guida utilizzeremo come esempio il seguente dominio:
lamiacasa.duckdns.org
Nel pannello di controllo di DuckDNS quindi vi verrà assegnato un token segreto simile a questo:
42983afc23-c9cc-ffb2-3281-66409ea728
Tenetevelo copiato da qualche parte perchè tra poco lo useremo. Inutile dire che questo token NON deve essere pubblicato da nessuna parte per richieste di aiuto su forum ecc… è un token segreto e dovete tenerlo tale!
CONFIGURARE DUCKDNS SU HOME ASSISTANT
Passiamo ora al settaggio dei dati DuckDNS in nostro possesso, sul nostro Home Assistant. Questa configurazione farà in modo che ci sia sempre una sincronizzazione tra il nostro dominio lamiacasa.duckdns.org e il nostro IP Internet (in quanto l’IP internet fornito dal nostro provider, a meno che non ne abbiamo richiesto uno fisso, cambia ad ogni riconnessione da parte del nostro router).
Apriamo quindi il file configuration.yaml di Home Assistant (che si trova all’interno del nostro Raspberry in: home/homeassistant/.homeassistant) e aggiungiamo il seguente codice:
duckdns: domain: lamiacasa access_token: il-tuo-token-duckdns
dove:
domain: è il nome scelto per il vostro dominio
access_token: è il vostro token segreto di DuckDNS appuntato poco fa
Salvate e riavviate ora Home Assistant.
ATTIVAZIONE DEL PORT FORWARDING SUL NOSTRO ROUTER
Per poter accedere dall’esterno al nostro Home Assistant, dobbiamo configurare il nostro router in modo che dirotti le chiamate esterne sulla porta 8123 (quella di default utilizzata da H.A.) all’indirizzo IP statico e porta 8123 del Raspberry su cui gira il nostro Home Assistant.
Apriamo di nuovo il file configuration.yaml e sotto la sezione http (se non esiste, creiamola) inseriamo tale codice:
http: base_url: lamiacasa.duckdns.org:8123
Salvare e riavviare Home Assistant.
Ora il nostro Home Assistant è raggiungibile sempre dal nostro indirizzo internet http://lamiacasa.duckdns.org:8123 anche in caso di cambio improvviso di indirizzo IP internet di casa.
DEHYDRATED: INSTALLAZIONE E CONFIGURAZIONE
Per poter far funzionare alcuni componenti e integrazioni aggiuntive di Home Assistant è necessario avere una connessione protetta https tramite SSL, altrimenti tali servizi si rifiuteranno di partire. Un servizio che richiede tali caratteristiche, ad esempio, è Haaska per integrare l’assistente vocale Alexa ad Home Assistant in forma completamente gratuita! Ma la lista è lunga!
Vediamo quindi come ricevere un certificato SSL gratuito e come rinnovarlo periodicamente in modo automatico.
Colleghiamoci tramite SSH al nostro Raspberry e una volta loggati, cambiamo l’utente in uso da pi a homeassistant:
sudo su -s /bin/bash homeassistant
posizionamoci nella cartella:
cd /home/homeassistant
ed eseguiamo:
git clone https://github.com/lukas2511/dehydrated.git
Entriamo nella cartella dehydrated e creiamo un file vuoto con il comando nano, chiamato domains.txt:
cd dehydrated/ nano domains.txt
inseriamoci all’interno:
lamiacasa.duckdns.org
(ovviamente sostituite lamiacasa con il vostro dominio). Uscite e salvate con CTRL+X / Y / invio.
Creiamo un secondo file, questa vosta senza estensione, di nome config:
nano config
copiamoci dentro:
# Which challenge should be used? Currently http-01 and dns-01 are supported CHALLENGETYPE="dns-01" # Script to execute the DNS challenge and run after cert generation HOOK="${BASEDIR}/hook.sh"
usciamo e salviamo con CTRL+X / Y / invio.
Ora creiamo il file hook.sh:
nano hook.sh
copiamoci dentro:
#!/usr/bin/env bash set -e set -u set -o pipefail domain="lamiacasa" token="your-duckdns-token" case "$1" in "deploy_challenge") curl "https://www.duckdns.org/update?domains=$domain&token=$token&txt=$4" echo ;; "clean_challenge") curl "https://www.duckdns.org/update?domains=$domain&token=$token&txt=removed&clear=true" echo ;; "deploy_cert") sudo systemctl restart home-assistant@homeassistant.service ;; "unchanged_cert") ;; "startup_hook") ;; "exit_hook") ;; *) echo Unknown hook "${1}" exit 0 ;; esac
e facciamo le dovute sostituzioni per i campi domain e token con i vostri dati.
Infine uscite salvando con CTRL+X / Y / invio.
Rendiamo lo script eseguibile:
chmod 0777 hook.sh
Generiamo il certificato:
./dehydrated --register --accept-terms
a video comparirà un messaggio simile al termine:
# INFO: Using main config file /home/homeassistant/dehydrated/config + Generating account key... + Registering account key with ACME server... + Fetching account ID... + Done!
Successivamente lanciamo il comando:
./dehydrated -c
e a video apparirà un risultato simile a questo:
# INFO: Using main config file /home/homeassistant/dehydrated/config Processing myhome.duckdns.org + Signing domains... + Generating private key... + Generating signing request... + Requesting challenge for lamiacasa.duckdns.org... OK + Responding to challenge for lamiacasa.duckdns.org... OK + Challenge is valid! + Requesting certificate... + Checking certificate... + Done! + Creating fullchain.pem... + Walking chain... + Done!
Nel caso al termine di questa esecuzione venga richiesta la password dell’utente in uso, interrompere con CTRL+C.
RINNOVO AUTOMATICO DEL CERTIFICATO
Il certificato generto ha una durata limitata, e deve essere rinnovato ogni tot di tempo. In questa guida lo aggiorneremo automaticamente ogni 2 settimane alle ore 12:00.
Eseguiamo sempre da SSH:
export VISUAL=nano; crontab -e
Posizionarsi in fondo al file e accodare il seguente codice:
0 12 1,15 * * /home/homeassistant/dehydrated/dehydrated -c | tee /home/homeassistant/dehydrated/update.log
salvare e uscire.
Questa configurazione farà sì che ogni 2 settimane (precisamente il giorno 1 e 15) il certificato si rinnovi automaticamente.
Uscire ora dall’utente homeassistant:
exit
Torniamo al blocco http all’interno del file configuration.yaml e modifichiamo come segue (avendo cura di sostituire lamiacasa con il vostro dominio):
http: ssl_certificate: /home/homeassistant/dehydrated/certs/lamiacasa.duckdns.org/fullchain.pem ssl_key: /home/homeassistant/dehydrated/certs/lamiacasa.duckdns.org/privkey.pem base_url: lamiacasa.duckdns.org:8123
Salvate e riavviate Home Assistant.
Ora il vostro Home Assistant è raggiungibile dall’indirizzo sicuro (notare che siamo passati da http ad https):
https://lamiacasa.duckdns.org:8123
SENSORE: SCADENZA DEL CERTIFICATO SSL
E’ possibile creare un sensore in Home Assistant per avere sempre sotto controllo la scadenza del certificato SSL e verificare che quindi l’automatismo di rinnovo automatico non si “inceppi” per qualsiasi motivo.
Creiamo quindi un sensore (utilizziamo il file sensors.yaml già presente, oppure potete posizionarlo anche in configuration.yaml se non volete utilizzare la suddivisione delle impostazioni):
sensor: - platform: command_line name: ssl_expiration unit_of_measurement: Giorni scan_interval: 43200 command: "/usr/bin/sudo ssl-cert-check -b -c /home/homeassistant/dehydrated/certs/lamiacasa.duckdns.org/cert.pem | awk '{ print $NF }'"
Nota: scan_interval indica ogni quanto tempo controllare lo stato del certificato, espresso in secondi. Nell’esempio stiamo indicando quindi 12 ore.
Ricordatevi ovviamente di sostituire lamiacasa con il vostro dominio.
Affinché questo sensore funzioni è necessario che ssh-cert-check sia installato.
Installatelo quindi con il comando:
sudo apt-get install ssl-cert-check
A seguire:
sudo nano /etc/sudoers
e aggiungere tale stringa (se non è già presente) al file che si aprirà:
homeassistant ALL=(ALL) NOPASSWD:ALL
Salvare, uscire e riavviare.
Ecco uno screenshot di come vi appare il sensore una volta attivo (nel caso utilizziate la grafica LOVELACE)
Di cui vi lascio un estratto per il file ui-lovelace.yaml
- icon: mdi:home-assistant title: Sistema cards: - type: glance title: SSL entities: - entity: sensor.ssl_expiration name: Prossimo rinnovo SSL icon: mdi:certificate columns: 1
AGGIORNAMENTO IP AUTOMATICO
Andiamo ora a configurare Home Assistant in modo che comunichi correttamente un eventuale cambiamento di IP da parte del nostro provider di servizi. Questo può accadere ad esempio quando per un qualche motivo il modem si riavvia.
La configurazione attuale infatti, comunica il valore dell’ IP solo all’avvio di Home Assistant e questo non è sufficente.
Colleghiamoci quindi via SSH al nostro Raspberry ed eseguiamo i tre comandi:
mkdir duckdns cd duckdns sudo nano duck.sh
Inseriamo la seguente riga nel file che ci si apre davanti (tutto in una sola riga):
echo url="https://www.duckdns.org/update?domains=<tuo-dominio>&token=<tuo-token>&ip=" | curl -k -o ~/duckdns/duck.log -K -
dove:
- <tuo-dominio> è il nome del vostro dominio, nel nostro esempio lamiacasa;
- <tuo-token> è il token assegnato.
Successivamente, salviamo e usciamo (CTRL+X, Y, Invio).
Successivamente inseriamo questi nuovi due comandi:
sudo chmod 777 duck.sh export VISUAL=nano; crontab -e
In fondo all’editor inserire questa stringa:
*/60 * * * * ~/duckdns/duck.sh >/dev/null 2>&1
Questo farà sì che l’aggiornamento avvenga ogni 60 minuti.
Infine, eseguire il comando:
sudo service cron start
per abilitare il cron.
VERIFICA
Per verificare che l’aggiornamento funzioni, eseguire i seguenti due comandi:
cd duckdns ./duck.sh cat duck.log
Se apparirà OK, significa che tutto funziona a dovere.
CONNESSIONE LOCALE / REMOTA
Siamo arrivati in fondo alla guida. Ora il vostro Home Assistant è correttamente raggiungibile sia il locale (ci mancherebbe altro!) e da remoto. L’unica cosa da ricordare è di non scordare la s in https in quanto ora la connessione è di tipo sicuro tramite certificato SSL.
Quindi i 2 indirizzi:
https://lamiacasa.duckdns.org:8123
e:
https://IP_RASPBERRY:8123
saranno equivalenti: l’unica differenza è che https://IP_RASPBERRY:8123 lo potete usare solamente se siete connessi sotto la stessa rete del Raspberry.
Complimenti per le guide innanzitutto, non riesco a capire in che file inserire “homeassistant ALL=(ALL) NOPASSWD:ALL” dopo aver scaricato ssl-cert-check, se do “sudo nano” lo salverei in un nuovo documento nella directory attuale…non è che va da qualche altra parte?
Hai ragione ho perso un pezzo! Il comando era: sudo nano /etc/sudoers
Grazie per la guida.
Incontro una difficoltà quando provo a generare il certificato:
./dehydrated –register –accept-terms
Ritorna:
This script requires an openssl binary
Puoi aiutarmi?
Grazie