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.

Cerbo gx

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

Raspberry pi

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

Raspberry pi touch screen display

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

Sunfounder 4 channel relay

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.

Schema centralina

Questo è il nostro convertitore DC DC Step Down da 12V/24V a 5V da 10A 50W:
https://amzn.to/3P5UZEm

Tobsun convertitore 24v 12v 5v

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.

Raspberry pi pinout gpio

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

Gx tank 140

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/

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.

Condividi

Potrebbero interessarti