I moduli DomBus sono collegati tra loro tramite un bus seriale , utilizzando un cavo di allarme sottile/comune con 4 fili: 2 per trasportare l'alimentazione 12-24 Vdc e 2 fili per i dati a 115200 bps 8,n,1 utilizzando il bus bilanciato di livello industriale RS485 .
Solitamente il bus viene collegato al controller domotico tramite un cavo sottile, utilizzando un economico adattatore RS485/USB.
Nel caso in cui il bus non possa essere collegato fisicamente al controller domotico (zona diversa, nessuna possibilità di passaggio cavi, ...), è possibile utilizzare un collegamento radio o un tunnel TCP per mantenere in comunicazione il controller domotico con la rete DomBus .
Utilizzo di un collegamento radio per collegare insieme due bus RS485
Sul mercato sono disponibili dispositivi radio che permettono di interconnettere due bus RS485 in modo trasparente. In questo modo è possibile collegare via radio :
- un controller domotico per uno o più moduli DomBus in una posizione remota
- una rete DomBus con un'altra in una posizione remota
Di seguito la descrizione del collegamento mediante diversi sistemi radio.
1. Utilizzo di EBYTE EWM-290-400T20D per ottenere un collegamento wireless trasparente tra due bus RS485
Il modello EBYTE EWM-290-400T20D è un modulo LoRa molto economico con interfaccia RS485, in grado di operare a un bitrate aereo di 62500 bps nella banda 433÷434 MHz con una potenza fino a 20 dBm e fino a 115200 bps sulla porta RS485. Si prega di notare che il modulo non ha il marchio CE, quindi in Europa può essere utilizzato solo per test.
E' dotato di un cavo a 5 fili:
- 5V deve essere collegato a 4,5÷5,5V, consumo di corrente massimo 100mA
- GND da collegare a terra
- TXD/A da collegare a RS485 A
- RXD/B da collegare a RS485 B
- STB: non mi interessa
L'antenna da 433 MHz, con connettore SMA maschio, non è fornita con il modulo, quindi deve essere acquistata separatamente.
Configurazione del modulo EWM290
Il modulo può essere connesso tramite comandi AT. La modalità UART predefinita è 9600,8,n,1 e ogni comando deve essere inviato come un'unica sequenza, senza ritardi tra i caratteri, in modo da poter selezionare ciascun comando con il mouse e incollarlo nel programma terminale.
In Linux è possibile utilizzare picocom -b9600 /dev/ttyUSBx per connettere il dispositivo al bitrate di lavoro (9600 di default, -b115200 se già configurato) e inviare il comando
AT+MODE=2
per mettere il modulo in modalità di configurazione: ora il modulo seleziona 9600 bps, quindi se hai emesso quel comando a un bitrate diverso, esci da picocom (ctrl-a ctrl-x) ed esegui di nuovo il comando picocom -b9600 /dev/ttyUSBx , quindi invia ciascuna delle seguenti righe specificando un valore KEY casuale compreso tra 0 e 65535 (non 12345!).
AT+TASSO=7
AT+PACCHETTO=0
AT+POTENZA=0
AT+LBT=1
AT+UART=7,0
AT+KEY=12345
AT+CANALE=24
AT+MODE=0
Ora il modulo è in modalità trasparente e forma un collegamento radio wireless tra i due bus RS485.
Linea LAN/WiFi/Internet tra il controller domotico e i moduli DomBus
Per realizzare il tunnel seriale virtuale su TCP/IP è possibile utilizzare le seguenti soluzioni.
1. Seriale virtuale su TCP/IP tra due dispositivi Linux
Se il controller domotico è ospitato in un dispositivo Linux (ad esempio un Raspberry PI o NUC, ora chiamato "main") e i dispositivi DomBus sono connessi a un altro dispositivo Linux (Raspberry, Rock PI S, QNAP, ..., ora chiamato "slave"), è possibile che il controller principale si colleghi alla rete DomBus tramite una connessione TCP/IP, cablata o wireless, in questo modo:
- Sul dispositivo slave (dove la rete DomBus è connessa tramite l'economico adattatore USB/RS485), installare il servizio ser2net :
sudo apt install ser2net - Configurare il servizio ser2net modificando il file /etc/ser2net.yaml :
sudo nano /etc/ser2net.yaml - Rimuovere le connessioni esistenti che non vengono utilizzate e inserire le seguenti righe per definire la connessione con un bus:
connection: &dombus
accepter: tcp,2000
enable: on
options:
kickolduser: true
telnet-brk-on-sync: true
connector: serialdev,
/dev/ttyUSB0,
115200n81,local
- È possibile modificare la porta TCP (2000, nell'esempio) e la porta seriale (ttyUSB0 nell'esempio).
- Nel caso in cui più di un bus DomBus sia collegato al dispositivo slave, definire una connessione per ciascun bus (specificando una porta TCP diversa per ciascun bus).
- Riavviare il servizio ser2net utilizzando il comando service ser2net restart
- Verificare che funzioni utilizzando il comando telnet localhost 2000 sul dispositivo slave; ctrl+] per uscire
- Sul dispositivo principale (con Domoticz, Home Assistant, Node-RED, controller OpenHAB...) installare l'applicazione socat :
sudo apt install socat - Eseguire il seguente comando per creare la porta seriale virtuale /dev/ttyUSBDomBusNet per gestire i dispositivi DomBus collegati al dispositivo slave: socat pty,link=/dev/ttyUSBDomUSBBusNet tcp:192.168.6.2:2000 dove 192.168.6.2 dovrebbe essere sostituito con il numero IP del dispositivo slave
- Nel caso in cui la connessione venga effettuata tramite Internet o uno o più router con NAT, potrebbe essere necessario configurare l'inoltro delle porte/NAT di destinazione sui router
- Testare l'intero sistema eseguendo il comando cat /dev/ttyUSBDomBusNet : se funziona, scrivere un piccolo script bash per attivare la porta seriale virtuale e richiamare tale script da /etc/rc.local assicurandosi che alla fine ci sia il carattere "&", per eseguire lo script in background:
#!/bin/bash
# New file /usr/local/sbin/dombusnet.sh , permissions 0700
# Thanks to Patrick Schaerer for testing and suggestions
TTYDEV=/dev/ttyUSBDomBusNet
TCPSERVER=192.168.6.2
TCPPORT=2000
while true; do
socat pty,link=${TTYDEV},waitslave tcp:${TCPSERVER}:${TCPPORT}
sleep 5
done
# End of file
# File /etc/rc.local
# ........
/usr/local/sbin/dombusnet.sh &
exit 0
Questa è la soluzione più economica per controllare i moduli DomBus tramite una connessione cablata o wireless nel caso in cui i moduli DomBus si trovino in un'area in cui è già attivo un dispositivo Linux
2. Collegamento dei moduli DomBus tramite convertitori RS485-Ethernet o WiFi
Utilizzando un convertitore Ethernet <--> RS485 come MOXA NPORT o altri dispositivi è davvero semplice collegare dispositivi RS485 (moduli DomBus o altri moduli Modbus RTU) che si trovano in un'area diversa dal controller.
In questo caso è necessario installare un driver per creare una porta COM virtuale (porta seriale virtuale) per accedere al bus RS485 remoto.
Di seguito un elenco dei convertitori RS485-ethernet :
- Waveshare RS485 a WiFi / Ethernet : non testato, ma la società produttrice afferma che funziona utilizzando il programma socat (Linux)
- Waveshare RS485 TO ETH (disponibile anche con supporto PoE ): non testato, ma la società produttrice afferma che funziona utilizzando il programma socat (Linux)
- PUSR W610 RS485/RS232 a WiFi/Ethernet : non testato, ma il produttore afferma che funziona con il programma socat (Linux) o con il software Windows fornito dal produttore. La porta TCP è configurabile sul modulo (numero di porta locale/remota).
- Protoss PW11 o PW21 RS485 a WiFi/Ethernet : non testato, ma dovrebbe funzionare
- Lilygo T-CAN485 : scheda WiFi basata su ESP32, testata con moduli DomBus dotati di firmware Modbus e controller Loxone. (Grazie Filip per aver condiviso le informazioni!)
Se conoscete altri dispositivi che possono essere utilizzati allo stesso scopo a prezzi ragionevoli, vi preghiamo di comunicarcelo.
3. Utilizzo di ESP32 + ESPHome per connettere moduli Modbus come DomBus
Slawomir descrive nella pagina GitHub https://github.com/SCiunczyk/wallbox-diy come utilizzare il firmware ESP32 + ESPHome per creare un gateway tra dispositivi Modbus e Home Assistant, tramite WiFi. Questa è solo una parte del progetto descritto, che permette di ricaricare un veicolo elettrico utilizzando sia la corrente monofase (bassa potenza, da 1 kW a 7 kW, generalmente utilizzata in modalità solare) che quella trifase (utilizzata per caricare il veicolo a piena velocità, da 4 kW a 22 kW) utilizzando il modulo Creasol DomBusEVSE .
Grazie a Slawomir per aver condiviso informazioni sulla sua wallbox intelligentissima!