Translate

giovedì 26 novembre 2020

Domotica accessibile dall'esterno della casa

 Gli spunti per questo articolo li ho presi sempre qui: indomus.it-collegarsi-da-remoto

Abbiamo due aspetti per poter accedere ad Home Assistand dall'esterno della nostra rete domestica :

1) riuscire ad arrivarci
2) fare in modo che l'accesso sia il piu protetto possibile 

Partiamo dal primo.

Avendo l'ADSL o fibra che sia, l'operatore telefonico potrebbe, e lo fà, a sua discrezione cabire l'indirizzo IP assegnato al router casalingo;
quindi quando navighiamo abbiamo di volta in volta indirizzi ip differenti. 

Per renderse conto basta travare un sito come https://www.mio-ip.eu che mostra l'indirizzo IP del proprio accesso ad internet.

Quando si naviga, poco male.. il problema è quando qualcuno (noi) dall'esterno vuole conttarci, ma noi abbiamo cambiamo "indirizzo" ... 

Scordiamoci di avere un ip Fisso (costa parecchio farselo assegnare fisso...), a noi basta che ci sia un sitema mnemonico per raggiungere la nostra Rete; per fare questo utilizzeremo Duck DNS https://www.duckdns.org

a cui dovremo accedere/registrarci e creare un nostro sottodominio (in questo caso ipotizziamo "casamia")

in modo da poter navigare ad un indirizzo del tipo

casamia.duckdns.org

All’interno della vostra sezione privata di DuckDNS troviamo anche un campo chiamato “token“ simile a questo:

e3ff465f-c6d6-acb1-4416-44b2af152111

 


Ora implementiamo su Home Assistant un elemento che, a fronte del cambiamento dell’IP Internet del proprio modem/router, comunichi tale variazione a DuckDNS, in modo da aggiornare la risoluzione dell’FQDN.

Per far questo è sufficiente aggiungere al file configuration.yaml di Home Assistant il seguente codice:

duckdns:

  domain: casamia

  access_token: il-tuo-token-duckdns

dove:

domain nome di dominio definito sul servizio DuckDNS (inteso come terzo livello, quindi nel caso sopra solo “casamia“)
access_token toker definito da DuckDNS

Una volta inserita questa configurazione e rilanciato Home Assistant, DuckDNS conoscerà l’IP del vostro modem/router ma questo solo in caso di riavvio di Home Assistant

sudo systemctl restart home-assistant@homeassistant


Quel che faremo ora è definire un processo automatico che, una volta ogni tot, invii la richiesta di (eventuale) aggiornamento verso DuckDNS. 

creeremo uno script ...

mkdir duckdns
cd duckdns
sudo nano duck.sh

