In questo articolo creiamo un gateway Zigbee Ethernet e wifi usando un Raspberry Pi 3 o 2 (che magari hai di recupero) con la migliore tecnologia Zigbee 3 disponibile (CC2538 + CC2592 con antenna esterna), comprensivo di case 3D da stampare.
Il limite dei coordinator USB collegati all’host dove gira Home Assistant, come ad esempio la Conbee 2, è il fatto di essere “attaccati” all’host che, se non è in un punto centrale della casa, rischia di necessitare e dipendere da diversi router zigbee per poter funzionare (vedi articolo dedicato). Con Raspberry Pi 4, inoltre, è necessario usare una prolunga per evitare i disturbi USB3 che ne comprometterebbero il funzionamento.
Questi problemi vengono quindi spazzati via da questa soluzione:
- Il coordinator Zigbee potrà essere posizionato in posizione centrale rispetto alla casa, non dovendo essere collegato all’host
- Avendo una antenna esterna e amplificata da CC2592 la portata sarà migliore diminuendo ulteriormente la necessità di dipendere da diversi router, a tutto beneficio della stabilità dell’impianto
- Non avrai bisogno di prolunghe o altre appendici: colleghi l’alimentazione ed eventualmente il cavo ethernet al case da stampare in 3D, nient’altro
- Utilizza una ventola PWM Noctua per essere inudibile anche se posizionato in zona notte
- Compatibile sia con ZHA, l’integrazione Zigbee nativa di Home Assistant, che con zigbee2mqtt, un AddOn che utilizza MQTT per comunicare con Home Assistant.
Sei dunque pronto a potenziare e rendere stabile ed affidabile la tua rete Zigbee? Bene, continua a leggere 🙂
Sommario
Materiale necessario per creare l’gateway zigbee ethernet / wifi
Per realizzare questo gateway zigbee ethernet / wifi avrai bisogno dei seguenti componenti (non ti spaventare, ho voluto essere esaustivo nell’elenco!):
- Scheda Raspberry Pi
- Raspberry Pi 2, 3 o 3b+
- HAT Zigbee CC2538 di Giovanni Castania
- Alimentatore 5V 2A (meglio se uno originale)
- Scheda MicroSD
- Case per stampa 3D
- I tre componenti stampati in 3D
- Inserti filettati M2.5 (per fissaggio Raspberry)
- Inserti filettati M3 (per fissaggio coperchio)
- Viti M3 (per fissaggio coperchio)
- Distanziali 6mm M2.5 (per fissaggio Raspberry)
- Ventola Noctua NF-A4x10 PWM
Ovviamente puoi effettuare delle modifiche nella scelta dei materiali, ad esempio la ventola non è necessario che sia PWM, anche se ho notato grandi benefici in termini di rumore (praticamente inudibile).
Stampa 3D del case per l’gateway Zigbee ethernet / wifi
Come prima cosa scarica i file STL da stampare di seguito (disponibile anche su Thingiverse):
Ovviamente il sovracoperchio andrà ruotato di 180° per poggiare la superficie superiore al piano di stampa.
Consiglio di stampare a 200 micron per layer, con 5 layer pieni superiori ed inferiori e infill al 100%. Basatevi poi sulla vostra esperienza e sul tipo di filamento che utilizzerete. Il corpo andrà sostenuto con supporti per i fori dei connettori.
Personalmente ho scelto filamento in PETG per Corpo e Coperchio per via della sua migliore resistenza al calore e PLA per il sovracoperchio per via della migliore finitura che riesco ad ottenere.
Assemblaggio dell’gateway zigbee ethernet / wifi
Stampati i tre pezzi vediamo ora come assemblarli con il Raspberry Pi.
Inserti filettati e distanziali
Come prima cosa dobbiamo inserire i 4 inserti filettati M2.5 (nei quattro fori alla base dove poggerà il Raspberry Pi) ed i 4 inserti filettati M3 (nei quattro fori dove poggerà il coperchio).
Per farlo basta appoggiare la parte liscia dell’inserto nel foro e poi appoggiare la punta del saldatore sull’inserto esercitando una piccola pressione verso il basso. Appena si scalderà inizierà a scendere, inglobandosi nella plastica. Terminare la pressione e staccare la punta del saldatore non appena la parte superiore dell’inserto raggiungerà lo stesso piano della superficie stampata. Fare inoltre attenzione a non toccare alcuna parte stampata con il saldatore, si scioglierebbe molto velocemente.
Fai attenzione a non stortare gli inserti mentre entrano nella plastica.
Avvitare quindi nei fori alla base dove poggerà il Raspberry Pi i distanziali M2.5 6mm così da fissarli.
Il risultato a questo punto dovrebbe essere questo:
Collegamenti elettrici ventola PWM
Partiamo inserendo l’HAT Zigbee CC2538 di Giovanni Castania al Raspberry Pi.
Prima di proseguire l’assemblaggio sarà bene collegare i pin della ventola PWM per lavorare comodi. Dobbiamo usare, oltre a VCC e GND, un PIN in output che supporti PWM hardware ed un pin in input per il sensore tachimetrico. Io ho usato i seguenti (verificando con Giovanni che non fossero utilizzati dall’HAT):
- BLU = segnale PWM –> GPIO18
- VERDE = sensore RPM –> GPIO13 (con resistenza pull-up da 660Ω o più sul 3.3V)
- GIALLO = VCC 5V
- NERO = GND
Abbiamo due possibilità: saldare i pin sotto alla scheda del Raspberry Pi oppure sopra all’HAT. Io ho seguito questa seconda strada perchè l’ho fatto da RPI già montato nel case.
Facciamo riferimento allo schema degli I/O del Raspberry Pi 3b:
Le posizioni a cui saldare i pin della ventola sono quindi i seguenti:
Io ho usato una resistenza da 1kΩ, 1/4W.
Assemblaggio finale
A questo punto fissiamo la ventola alla parte sottostante il coperchio con le viti in dotazione. Facciamo attenzione al verso in cui la montiamo: l’aria deve essere spinta verso l’interno, non succhiata verso l’esterno.
Fissiamo l’antenna in dotazione all’HAT stringendo bene il dado di fissaggio, quindi inseriamo il connettore sull’HAT.
Ora posizioniamo il coperchio sopra alla base così che la ventola sia dalla parte del connettore HDMI e alimentazione, così da ottimizzare il flusso verso i componenti che scaldano.
Fissare il coperchio con le viti M3.
A questo punto non rimane che posizionare il sovracoperchio sopra al coperchio per rendere più gradevole l’estetica. Il risultato dovrebbe essere il seguente:
Installazione e configurazione del software
Avendo a questo punto terminato le operazioni sugli oggetti fisici possiamo passare ora ad installare e configurare il software per preparare il nostro nuovo gateway zigbee ethernet / wifi!
Installazione e configurazione del sistema operativo
Consiglio di utilizzare Raspberry Pi OS (precedentemente noto come Raspbian) in versione Lite a 32 bit.
Consiglio quindi a questo punto di seguire il seguente articolo per preparare il Raspberry Pi: Installare Raspberry Pi OS senza collegare monitor e tastiera
In tale articolo ti verrà proposto di disabilitare il bluetooth ed abilitare l’UART, è importante che tu lo faccia altrimenti l’HAT zigbee non funzionerà.
Al termine dell’articolo dovresti aver ottenuto il tuo Raspberry attivo e funzionante. Ti consiglio di utilizzare Putty da ora in poi per proseguire la configurazione.
Gestione della ventola dinamica
Ora pensiamo a come gestire la ventola in modo dinamico, così che giri tanto più veloce quanto più alta sia la temperatura. In tal modo si troverà normalmente un punto di incontro tra temperatura e giri della ventola che tenderà a lasciare una grande silenziosità senza far comunque scaldare la CPU.
Scarica i seguenti script python ed estraili dallo zip che hai scaricato nella directory ~/scripts ovvero /home/pi/scripts
Per far tutto dalla shell del raspberry utilizza i seguenti comandi:
mkdir scripts cd scripts wget https://henriksozzi.it/wp-content/uploads/2021/09/PWM-fan-python-scripts.zip unzip PWM-fan-python-scripts.zip rm PWM-fan-python-scripts.zip
Lo script fan_control.py servirà come servizio di regolazione della velocità della ventola automatico, mentre read_fan_speed.py potremo usarlo per restituirci velocità della ventola e temperatura della CPU (come miglioria futura sarebbe bello inviare questi valori ad Home Assistant…)
Apriamo il primo con il seguente comando:
nano fan_control.py
I parametri che ci potrebbe interessare modificare sono subito sotto il commento #Configuration
:
# Configuration FAN_PIN = 18 # BCM pin used to drive PWM fan WAIT_TIME = 1 # [s] Time to wait between each refresh PWM_FREQ = 25 # [kHz] 25kHz for Noctua PWM control
- FAN_PIN: è il pin utilizzato per l’output PWM che regolerà la velocità della ventola. Se hai seguito lo schema elettrico presente in questo articolo andrà già bene così com’è, altrimenti dovrai sostituirlo con il pin utilizzato.
- WAIT_TIME: è il tempo da attendere espresso in secondi tra un refresh e l’altro della temperatura e quindi della velocità impostata. 1 è un valore più che adeguato
- PWM_FREQ: è la frequenza dell’output PWM. Se hai usato la ventola Noctua consigliata non devi cambiare questo valore.
Salviamo le eventuali modifiche con CTRL + X e poi S.
Ora apriamo l’altro script con il seguente comando:
nano read_fan_control.py
I parametri che ci potrebbe interessare modificare sono subito sotto il commento #Pin configuration
:
# Pin configuration TACH = 13 # Fan's tachometer output pin PULSE = 2 # Noctua fans puts out two pluses per revolution WAIT_TIME = 1 # [s] Time to wait between each refresh
- TACH: è il pin utilizzato per collegare il sensore tachimetrico della ventola. Se hai seguito lo schema presente in questo articolo il valore è già corretto.
- PULSE: numero di impulsi per ogni giro della ventola che il tachimetrico fornisce. Se hai usato la ventola Noctua consigliata non devi cambiare questo valore.
- WAIT_TIME: tempo da attendere tra un refresh e l’altro che aggiungerà una riga con velocità e temperatura alla console.
Installiamo lo script come servizio automatico
Creiamo il file per gestire il servizio:
sudo nano /etc/systemd/system/autofan.service
All’interno di tale file incolliamo il seguente contenuto:
[Unit] Description=Control the attached PWN fan depending on CPU temperature After=multi-user.target [Service] ExecStart=/usr/bin/python3 /home/pi/scripts/fan_control.py Restart=always RestartSec=5s [Install] WantedBy=multi-user.target
E salviamo come di consueto con CTRL + X e S.
Ora ricarichiamo i servizi, abilitiamo l’avvio automatico quando parte il sistema operativo e facciamo partire il servizio:
sudo systemctl daemon-reload sudo systemctl enable autofan.service sudo systemctl start autofan.service
Se in futuro vorremo vedere il log del servizio (per verificare che sia stato avviato, per esempio):
sudo journalctl -b0 --unit=autofan.service
Per riavviare il servizio (utile quando si modifica il file python, per esempio):
sudo systemctl restart autofan.service
Installazione software per zigbee
A questo punto non ci resta che installare il software che servirà per far comunicare la nostra istanza di Home Assistant con l’HAT Zigbee montato nel nostro gateway zigbee ethernet / wifi.
A seconda dell’integrazione che desideri utilizzare espandi la sezione di tuo interesse:
Ti va di darmi una mano?
Il contenuto di questo sito è completamente gratuito senza pubblicità invasive e il fine non è certo guadagnare …ma mantenere un sito ha un costo. Se ti va di darmi una mano per sostenere le spese o ti va di sostenere questo progetto hai le seguenti modalità:
- Donazione con Paypal:
- Regalami un caffè su Buymeacoffee:
- Effettua i tuoi acquisti Amazon a partire da QUESTO LINK (o tramite i prodotti sotto)
- Acquistare i tuoi prodotti Shelly usando QUESTO LINK
- Effettuare i tuoi acquisti AliExpress usando QUESTO LINK
Se ti può interessare, sto predisponendo il mio raspberry pi1 per questo progetto, ho aggiunto il controllo della temperatura ed altri sensori seguendo questa guida: https://github.com/hjelev/rpi-mqtt-monitor
Funziona alla grande e vedo tutti i sensori su HA.
Domani provo a spostare la conbee II e ti aggiorno.
Ciao grazie per il suggerimento. In realtà ho provato uno script molto simile (probabilmente un fork) e alcuni dei relativi fork. Il problema è che ho sempre rilevato un memory leak che faceva progressivamente aumentare la RAM usata. Tienila d’occhio…
Alla fine ho provato glances che però anche lui sembra comportarsi così. Sto ancora verificando per trovare la soluzione giusta per includere il monitoraggio remoto nell’articolo (o in uno nuovo)
alla fine ho eliminato il sensore di temperatura e lo switch della ventola in quanto non so per quale motivo non si aggiornava in tempo reale.
Sono sempre alla ricerca di qualcosa di interessante.
ok, ho trovato un metodo per avere il sensore di temperatura remoto senza richiedere risorse al raspberry.
Su HA ho installato da hacs “ssh sensor”, e poi sul configuration.yaml o simili ho aggiunto questo:
https://community.home-assistant.io/t/remote-rpi-system-monitor/129274/5
riavvio ed ho il sensore di temperatura disponibile senza intaccare le risorse del raspberry
Spero possa essere utile
Ti ringrazio, è un’alternativa interessante. Personalmente, dopo averne provate un po’, sono approdato a glances e sto usando quello per monitorare i miei Raspberry in casa. Al momento vedo un leggero leak che occupa all’incirca 1% di RAM al giorno, motivo per il quale non ho ancora pensato di consigliare una delle opzioni…
Allo stato attuale l’opzione che mi sembra più promettente è Sys-QTT ma non ho ancora avuto tempo di provarlo.
L’opzione SSH l’avevo valutata anch’io ma non mi fa impazzire lasciare un canale SSH aperto, sebbene sia una possibilità e certamente una valida opzione di cui ti ringrazio per i riferimenti.
Se farò qualche esperimento riuscito particolarmente bene in ambito lo condividerò. Intanto grazie.
Ciao Henrik, allacciandomi al tuo progetto, volevo chiederti se sia possibile eventualmente recuperare i dispositivi da un dongle usb 3.0 (la chiavetta di Giovanni per intenderci) collegata ad un raspberry pi4 con homeassistant installato sopra, per poterli gestire da un Nuc, dove ho fatto una nuova installazione di homeassistant. Purtroppo sono obbligato a tenere il raspi perchè sopra mi gira un’addon per gestire la mia domotica di casa scritto solo per raspberry, il quale recupero sul nuc tramite Mqtt. In questo modo potrei lasciare il raspberry, che gestirebbe solo più questo addon e la rete zigbee, in posizione strategica in casa per la rete zigbee soprattutto e posizionare il nuc da un’altra parte a me più comoda. Spero di essermi spiegato. Grazie mille Salutoni !!!
Ciao, non sono sicuro di aver capito. Hai spostato HA da Raspberry Pi4 ad un NUC ma devi tenere il Raspberry per farci girare il software specifico (non su HassOS, suppongo…) e vorresti usarlo anche come gateway zigbee ma usando la chiavetta di Giovanni? Se è così, si, puoi senza problemi. Se usi ZHA o hai zigbee2mqtt installato sull’host HA basterà configurare ser2net sul raspberry per puntare alla seriale esposta dalla chiavetta, a differenza dell’articolo, e il gioco è fatto.
Se invece installi zigbee2mqtt sul raspberry dovrai solo configurarlo per accedere alla chiavetta in locale e connettersi al tuo broker mqtt che già hai e anche lì il gioco è fatto.
Ciao, hai capito perfettamente, solo che sul Raspberry devo lasciare HassOS, perchè l’addon che mi serve, gira su di esso, però da quanto ho capito ser2net non può essere installato su Homeassistant. Considera che io uso ZHA. Hai qualche idea? Grazie mille !!!
Qual’è questo addon…? Gli addon sono container docker con dentro un software che girerebbe su un normale S.O….
lo posso fare con il dongle zigbee di sonoff ?
Si, certo. Devi solo sostituire ttyAMA0 con ttyUSB0.
Ma se il mio home assistant gira su vm debian e volessi usare il broker mosquito dove lo installo sul raspy con il dongle sonoff o sul docker debian?
Mosquitto ti serve se usi zigbee2mqtt, non ti serve se usi zha.
Se scegli zigbee2mqtt ti consiglio di installare il broker sull’host dove hai Home Assistant in quanto potrebbe servirti per altro un domani.
Se usi Home Assistant OS (che consiglio) lo installi con un click (c’è l’addon pronto)
mi dice che è collegato al server mosquito e Zigbee2MQTT started
ma ora metto l’ip del raspberry sulla porta 8081 ma niente.
Cioè come aggiungo i device?
Grazie. Smanetto e vediamo come va
risolto.
Hai fatte una grande guida
grazie
Non ho fatto in tempo a risponderti… Bene, mi piace risolvere i problemi in questo modo! ^_^
Grazie per l’apprezzamento! 🙂