Installiamo Venus OS su Raspberry Pi e realizziamo la centralina di gestione del nostro van Volkswagen T4 senza Victron Energy Cerbo GX
20 dicembre 2022
Quest'oggi trattiamo un argomento da veri Nerd :D
In molti ci avete chiesto come abbiamo realizzato la centralina di gestione del nostro Vaniglia.
Ebbene, ecco qui la guida dettagliata.
Venus OS su Raspberry Pi o Victron Energy Cerbo GX?
Per chi non fosse appassionato di faidate o ci capisse poco di elettronica e pc, Victron Energy mette a disposizione una soluzione completa: l'unità Cerbo GX.
Nasce già con il sistema operativo pre-installato, configurato e pronto all'uso.
Lo si può trovare qui:
https://amzn.to/3FhTsGv
Mentre lo schermo touch da 5 pollici qui:
https://amzn.to/3uAcMKv
Quindi perchè non l'abbiamo acquistato?
Il prezzo prima di tutto, al momento il Cerbo GX si trova a circa 400 euro, mentre lo schermo più piccolo da 5" (esiste anche il 7") a circa 250 euro, che sommati non sono proprio "bruscolini".
In secondo luogo: la nerdaggine.
E' una brutta bestia, lo sappiamo, ma la voglia di realizzare qualcosa di artigianale, in faidate, che si possa modificare e migliorare, è più forte di qualsiasi altra cosa, probabilmente anche del mero risparmio :D
Procuriamoci un Raspberry Pi
Innanzitutto, ci serve un Raspberry Pi ed una scheda Micro SD.
Noi abbiamo usato un "vecchio" 3B+, ma si può tranquillamente utilizzare anche la versione 4, che ora è ufficialmente supportata in tutte le sue Rev. (le ultime due in beta).
In questo momento storico i Raspberry Pi hanno prezzi allucinanti, dovuti alle difficoltà di produzione e scarsità di una moltitudine di componenti elettronici.
Su Amazon si possono trovare le varie versioni di Raspberry Pi subito disponibili a questo link:
https://amzn.to/3P6t2fo
Altrimenti se ci si arma di pazienza (1-2 mesi), si possono trovare anche dai distributori ufficiali ad un prezzo più umano:
https://www.melopero.com/tag-prodotto/rp4-items/
https://www.kubii.fr/215-raspberry-pi
Acquistiamo lo schermo touch per il Raspberry Pi
Per poter comandare la centralina con comodità, abbiamo bisogno di uno schermo touch.
Scegliamo quello ufficiale del Raspberry Pi, da 7".
Lo si può acquistare a questo link:
https://amzn.to/3F1S1fe
In caso quello ufficiale non fosse disponibile o si voglia risparmiare qualcosina, si possono acquistare i suoi cloni cinesi:
https://amzn.to/3Lc5CVw
https://amzn.to/3sNbUnQ
Noi abbiamo deciso di installare lo schermo distante dal Raspberry Pi, quindi ci siamo avvalsi di questi adattatori, che permettono di trasportare il segnale del Rpi Display tramite cavo HDMI:
https://amzn.to/3Hhq3iD
Se non sono disponibili dovrebbero essere compatibili anche questi:
https://amzn.to/3Y6ycw0
N.B.: questi adattatori servirebbero per estendere il segnale della camera, ma vanno benissimo anche per lo schermo ;-)
L'installazione è semplice, come si può vedere dal video, intorno al minuto 3:35, invece che utilizzare il collegamento sfruttando i Pin del Raspberry Pi e dello schermo, abbiamo collegato gli adattatori negli ingressi e uscite Rpi Display, collegati tramite un cavo HDMI, ed alimentato lo schermo tramite un cavo Micro Usb.
Ovviamente è indispensabile anche un cavo HDMI:
https://amzn.to/3iNExN2
Ed un cavo Micro Usb:
https://amzn.to/3BibYh0
Dotiamoci di relè compatibili con Raspberry Pi e Venus OS
Se vuoi sfruttare la possibilità di accendere o spegnere alcuni apparati a 12V, 24V o 230V tramite Venus OS, dovrai collegare dei relè al fidato Raspberry Pi.
Presta attenzione: non tutti i relè funzionano correttamente, dovrai acquistare quelli "High Level Trigger", ovvero con le uscite che si "attivano" mandando corrente (in questo caso 5V).
Noi abbiamo scelto un modello da 4 relè, che supporta 10A fino a 30V DC e 10A fino a 250V AC:
https://amzn.to/3FxhrCX
In alternativa si può acquistare questo modello, che ha un pin per l'impostazione del Level Trigger di ogni porta:
https://amzn.to/4bgxhPF
Volendo è disponibile anche quello solo con 2 relè che considereremmo solamente se ci sono problemi di spazio, vista l'esigua differenza di prezzo:
https://amzn.to/3FcieYP
N.B.: attenzione all'acquisto dei relè, la maggioranza sono "Low Level Trigger", quindi in caso di dubbi consigliamo di utilizzare i nostri link qui sopra.
Indispensabili saranno anche alcuni cavetti "jumper wire" per collegare la scheda con i relè al Raspberry Pi:
https://amzn.to/3HhjH2x
Colleghiamo il Raspberry Pi ai relè ed allo schermo touch
Nel video dedicato, intorno al minuto 3:35 è possibile visionare tutti i collegamenti.
Come si evince dal video noi abbiamo preferito alimentare tutti gli apparati a 5V da un piccolo convertitore DC 12V/24V a 5V.
Anche la scheda relè è stata alimentata dal convertitore ed i soli relè sono stati connessi ai rispettivi GPIO del Raspberry Pi.
Ecco qui lo schema completo di come è realizzata la nostra centralina di gestione.
Questo è il nostro convertitore DC DC Step Down da 12V/24V a 5V da 10A 50W:
https://amzn.to/3P5UZEm
Abbiamo poi acquistato questo connettore usb femmina con morsettiera, dove abbiamo collegato il cavo di alimentazione del monitor touch:
https://amzn.to/3F96hDg
E questo cavo Micro Usb maschio con morsettiera per alimentare il Raspberri Pi 3B+:
https://amzn.to/3XXDB8R
In caso di Raspberry Pi 4, al posto di quest'ultimo, va acquistato un cavo Usb-C maschio con morsettiera:
https://amzn.to/3UAe1Ul
Molto utili saranno anche alcuni connettori Wago:
https://amzn.to/3VSIFt8
I 4 relè li abbiamo collegati al Raspberry Pi come segue:
- relè 1 > Pin 40 / GPIO 21
- relè 2 > Pin 11 / GPIO 17
- relè 3 > Pin 13 / GPIO 27
- relè 4 > Pin 15 / GPIO 22
Per comodità ecco qui una immagine dei numeri di Pin e GPIO del Raspberry Pi.
Scarichiamo Venus OS
Una volta eseguiti tutti i collegamenti, procediamo con lo scaricamento del Venus OS.
Il sistema operativo Victron Energy è presente in due versioni, normale o large.
La large ha installati Node-RED e Signal K server, è quindi possibile una programmazione più personalizzata, però a scanso di un maggior consumo di risorse.
Più informazioni riguardo a questa versione si possono trovare qui:
https://www.victronenergy.com/live/venus-os:large
Visto che abbiamo a disposizione un Raspberry Pi 3B+, molto meno performante del 4, per il momento ci accontentiamo della versione normale.
E' possibile passare alla versione large anche in seguito, senza dover rifare tutto il lavoro da capo.
A questo link si possono scaricare le versioni (large e normale) per Raspberry Pi 2 e 3:
https://updates.victronenergy.com/feeds/venus/release/images/raspberrypi2/
A questo, le versioni per Raspberry Pi 4 rev. 1.2 e 1.3 ed ora anche rev. 1.4 e 1.5:
https://updates.victronenergy.com/feeds/venus/release/images/raspberrypi4/
Mentre a questo le versioni in beta testing:
https://updates.victronenergy.com/feeds/venus/candidate/images/
Da qui scarichiamo l'ultima versione di Venus OS normale disponibile in questo momento per il nostro Rpi 3B+:
https://updates.victronenergy.com/feeds/venus/release/images/raspberrypi2/venus-image-raspberrypi2.wic.gz
Installiamo Venus OS nel Raspberry Pi
Noi usiamo Linux Debian nei nostri pc, quindi qui di seguito i comandi per l'installazione sulla Micro SD da linea di comando.
In caso di Windows come sistema operativo sul pc, è possibile utilizzare Balena Etcher, Rufus o software simili, per la scrittura dell'immagine sulla Micro SD.
Inseriamo la Micro SD nel pc e controlliamo a quale unità corrisponde:
sudo fdisk -l [...] Disk /dev/sde: 7,47 GiB, 8018460672 bytes, 15661056 sectors Disk model: Mass-Storage [...]
Nel nostro caso troviamo l'unità mappata come "/dev/sde".
Aggiorniamo i repository:
sudo apt update
Installiamo gzip:
sudo apt install gzip
Scompattiamo l'immagine:
gunzip venus-image-raspberrypi2.wic.gz
Entriamo nella cartella appena creata:
cd venus-image-raspberrypi2.wic
Scriviamo l'immagine sulla Micro SD, in questo caso in "/dev/sde":
sudo dd if=venus-image-raspberrypi2.wic of=/dev/sde bs=4M status=progress
Assicuriamoci che la scrittura sia terminata e che tutti i dati in cache siano stati scritti:
sudo sync
Ora possiamo scollegare la Micro SD dal pc.
Configuriamo Venus OS
Inseriamo la schedina Micro SD nel Raspberry Pi e lo accendiamo collegandoci il cavo di alimentazione che, nel nostro caso, viene dal convertitore a 5V.
Inizialmente vanno eseguiti dei comandi da linea di comando, quindi è necessario connettere anche una tastiera.
Per scrivere "/" ed "-" consigliamo di usare il tastierino numerico in quanto la codifica della tastiera NON è italiana.
Lo schermo apparirà ruotato di 180 gradi, non preoccuparti, poi lo sistemeremo.
Rendiamo il file system scrivibile con questo comando:
/opt/victronenergy/swupdate-scripts/remount-rw.sh
Abilitiamo lo schermo touch digitando questo comando:
mv /etc/venus/headless /etc/venus/headless.off
Espandiamo il file system:
/opt/victronenergy/swupdate-scripts/resize2fs.sh
Riavviamo il sistema:
shutdown -r now
Ora il sistema si dovrebbe avviare abilitando lo schermo ed il touch.
Impostiamo la lingua italiana:
Settings > Display & language > Language > Italiano
Abilitiamo l'accesso come Superutente:
Impostazioni > Generali > Livello di accesso > Utente e installatore (la password è ZZZ)
Una volta tornati nel menu Generale, con la riga Livello di accesso sottolineata di azzurro, tenere premuta la freccia a destra della tastiera.
Apparirà il livello di accesso Superutente.
Impostare una password di root:
Impostazioni > Generali > Livello di accesso > Set root password > impostare quello che si vuole
Abilitare SSH:
Impostazioni > Generali > Livello di accesso > SSH su LAN > Abilitare
Impostiamo il Wi-Fi:
Impostazioni > Wi-Fi > Connettersi alla rete desiderata cliccandoci sopra ed inserendo la password
Una volta connesso nella stessa scheda si può visualizzare l'INDIRIZZO_IP assegnato.
Oppure se si preferisce la rete cablata:
Impostazioni > Ethernet
Volendo adesso si può scollegare la tastiera.
Ora finalmente possiamo collegarci tramite SSH da un altro pc.
ssh root@INDIRIZZO_IP
Se utilizzi Windows puoi collegarti tramite Putty.
Lo schermo touch ufficiale del raspberry di norma, come dicevamo, va ruotato di 180 gradi:
nano /u-boot/config.txt [...] sotto: [all] inserire: lcd_rotate=2 disable_overscan=1 [...]
Salvare con: CTRL + x
Riavviamo il sistema:
shutdown -r now
Ora lo schermo dovrebbe apparire ruotato correttamente.
Colleghiamoci di nuovo tramite SSH.
Abilitiamo lo spegnimento dello schermo dopo X secondi:
echo "/sys/class/backlight/rpi_backlight/bl_power" > /etc/venus/blank_display_device
Ci portiamo nella cartella degli overlays:
cd /u-boot/overlays
Download overlay:
wget https://github.com/kwindrem/RpiDisplaySetup/raw/main/rpi-backlight-overlay.dtb -O rpi-backlight-overlay.dtb
Per i nuovissimi kernel abbiamo invece bisogno di questo:
wget https://github.com/kwindrem/RpiDisplaySetup/raw/main/rpi-backlight.dtbo -O rpi-backlight-overlay.dtb
Riavviamo il sistema:
shutdown -r now
Impostiamo il tempo di spegnimento:
Impostazioni > Display e lingua > Tempo di spegnimento display > 30 sec
Colleghiamoci di nuovo tramite SSH.
Impostiamo l'intensità di luce:
echo "/sys/class/backlight/rpi_backlight" > /etc/venus/backlight_device
Disabilitiamo l'AutoBrightness:
dbus -y com.victronenergy.settings /Settings/Gui/AutoBrightness SetValue 0 > /dev/null
Impostiamo la luminosità minima e massima per il RPI display in /Settings/Gui/Brightness:
dbus -y com.victronenergy.settings /Settings AddSettings '%[{"path": "/Gui/Brightness", "default":255, "min":0, "max":255}]' > /dev/null
Ci portiamo nella cartella degli overlays:
cd /u-boot/overlays
Download overlay:
wget https://github.com/kwindrem/RpiDisplaySetup/raw/main/rpi-backlight-overlay.dtb -O rpi-backlight-overlay.dtb
Per i nuovissimi kernel abbiamo invece bisogno di questo:
wget https://github.com/kwindrem/RpiDisplaySetup/raw/main/rpi-backlight.dtbo -O rpi-backlight-overlay.dtb
Riavviamo il sistema:
shutdown -r now
Impostiamo l'intensità di luce desiderata:
Impostazioni > Display e lingua > Impostare tramite lo slider
Abilitiamo la visualizzazione di barca e camper e dei serbatoi:
Impostazioni > Display e lingua > Mostra panoramica imbarcazione e camper Impostazioni > Display e lingua > Mostra panoramica serbatoi
Colleghiamoci di nuovo tramite SSH.
Abilitiamo tutti e 4 i relè (di default ne è abilitato solo 1):
nano /etc/venus/gpio_list [...] # Relay 1 Pin 40 / GPIO 21 21 out relay_1 # Relay 2 Pin 11 / GPIO 17 17 out relay_2 # Relay 3 Pin 13 / GPIO 27 27 out relay_3 # Relay 4 Pin 15 / GPIO 22 22 out relay_4 [...]
Eseguiamo il backup del file di controllo stato dei relè e lo editiamo come segue (qui di default ne sono abilitati 2):
cp /opt/victronenergy/dbus-systemcalc-py/delegates/relaystate.py /opt/victronenergy/dbus-systemcalc-py/delegates/relaystate_Backup.py
nano /opt/victronenergy/dbus-systemcalc-py/delegates/relaystate.py [...] ('/Relay/0/State', '/Settings/Relay/0/InitialState', 0, 0, 1), ('/Relay/1/State', '/Settings/Relay/1/InitialState', 0, 0, 1), ('/Relay/2/State', '/Settings/Relay/2/InitialState', 0, 0, 1), ('/Relay/3/State', '/Settings/Relay/3/InitialState', 0, 0, 1) [...]
Eseguiamo il backup del file di configurazione dei relè e lo editiamo come segue (qui di default ne sono abilitati 2):
cp /opt/victronenergy/gui/qml/PageSettingsRelay.qml /opt/victronenergy/gui/qml/PageSettingsRelay_Backup.qml
nano /opt/victronenergy/gui/qml/PageSettingsRelay.qml [...] property VBusItem relay1Item: VBusItem { bind: "com.victronenergy.system/Relay/1/State" } property bool hasRelay1: relay1Item.valid property VBusItem relay2Item: VBusItem { bind: "com.victronenergy.system/Relay/2/State" } property bool hasRelay2: relay2Item.valid property VBusItem relay3Item: VBusItem { bind: "com.victronenergy.system/Relay/3/State" } property bool hasRelay3: relay3Item.valid MbItemOptions { id: relay1Function description: hasRelay1 ? qsTr("Function (Relay 2)") : qsTr("Function") bind: Utils.path(bindPrefix, "/Settings/Relay/1/Function") show: hasRelay1 possibleValues:[ MbOption { description: qsTr("Manual"); value: 2 }, MbOption { description: qsTr("Temperature"); value: 4 } ] } MbSwitch { id: manualSwitch1 name: qsTr("Relay 2 On") bind: "com.victronenergy.system/Relay/1/State" show: hasRelay1 && relay1Function.value === 2 // manual } MbSwitch { id: manualSwitch2 name: qsTr("Relay 3 On") bind: "com.victronenergy.system/Relay/2/State" show: hasRelay2 // manual } MbSwitch { id: manualSwitch3 name: qsTr("Relay 4 On") bind: "com.victronenergy.system/Relay/3/State" show: hasRelay3 // manual } [...]
Riavviamo il sistema:
shutdown -r now
Ora possiamo configurare i relè a nostro piacimento:
Impostazioni > Relè
N.B.: solo i primi 2 relè hanno possibilità di essere usati con il controllo temperatura, mentre il 3 e 4 solo con apertura/chiusura manuali.
Ricordarsi che questi ultimi comandi vanno ri-eseguiti ad ogni aggiornamento:
- file system scrivibile
- rotazione display
- auto-spegnimento display
- regolazione intensità luce display
- abilitazione ed impostazione relè
Esiste uno script che fa tutto in automatico, ma installa diverse cose ed a noi personalmente non piace.
Preferiamo quelle 2 volte l'anno che aggiorniamo il sistema eseguire questi comandi a mano e controllare eventuali bugs.
Ora è possibile disattivare il Superutente se desiderato:
Impostazioni > Generali > Livello di accesso > Utente e installatore (la password è ZZZ)
Se lo si desidera, si può abilitare la consolle remota per visualizzare lo schermo su browser esterno:
Impostazioni > Consolle Remota
Si può accedere da:
http://INDIRIZZO_IP
Attiviamo la pubblicazione dei dati e la possibilità di comandare il sistema dal cloud Victron Energy:
Impostazioni > Portale VRM Online
Attivarla, checkare "Comunicazione bidirezionale VRM" e segnare l'ID portale VRM.
Ci si può registrare ed accedere da:
https://vrm.victronenergy.com/login
Una volta eseguito l'accesso, cliccare su:
Aggiungi impianto > Cerbo GX / Cerbo-S GX > Inserire l'ID portale VRM, il nome dell'impianto e confermare con "Richiedi accesso"
Per terminare colleghiamo tutti i cavi usb delle interfacce di comunicazione Victron Energy provenienti dallo SmartShunt, dall'Inverter, dal Regolatore di Carica, etc., al Raspberry Pi e possiamo procedere alla loro configurazione come desiderato.
Colleghiamo ed impostiamo il Victron Energy GX Tank 140
Nel nostro caso abbiamo anche acquistato il Victron Energy GX Tank 140 che ci permetterà di vedere i livelli dei nostri serbatoi delle acque chiare e grigie:
https://www.victronenergy.it/panel-systems-remote-monitoring/gx-tank-140
Il GX Tank 140 si può acquistare qui:
https://amzn.to/3ORV8v3
Il sensore ha 4 canali, noi usiamo il 3 ed il 4 visto che sono auto-alimentati tramite la porta USB.
In caso non bastino, bisogna collegare una alimentazione ausiliaria tramite la porta Ext. Power.
Abbinato a questo abbiamo acquistato dall'Australia due sensori ad ultrasuoni, che possono essere quindi installati esternamente ai due serbatoi.
Eccoli qui (vi consigliamo di contattare il venditore, che spesso riserva offerte o spedizioni più vantaggiose):
https://www.safiery.com/ultrasonic-tank-level-bottom-sensor-no-penetration
Il collegamento è super semplice: nel cavo di ogni sensore sono presenti 4 fili crimpati con un connettore JST.
Rimuoviamo il connettore JST tagliando i fili e procediamo isolando il filo bianco visto che non ci servirà.
Prendiamo uno degli appositi morsetti a 3 fili in dotazione con il GX Tank 140 e partendo da sinistra verso destra inseriamo i fili: rosso, giallo, nero.
Connettiamo poi il morsetto nel nostro Channel 3.
Ripetiamo la stessa operazione anche per l'altro sensore e lo colleghiamo al Channel 4.
Inseriamo il cavo usb del GX Tank 140 nel nostro raspberry e tramite lo schermo touch lo configuriamo.
Abilitiamo le entrate desiderate dallo schermo touch:
Impostazioni > I/O > Entrate analogiche > GX Tank ... input X (abilitare quelli desiderati nella lista)
Ora dentro il menu principale si trovano le entrate abilitate e si possono configurare.
Noi per esempio abbiamo abilitato la 3 e la 4 e tramite il menu principale le abbiamo chiamate Acqua e Scarico.
Rinominiamo il nostro primo sensore:
Acqua > Dispositivo [...] Nome: Acqua [...]
Configuriamo il nostro primo sensore:
Acqua > Configurazione [...] Capacità: XL Tipo di sensore: Tensione Valore sensore a vuoto: 0.0V Valore sensore a pieno: (bisogna riempire il serbatoio, vedere "Valore sensore" ed impostarla qui) Tipo di fluido: Acqua dolce Unità volume: Litro Forma personalizzata: non impostata Tempo medio: 10s (o 20s) Valore sensore: è il valore letto al momento Allarme livello basso: non impostato Allarme livello alto: non impostato [...]
Procediamo nella stessa maniera per gli altri sensori.
Nella pagine ora appariranno i due serbatoi, sia nella "panoramica imbarcazione e camper" che nella "panoramica serbatoi".
Connettiamo i sensori di temperatura Ruuvi Tag e comandiamo i relè
Come anticipato nell'articolo del riscaldamento a pavimento, per controllare le temperature nei vari ambienti, ci siamo avvalsi di un paio di sensori Ruuvi Tag.
Si possono acquistare qui:
https://ruuvi.com/ruuvitag/
Li abilitiamo dallo schermo touch:
Impostazioni > I/O > Sensori Bluetooth > Attiva (ed abilitare quelli desiderati nella lista)
Ora, volendo, possiamo comandare i nostri primi due relè, tramite la temperatura rilevata dai sensori Ruuvi Tag:
Impostazioni > Relè > Funzione (Relè X) > Temperatura Impostazioni > Relè > Regole di controllo della temperatura
Conclusioni
Il tutorial termina qui, speriamo di essere stati chiari ed aver spiegato tutto nel migliore dei modi.
Non abbiamo trattato la configurazione degli apparati tramite lo schermo touch in maniera approfondita visto che ognuno è libero di impostare a proprio piacimento i vari parametri e quello che va bene a noi potrebbe NON andar bene per qualcun altro.
Per ogni dubbio o domanda puoi contattarci nei commenti dei video oppure tramite la pagina Contattaci.
Potrebbero interessarti
-
Quest'oggi vi vogliamo spiegare come realizzare una centralina di gestione per camper, van o baita, tramite Raspberry Pi 4, con installato Victron Venus OS e con monitoraggio totale delle celle di una batteria LiFePO4 tramite bluetooth. segue »
-
In questo tutorial vi mostriamo come è possibile realizzare un piccolo impianto fotovoltaico a 12V, con una batteria al litio LiFePO4, senza inverter, con un budget di spesa minimo, adatto a camper, van e per una baita o casetta off-grid. segue »
-
In questa guida vi spieghiamo come realizzare un impianto fotovoltaico ad isola completo, a 12V, con 2 batterie al litio LiFePO4 Redodo e un inverter da 3000W Vevor, con un budget di spesa medio, adatto a camper, van e per una baita o casetta off-grid. segue »
-
Scopriamo come monitorare le celle di una batteria LiFePO4 dotata di BMS bluetooth direttamente da Victron Venus OS: dal Cerbo GX o, come nel nostro caso, dal Raspberry Pi. segue »
-
Starlink è la connessione ad internet perfetta per chi viaggia in van? Mostriamo come modificare l'antenna in fai-da-te, montarla piatta sul camper ed alimentarla con la batteria servizi, senza inverter. segue »
-
In questo tutorial spieghiamo come costruire una micro camera wifi con un Raspberry PI Zero W o Zero 2 W ed il software Motion Eye. segue »