Translate

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.






######

######