inserendo la seguente stringa (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 (guardando immagine sopra di DuckDNS):

  • <tuo-dominio> è il nome del tuo dominio, inteso come terzo livello, quindi nel caso sopra solo "casamia";
  • <tuo-token> è il token assegnato al proprio dominio.

Una volta formattata opportunamente la stringa, è necessario copia-incollarla dentro l’editor.
Successivamente, salvare, uscire (CTRL+X, Y, Invio) e cambiare i permessi del file appena generato con:

sudo chmod 777 duck.sh

Per automatizzare, dovremo usare il contab, un servizio di sistema unix che esegue comandi secondo una certa logica temporale.
Lanciamo il crontab in edit usando come editor "nano".

export VISUAL=nano; crontab -e

andiamo in fondo al file che si apre, ed inseriamo la riga:

*/60 * * * * ~/duckdns/duck.sh >/dev/null 2>&1

che dice al crontab di eseguire lo script dai noi creato (duck.sh) ogni 60 minuti. Per maggiori dettagli riguardo alla sintassi di crontab consiglio il sito  https://crontab.guru

Infine dovremo far partire/installare il servizio di crontab:

sudo service cron start

Ora testiamo che l'aggiornamento dell'Ip pe ril nostro dominio funzioni correttamente:

./duck.sh
cat duck.log

Se apparirà “OK“, signfica che la comunicazione verso DuckDNS è stata effettuata e l’aggiornamento richiesto correttamente.

 

Attivare il port forwarding sul router

Per accedere, dalla rete esterna, al nostro Home Assistant è ora necessario configurare il router in modo che qualsiasi chiamata esterna verso la porta (8123, o altra) venga girata direttamente all’IP statico del Raspberry sulla porta 8123, ovvero quella di Home Assistant.

Per effettuare l’attività di configurazione del port forwarding si consiglia la lettura di questo articolo; i dati necessari applicando tale guida sono:

  • IP destinazione: IP statico del Raspberry Pi (assegnato in precedenza);
  • Porta esterna: 8123 (a meno che non vogliate usarne un’altra, è lo stesso);
  • Porta interna: 8123

 

 per la gestione della crittografia, rimando al prossimo articolo

mercoledì 18 novembre 2020

HACS ovvero "Home Assistant Community Store"

... proseguiamo ad installare altri componenti utili in seguito...

HACS
ovvero "Home Assistant Community Store"

 
HACS è un componente custom che permette di aggiungere all’interfaccia del frontend un "pannello di controllo" aggiuntivo utile a gestire (aggiornare, cancellare, configurare, rimuovere) alcune tipologie di elementi aggiuntivi non direttamente certificati dal team di sviluppo di "Home Assistance".



Come al solito, questo è il link da cui ho preso le info... e qui sotto la parte usata da me per installare Hacks su HOME ASSISTANT CORE Su Raspbian:

Ci si collega via SSH e si eseguono i seguenti comandi:

sudo install -g homeassistant -o homeassistant -d /home/homeassistant/.homeassistant/custom_components
git clone https://github.com/custom-components/hacs.git /tmp/hacs
sudo mv /tmp/hacs/custom_components/hacs /home/homeassistant/.homeassistant/custom_components/
sudo chown -R homeassistant:homeassistant /home/homeassistant/.homeassistant/custom_components/hacs
rm -rf /tmp/hacs

infine, effettuare un riavvio con:

sudo reboot

Prima di aggiungere l’integrazione “HACS” a Home Assistant è necessario procurarsi un Token fornito da GitHub.

Per ottenerlo, recarsi presso la sezione Token personali del proprio pannello utente presso GitHub e cliccare su “Generate New Token”.

Indicare “HACS” nel campo “Note” e, in fondo (senza cliccare altro), cliccare su “Generate Token”. Questo produrrà il proprio token d’accesso (e.g. “ee437a5186726118c799d124e04cecd962c965bb“) il quale andrà indicato in configurazione all’atto di configurare l’integrazione.

 

Per configurare HACS tramite interfaccia, prima svuotate la cache del browser e poi recarsi alla voce “Impostazioni” > “Integrazioni” e premere su “+“.

 Cercare “HACS”:

 

a questo punto si seleziona e si seguomno le istruzioni (a distanza di un mese sonocambiate... quindi non entrerei troppo nel dettaglio ora lasciando ad inDomus di togliere eventuali dubbi)

Qui posso dire solo che su Rapberry Pi [1] i riavvii e le installazioni sono particolarmente "lunghe" quindi potrebbe sembrare che si sia freezato qualcosa ... conviene aspettare fiduciosi a botte di quarti d'ora :')

 

giovedì 12 novembre 2020

RaspberryPi [1]- Redivivo - per Domare la casa

Dopo il mio primo Articolo del 2014 che trattava della schedina Raspberry Pi B (primo modello) e dell'accensione di 3 led, oggi, torno alla carica con degli appunti su come usarla per Domotizzare la casa. 

C'e' da considerare che dopo 6 anni, ora mentre scrivo, viene venduta la versione "Raspeberry pi 4 con 8Gb di ram" e potenza di calcolo decine di volte quella della mia "versione 1B con 512Mb di ram"... e parecchi tutorial per la domotica usano quest'utltima versione. 

Quest'anno durante il LockDown dovuto al covid-19 ho dovuto ripensare alla mia postazione di lavoro casalinga per lo "smartWork" che piu che "smart", almeno per me, è stato "Remoto" (non mi lamento, anzi "tanta roba" ad averlo avuto!) dicevo ripensando la postazione, incastrata in un angolo a 45° (si si 45 confermo, meta di un angolo retto!) di una stanza, sono riuscito a trovare spazio per portatile, 2o monitor, tastiera e mouse tradizionali, switch vari, cavi, matasse di cavi, ed un posticino per la schedina... 

Prima di tutto, avevo perso qualsiasi ricordo delle credenziali di accesso a "Mirtillo" (il nome "Lampone" è troppo inflazionato :) ).
Ma iniziamo con Ordine, per il me futuro che tornera qui a vedere cosa avevo fatto ;) ma che i realtà sto facendo ora.

Domotica questa sconosciuta

Diciamo che inizialmetne mi ero baloccato con Amazon-Alexa ed una lampadina Tp-link per fare una "sveglia con sole sorgente" musica, buon giorno etc etc 

