Home Guide Home Assistant – collegamento da remoto (SSL) con il servizio Duckdns

Home Assistant – collegamento da remoto (SSL) con il servizio Duckdns

7574
0
home-assistant-remoto-controllo-duckdns-ssl-3

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!

duckdns-token

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

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)

rinnovo-ssl-sensoreDi 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.