ma mi sembrava limitativo (sopratutto la configurazione di interazione con server esterni...)

Girando alla ricerca di "domotica" un po' piu completa (e programmabile, viste le mie predisposizioni) mi sono imbattuto in un bel sito in italiano ricco di informazioni e guide: inDomus.it


La prima scelta è stata quello di avere un "HUB" (chiamiamolo centro di controllo) o sul cloud Amazon/Google/Apple oppure... averne uno personale che puo' offrire piu flessibilità.

 

Ho scelto la seconda ed in particolare "Home Assistant" e tra le sue modalità

HASSIO
HASSIO su Docker
Home Assistant Core su Raspbian

prima ho scelto Hassio, piu facile da configurare alle prime armi ma un poco piu pesante della versione "core", infatti ora sto lavorando sull'installazione "core".

 

Ho dovuto ricominciare da 0, quindi..

Fase 1) avere un Raspberry pi configurato e funzionante:

avendo un PC Windows e volendo  semplificarmi la vita, ho usato "Raspberry pi Imager", scaricandolo Qui ed installandolo su PC;

Lanciato, scelto l'OS

scelto "Raspberry Pi OS (32bit)"


Selezionato la microSD
e cliccato “Write” per installare la distribuzione.

A questo punto bisognerà aspettare parecchio per la fine dell'operazione (dovrà scaricare l'immagine, prima, e scrivere sulla SD dopo) 

 

Finito di scrivere su SD, è necessario attivare la funzionalità SSH Server di Raspbian per dare modo di collegarci da remoto.

Per far ciò è sufficiente creare un file chiamato “ssh” (senza alcuna estensione né contenuto) e copiarlo all’interno della partizione “boot” presente sulla microSD appena configurata. Nient’altro.

finito ciò, si mette la scheda SD nel Raspeberry pi, si colelga il cavo di rete e si alimenta.

 

Prima di proseguire è conveniente recuperare l'indirizzo di rete del raspberry: 

- se si è collegati con monitor e tastiera, basta aprire unafinestra di comando (programma "Terminal") e scrivere:

sudo ifconfig

ottenendo in risposta qualcosa del genere


da cui si ricava l'indirizzo 192.168.1.120

- se invece Non si ha monitor e tastiera collegati, conviene collegarsi al router casalingo (solitamente tramite browser al 192.168.1.1) da cui si ricava l'ip del raspberry, e dove conviene, a questo punto, forzarlo a rimanere fisso nel tempo (ogni router ha le sue peculiarità...).


Sul PC di appoggio bisogna poi installare un software per collegarsi in SSH al Raspeberry; io personalmente ho usato "PuTTY" scalicandolo da QUI e scegliendo la versione a 64-bit (versione .zip senza bisogno di installazione)



Primo aggiornamento

La prima cosa da fare è aggiornare il software. Per farlo, colleghiamoci via SSH al nostro Raspberry Pi ed eseguiamo i seguenti comandi:

sudo apt-get update
sudo apt-get upgrade -y

una volta terminata la procedura automatica di aggiornamento, riavviare il Raspberry Pi con il comando:

sudo reboot

 

Installare Home assistat (guida usata)

Bisogna installare Python e le relative dipendenze con i seg comandi:

sudo apt-get install python3 python3-venv python3-pip python3-dev -y
sudo apt-get install build-essential libssl-dev libffi-dev libopenjp2-7 libtiff5 libjpeg-dev -y

Dopodiché creiamo un’utenza dedicata a Home Assistant, chiamandola “homeassistant“:

sudo deluser --remove-home homeassistant 
sudo useradd -rm homeassistant -G dialout
Creiamo ora una directory temporanea per l'installazione del server e cambiamole i diritti attribuendoli all’utenza appena creata:
cd /srv
sudo mkdir homeassistant
sudo chown homeassistant:homeassistant homeassistant

Creiamo l’ambiente virtuale nel quale eseguire Home Assistant:

sudo su -s /bin/bash homeassistant
cd /srv/homeassistant
python3 -m venv .
source bin/activate

Una volta creato ed acceduti all’ambiente virtuale (N.B. c'è il cambio di prompt), è necessario installare un package ad hoc per Python:

python3 -m pip install wheel

Infine, installiamo Home Assistant tramite il comando:

pip3 install homeassistant

Avviamo, Home Assistant, eseguendo il comando:

hass -v

Il primo avvio farà sì che venga creata automaticamente la cartella “.homeassistant” sotto il path “/home/homeassistant” e vengano installate le dipendenze primarie, sempre automaticamente.
 

Questa operazione su un RaspberryPi[1] ha impiegato quasi un oretta... infatti Home Assistant, alla sua prima esecuzione, provvederà all’installazione e alla configurazione automatica di tutta una serie di componenti accessori.
Sapremo che l’attesa è finita quando vedremo a schermo la scritta:

INFO (MainThread) [homeassistant.core] Starting Home Assistant

Terminata l’attesa sarà possibile collegarsi (tramite il browser del proprio computer di appoggio) all’interfaccia web di Home Assistant presso il seguente indirizzo:

http://raspberrypi:8123

oppure, se cosi' non funzionasse, bisognerà usare direttamente l'indirizzo ip del rasperry http://xxx.yyy.zzz.kkk:8123

sabato 7 novembre 2020



Questa sera vi parleò dell' LCD KeyPad Shield per Arduino (uno R3) che mi ero procurato mesi e mesi addietro... O meglio, dopo aver testato tutti i vari esempi disponibili nell' IDE di arduino, ho notato la mancanza di, o non sono cmq riuscito a trovare, una funzione che mi permettesse di scorrere un testo dal basso verso l'alto e viceversa.

La scheda presenta, oltre all' LCD, anche 5 pulsanti da utilizzare come input e controllo.

I tasti sono serigrafati come UP, DOWN, LEFT, RIGHT, and SELECT, ma i comportamenti da adottare in caso di pressione sono scelti dal programmatore.

La cosa interessante è che tutti i pulsanti sono collegati ad un singolo ingresso analogico A0: tramite una catena di resistenze / partitore resistivo si genera una tensione diversa su A0 a seconda del tasto premuto


Questo schema mostra i pulsanti di input e le resistenze associate:

Se nessun pulsante viene premuto la tensione su A0 sarà portata a 5v dalla resistenza di 2K R6 infatti in tale situazione nessuna delle altre resistenze avrà alcun effetto. Se si esegue un analogRead (A0) verrà restituito un 1023 (o qualsiasi valore sopra 1000).

Consideriamo ora cosa succede se si preme il tasto "DOWN". 

nel punto A0 avremo il partitore resistivo R6 da 2k e R2+R3 330+620=950
La tensione presente al pin A0 in questo caso è di circa 1.61V (5V*950/(2k+950), il che significa che se si esegue un analogRead (A0) restituirà un valore di circa 329. Quindi, se si legge un valore di circa 329 da A0 si sa' che il pulsante "DOWN" è premuto.

Lo stesso vale per gli altri pulsanti, con i valori di tensione e analogRead() relativi ed indicati nello schema sopra.

Questo è un modo pulito per gestire una serie di tasti in ingresso, utilizzando uno solo dei pin di I / O dell'Arduino.


N.B. Premendo contermporaneamente piu tasti, verrà riconosciuto solo quello piu in alto dello schema (tra quelli effettivamente premuti).

La parte di codice usato per la gestione dei tasti è:


#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5


...

int read_buttons()
{
    // i pulsanti sono collegati in serie a resistenze...
    // quindi basta un piedino Analogico per sapere cosa 

    // è stato premuto
    adc_key_in = analogRead(0);

    if (adc_key_in > 1000) return btnNONE; // la metto per prima

                                                      //in quanto condizione
                                                      // maggiormente verificata
    if (adc_key_in < 50)   return btnRIGHT;
    if (adc_key_in < 195)  return btnUP;
    if (adc_key_in < 380)  return btnDOWN;
    if (adc_key_in < 555)  return btnLEFT;
    if (adc_key_in < 790)  return btnSELECT;
}



Mediando gli esempi di tutilizzo trovati in giro, dopo l'inizializzazione del display

//creo istanza per come è collegato lo shield
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);



basato su questo collegamento


Pin Function
Analog 0 Button (select, up, right, down and left)
Digital 4 DB4
Digital 5 DB5
Digital 6 DB6
Digital 7 DB7
Digital 8 RS (Data or Signal Display Selection)
Digital 9 Enable
Digital 10 Backlit Control

sono passato a fare uno "splash screen" da 5 secondi usando anche dei caratteri grafici creati ad hoc.
La versione "cinese" da me acquistata al posto dei caratteri accentati presenta dei bellissini ideogrammi... di cui però non me ne sono fatto nulla e che mi hanno costretto a scrivere le lettere accentate con l'apice.






######

######