To boldly go where no one has gone before

Autore: tuttoilmondo (Pagina 1 di 5)

Collegare RS485 a Raspberry per Home Assistant

Se avete la fortuna di poter collegare il dongle RS485 che legge i dati del vostro inverter direttamente a raspderry che ospita il vostro HA, la parte iniziale di questa guida non vi serve e potete andare direttamente al capito dedicato.

Se invece avete un raspberry con il dongle RS485 collegato all’inverter, e un altro raspberry con HA ecco come è possible metterli in comunicazione vi MQTT.

Sul raspberry con il dongle RS485 installare Pyton:

sudo apt install python3-pymodbus python3-paho-mqtt

se risponde OK ci siamo..

Prima di procedere è necessario conoscere l’IP del raspberry che ospita HA, nel mio caso 192.168.0.7 comando:

ping -c 4 192.168.0.7 verificare che risponda.

Prima di procedere è necessario installare nel raspberry che ospita HA l’applicazione Mosquitto Broker. Andare poi nelle integrazioni e verificare che MQTT si sia aggiunta e non ci siano errori. Creare l’utente mqtt_powerx e scegliere una password (attenzione deve essere un’utente e non una persona)

Installata l’App Mosquitto torniamo sul raspberry collegato all0inverte e verifichiamo che MQTT risponda sulla porta 1883 con il comando:

nc -vz 192.168.0.7 1883

la risposta dovrebbe essere: Connection to 192.168.0.7 1883 port [tcp/*] succeeded!

Installiamo questo software con il comando:

sudo apt install mosquitto-clients

proviamo un semplice comando come:

mosquitto_pub -h 192.168.0.7 -u mqtt_powerx -P PASSWORD -t test/powerx -m “ciao”

Al posto di PASSWORD metti quella da te scelta. Se funziona non dovrebbe dare errori. Eseguiamo un test di comunicazione, sempre sul raspberry inverter digitare il comando:

mosquitto_sub -h 192.168.0.7 -u mqtt_powerx -P TUA_PASSWORD -t test/powerx

dopo aver dato invio il terminale dovrebbe restare in attesa, apri un altro terminale e digita:

mosquitto_pub -h 192.168.0.7 -u mqtt_powerx -P TUA_PASSWORD -t test/powerx -m “ciao”

se ha funzionato il primo terminale dovrebbe sbloccarsi e scrivere “ciao” poi rimanere nuovamente in attesa. Fermare tutto con CTRL + C .

Sempre sul raspberry inverter creare il file “powerx_soc.py “dentro una cartella dove si hanno diritti di lettura e scrittura, che contiene il seguente codice. Modificare il file con il giusto nome utente e password.

import time
import struct
import paho.mqtt.publish as publish
from pymodbus.client import ModbusSerialClient

MQTT_BROKER = "192.168.0.7"
MQTT_USER = "mqtt_powerx"
MQTT_PASSWORD = "LA_TUA_PASSWORD"

client = ModbusSerialClient(
    port="/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0",
    baudrate=115200,
    parity="N",
    stopbits=1,
    bytesize=8,
    timeout=2
)

discovery_sent = False

while True:
    try:
        if client.connect():

            result = client.read_input_registers(
                address=4626,
                count=2,
                slave=1
            )

            if not result.isError():

                raw = struct.pack(
                    '>HH',
                    result.registers[0],
                    result.registers[1]
                )

                soc = struct.unpack('>f', raw)[0]

                if not discovery_sent:

                    publish.single(
                        "homeassistant/sensor/powerx_soc/config",
                        payload='{"name":"PowerX SOC","state_topic":"powerx/soc","unit_of_measurement":"%","unique_id":"powerx_soc","state_class":"measurement","device":{"name":"FEB PowerX","manufacturer":"FEB","model":"PowerX"}}',
                        hostname=MQTT_BROKER,
                        auth={
                            "username": MQTT_USER,
                            "password": MQTT_PASSWORD
                        }
                    )

                    discovery_sent = True

                publish.single(
                    "powerx/soc",
                    round(soc, 1),
                    hostname=MQTT_BROKER,
                    auth={
                        "username": MQTT_USER,
                        "password": MQTT_PASSWORD
                    }
                )

                print(f"SOC: {soc:.1f}%")

        client.close()

    except Exception as e:
        print(e)

    time.sleep(10)

Posizionarsi sulla cartella, verificare che il file sia presente, digitare il comando:

python3 powerx_soc.py

Dovrebbe iniziare a generare su ogni riga il valore di carica della batteria. Aprire un nuovo terminale e digitare il comando:

mosquitto_sub -h 192.168.0.7 -u mqtt_powerx -P TUA_PASSWORD -t powerx/soc

se c’è comunicazione dovrebbe comparire lo stesso valore della finestra 1.

Creiamo l’entità che riceve il dato sul raspberry HA digitando dal terminale del raspberry inverter il seguente comando (inserendo la password corretta):

mosquitto_pub -h 192.168.0.7 -u mqtt_powerx -P TUA_PASSWORD -r -t homeassistant/sensor/powerx_soc/config -m ‘{“name”:”PowerX SOC”,”state_topic”:”powerx/soc”,”unique_id”:”powerx_soc”}’

Sul raspberry HA nell’Integrazione MQTT dovrebbe comparire la nuova identità e se lo script Python è in esecuzione il suo valore dovrebbe essere uguale alla carica delle batterie del nostro impianto.

Se tutto funziona si può creare uno script più completo che legga anche gli altri valori come il PC, BAT, LOAD e GRID:

import time
import struct
import paho.mqtt.publish as publish
from pymodbus.client import ModbusSerialClient

MQTT_BROKER = "192.168.0.7"
MQTT_USER = "mqtt_powerx"
MQTT_PASSWORD = "TUA_PASSWORD"

MODBUS_PORT = "/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0"

client = ModbusSerialClient(
    port=MODBUS_PORT,
    baudrate=115200,
    parity="N",
    stopbits=1,
    bytesize=8,
    timeout=2
)

discovery_done = False


def read_float(address):
    result = client.read_input_registers(
        address=address,
        count=2,
        slave=1
    )

    if result.isError():
        return None

    raw = struct.pack(">HH",
                      result.registers[0],
                      result.registers[1])

    return round(struct.unpack(">f", raw)[0], 2)


def mqtt_send(topic, value):
    publish.single(
        topic,
        str(value),
        hostname=MQTT_BROKER,
        auth={
            "username": MQTT_USER,
            "password": MQTT_PASSWORD
        }
    )


while True:

    try:

        if client.connect():

            if not discovery_done:

                entities = {
                    "soc": "%",
                    "pv_power": "kW",
                    "battery_power": "kW",
                    "load_power": "kW",
                    "grid_power": "kW",
                }

                for sensor, unit in entities.items():

                    payload = (
                        f'{{'
                        f'"name":"PowerX {sensor}",'
                        f'"state_topic":"powerx/{sensor}",'
                        f'"unique_id":"powerx_{sensor}",'
                        f'"unit_of_measurement":"{unit}"'
                        f'}}'
                    )

                    publish.single(
                        f"homeassistant/sensor/powerx_{sensor}/config",
                        payload=payload,
                        hostname=MQTT_BROKER,
                        retain=True,
                        auth={
                            "username": MQTT_USER,
                            "password": MQTT_PASSWORD
                        }
                    )

                discovery_done = True

            soc = read_float(4626)
            pv = read_float(4720)
            battery = read_float(4722)
            load = read_float(4724)
            grid = read_float(4726)

            if soc is not None:
                mqtt_send("powerx/soc", soc)

            if pv is not None:
                mqtt_send("powerx/pv_power", pv)

            if battery is not None:
                mqtt_send("powerx/battery_power", battery)

            if load is not None:
                mqtt_send("powerx/load_power", load)

            if grid is not None:
                mqtt_send("powerx/grid_power", grid)

            print(
                f"SOC={soc}% "
                f"PV={pv}kW "
                f"BAT={battery}kW "
                f"LOAD={load}kW "
                f"GRID={grid}kW"
            )

            client.close()

    except Exception as e:
        print(e)

    time.sleep(10)

Se avete usato lo stesso script powerx_soc in HA compariranno le nuove entità e finalmente il vostro HA ha tutti i valori necessari a monitorare il vostro impianto fotovoltaico.

Come collegare un inverter FEB PowerX o simile a Raspberry Pi tramite Modbus RS485

Come accade spesso questi inverter pubblicano i dati di produzione solo via App proprietaria, questo non permette di usare i dati di produzione del proprio impianto fotovoltaico sulla propria domotica. Il mio obbiettivo era quello di poter visualizzare sulla mia domotica basata su Home Assistant dei dati di produzione del mio impianto fotovoltaico.

Dopo alcune prove sono riuscito a collegare il mio inverter FEB PowerX a un Raspberry Pi 4 e a leggere correttamente i registri Modbus RTU tramite RS485.

Hardware utilizzato

  • Raspberry Pi 3, 4 o 5 con Raspberry Pi OS
  • Dongle USB RS485 CH340
  • Inverter FEB PowerX
  • Cavo RJ45 modificato

Questo è il dongle che ho acquistato:

Questo è il cavo che ho realizzato:

Il mio inverter ha una porta RS485, questa è impegnata dal cavo di rete che mette in comunicazione le batterie con l’inverter, le batterie però usano il canale BMS e non il canale EMS come si vede dalla figura sotto:

al posto di cercare un deviatore come quello di figura sopra, di difficile reperibilità, ho creato con due connettore di rete RJ45, uno maschio e uno femmina, un cavo che estrae i soli PIN 7 e 8.

Con questo cavo i PIN dal 1 al 6 continuano ad andare dall’inverter alla batteria, questo è fondamentale per il funzionamento corretto dell’inverter e dell’App. I soli PIN 7 e 8 adesso non vanno più alla batteria ma con i cavetti rosso e bianco sono pronti per essere collegato al dongle RS485 per la comunicazione RS485.

Ultimo passaggio è quello di impostare nell’App il canale slave:

Adesso è tutto pronto per testare la comunicazione RS485.

Collegamento RS485

Collegare il cavo del PIN 7 alla porta A del dongle e il PIN 8 alla porta B il GND non è necessario per cavi corti.

Verifica del dongle USB

Inserire il dongle in una porta USB del raspberry e verificare che venga riconosciuto con il comando:

ls /dev/ttyUSB*

nel mio caso il risultato è: /dev/ttyUSB0

Per identificare il dispositivo: dmesg | grep ttyUSB

Utilizzare il nome persistente del dispositivo

Se si dovesse riavviare il Raspberry la porta potrebbe cambiare, per evitare questo problema dare il comando: -l /dev/serial/by-id/

Nel mio caso la risposta è stata:

/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0

lo useremo da ora in poi per identificare il dongle.

Installazione di mbpoll

sudo apt update

sudo apt install mbpoll

Verifica:

which mbpoll

Parametri Modbus corretti

Dopo vari tentativi i parametri funzionanti sono risultati:

Protocollo : Modbus RTU

Slave ID   : 1

Baudrate   : 115200

Parity     : None

Stop bit   : 1

Primo test di comunicazione

Lettura della versione protocollo:

mbpoll -m rtu -a 1 -b 115200 -P none -t 4:hex -0 -r 8192 -c 1 /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0

Risultato:

0x0681

Questo conferma che la comunicazione Modbus è attiva. Se non dovesse funzionare potreste provare a invertire i cavi quindi PIN 7 a B e PIN 8 ad A.

Un altro comando utile identifica il modello di Inverter:

mbpoll -m rtu -a 1 -b 115200 -P none -t 4:hex -0 -r 8198 -c 1 /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0

Risultato:

0x0001 che tradatto vuol dire 1 = Single Phase

Con il comando seguente leggiamo il SOC ovvero la percentuale di carica della batteria:

Registro: 0x1212 Decimale: 4626

Comando:

mbpoll -m rtu -a 1 -b 115200 -P none -t 4:hex -0 -r 4626 -c 2 /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0

Risultato:

0x4290

0x0000

Convertito in float IEEE754:

72%

Verificare per sicurezza se coincide con il valore che legge l’App.

Disabilitare la console seriale

Anche se viene utilizzato un dongle USB, conviene disabilitare la console seriale:

sudo systemctl disable serial-getty@ttyS0.service

Verifica:

systemctl is-enabled serial-getty@ttyS0.service

il risultato dovrebbe essere: enabled-runtime

Risultato finale

Al termine della configurazione:

✅ Comunicazione RS485 funzionante

✅ Accesso diretto all’inverter

✅ Lettura registri Modbus

✅ SOC batteria verificato

Parametri finali

port: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0

slave: 1

baudrate: 115200

parity: N

stopbits: 1

protocol: modbus_rtu

Risparmiare energia con la domotica

Oggi risparmiare gas non significa più rinunciare al comfort o vivere con il maglione in casa. Con un piccolo investimento in domotica è possibile ridurre i consumi in modo intelligente, automatico e sorprendentemente semplice.

Controllo intelligente della temperatura

Il primo passo è sostituire o affiancare il termostato tradizionale con un sistema smart. I termostati domotici permettono di:

Programmare fasce orarie precise

Regolare la temperatura stanza per stanza

Spegnere automaticamente il riscaldamento quando non c’è nessuno in casa

Controllare tutto da smartphone

Spesso il gas viene sprecato perché la caldaia continua a lavorare quando la casa è vuota o quando la temperatura è già adeguata. Un sistema intelligente evita questi sprechi in modo automatico.

Integrazione con climatizzatori e pompe di calore

Molti climatizzatori moderni funzionano anche come pompe di calore. Integrandoli nella domotica è possibile:

Utilizzarli nelle mezze stagioni al posto della caldaia

Attivarli solo in presenza di persone

Coordinare il loro funzionamento con il riscaldamento per evitare sovrapposizioni

La gestione centralizzata evita che più sistemi lavorino contemporaneamente senza necessità, riducendo consumi inutili.

Automazioni semplici, grande risparmio

Con piattaforme come Home Assistant si possono creare automazioni molto semplici ma efficaci, ad esempio:

Se una finestra resta aperta per più di 5 minuti → il riscaldamento si spegne.

Se la casa entra in modalità “Assente” → temperatura ridotta automaticamente.

Di notte → abbassamento controllato di 1-2 gradi.

Anche solo abbassare la temperatura di 1°C può ridurre i consumi fino al 5-7%.

Costi contenuti, rientro rapido

Il bello è che non servono impianti costosi o interventi strutturali. Bastano:

Un hub domotico (spesso già presente)

Valvole termostatiche smart o un termostato intelligente

Eventuali moduli Wi-Fi per i climatizzatori

Con una spesa relativamente contenuta si può ottenere un risparmio annuale che ripaga l’investimento in poco tempo.

Comfort e controllo totale

Oltre al risparmio economico, la domotica offre un vantaggio importante: il controllo totale. Sapere quanta energia si consuma, visualizzare grafici, ricevere notifiche e ottimizzare nel tempo rende l’utente più consapevole e autonomo.

In conclusione, risparmiare gas oggi è facile: basta lasciare che sia la tecnologia a fare il lavoro al posto nostro. La domotica non è un lusso, ma uno strumento pratico per consumare meno, spendere meno e vivere meglio.

Se sei interessato leggi l’articolo su come ho organizzato la mai domotica

Paesi al Tramonto

Benvenuti su Paesi al Tramonto, il mio mondo visto dall’alto! Qui troverete spettacolari riprese aeree in alta definizione, catturate con il mio drone al tramonto o in condizioni di luce uniche. Esploriamo insieme i paesi italiani, castelli, ville, luoghi speciali e paesaggi mozzafiato..

La mia flotta è costituita da due droni un piccolo DJI Mini 2SE e un DJI Air 2S.

Ho conseguito le licenza di volo ENAV A1, A2 e A3 e a breve otterrò la STS01 e 02.

L’attività principale svolta è il girare mini documentati aerei per il mio canale YouTube “Paesi al Tramonto”, di seguito gli articoli su gli ultimi video pubblicati.

YouTube Channel : https://www.youtube.com/@PaesiAlTramonto

Instagram: https://www.instagram.com/paesialtramonto5

Vigonovo documentario aereo by Paesi al Tramonto

16-11-2023 – Vigonovo (PD) documentario aereo by Paesi al Tramonto. Tutte le riprese sono effettuate con pilota e drone regolarmente registrati su D-Flight, azienda autorizzata da ENAV S.p.A. (acronimo di Ente Nazionale per l’Assistenza al Volo). Le aree riprese non hanno divieti di sorvolo alle altezze in cui sono state effettuate.

Vigonovo (Vigonóvo in veneto) è un comune italiano di 9 839 abitanti della città metropolitana di Venezia in Veneto.

Geografia fisica
Vigonovo si trova nel punto più estremo della Riviera del Brenta. Il comune si situa nel territorio d’incrocio tra il corso del Brenta e quello del Naviglio, al confine con la provincia di Padova. Con le sue frazioni di Galta, Tombelle e Celeseo, Vigonovo si estende per circa 13 km² a ovest del Naviglio su terreno pianeggiante.

Ricchissimo di corsi d’acqua, oltre al Brenta, il territorio è percorso dal canale Piovego, dallo scolo Consorzio Piovega e dallo scolo Consorzio Cornio.

Origini del nome
Anticamente il paese era chiamato Sarmazza (o Sermazza) perché sede di un insediamento di Sarmati. Solo nel periodo medievale il nome verrà tramutato in Vicus Novus, cioè villaggio nuovo. L’attuale toponimo è chiaramente derivazione diretta di quest’ultima denominazione.

Storia
Il primo insediamento della zona doveva trovarsi presso l’attuale località Sarmazza, come testimonia il ritrovamento di una necropoli paleoveneta collocabile nel III secolo a.C. Poco dopo, con l’arrivo dei Romani, fu tracciata la via Annia che collegava Padova ad Aquileia toccando anche le odierne Tombelle e Sarmazza.

Nel IV secolo l’area fu evangelizzata. Il primo luogo di culto cristiano, costruito sui resti di un fortilizio romano, si trovava sempre a Sarmazza ed era dedicato al Santissimo Salvatore. Pare che il nome della località rimandi ai Sarmati, popolazione barbarica che invase l’Italia nella metà del V secolo: si ipotizza che, percorrendo la via Annia, l’orda abbia devastato Sarmazza, obbligando gli abitanti a rifugiarsi sulle isole della Laguna Veneta.

Sul finire del VI secolo, esauritesi le minacce dei barbari, gli abitanti tornarono a ripopolare la zona e ricostruirono il paese, che da allora si chiamò Vigonovo (ovvero “villaggio nuovo”). La nuova chiesa, dedicata all’Assunta, continuò a lungo a portare il titolo di “Santa Maria di Sarmazza di Vigonovo”; si trattava di una pieve matrice, da cui dipendevano diverse cappelle distribuite tra Camin e Lova.

Nell’874 viene attestato per la prima volta il toponimo Sarmazza. All’inizio del X secolo il territorio fu nuovamente devastato dalle scorribande degli Ungari, che distrussero definitivamente la chiesa di San Salvatore.

Al 1035 risale il primo documento che cita Vigonovo.

Nel corso del Medioevo il territorio a est di Padova fu coinvolto nelle guerre che opposero quest’ultima alla Repubblica di Venezia, a causa di dispute confinarie e per gli interventi idraulici che modificavano il corso del fiume Brenta. Nel 1405 Padova, e così Vigonovo, fu definitivamente assoggettata alla Serenissima e tale rimase sino alla sua caduta nel 1797.

Il periodo veneziano si caratterizzò per la costruzione di numerose ville venete, tra cui la splendida villa Sagredo.

Alla successiva amministrazione Lombardo-Veneta si colloca la deviazione del Brenta verso Chioggia e la formazione dell’attuale Naviglio del Brenta, allo scopo di intervenire sul problema delle inondazioni e dell’interramento della Laguna Veneta, ma anche per creare posti di lavoro.

Nel secondo dopoguerra Vigonovo ha visto un notevole sviluppo economico grazie alla crescita del settore calzaturiero.

Fonte Wikipedia

Limena documentario aereo by Paesi al Tramonto

03-11-2023 – Limena (PD) documentario aereo by Paesi al Tramonto. Tutte le riprese sono effettuate con pilota e drone regolarmente registrati su D-Flight, azienda autorizzata da ENAV S.p.A. (acronimo di Ente Nazionale per l’Assistenza al Volo). Le aree riprese non hanno divieti di sorvolo alle altezze in cui sono state effettuate.

Lìmena (Imena in veneto) è un comune italiano di 8 248 abitanti della provincia di Padova in Veneto, situato a nord del capoluogo. A Limena dal fiume Brenta si stacca il canale Brentella. È un comune facente parte dell’hinterland di Padova.

Evolutasi, soprattutto nel secondo dopoguerra, da paese a eminente vocazione agricola a centro di produzione prevalentemente industriale, la località mostra urbanisticamente parlando — una ricca presenza di uno sviluppo industriale.

Noventa Padovana documentario aereo by Paesi al Tramonto

03-11-2023 – Noventa (PD) documentario aereo by Paesi al Tramonto. Tutte le riprese sono effettuate con pilota e drone regolarmente registrati su D-Flight, azienda autorizzata da ENAV S.p.A. (acronimo di Ente Nazionale per l’Assistenza al Volo). Le aree riprese non hanno divieti di sorvolo alle altezze in cui sono state effettuate.

Noventa Padovana (Noénta in veneto) è un comune italiano di 11 281 abitanti della provincia di Padova in Veneto, parte integrante dell’area metropolitana del capoluogo.

Con un reddito medio (dichiarato) di 25.808 € per abitante nel 2019, Noventa risulta il comune più benestante della provincia superando anche il capoluogo; inoltre è l’ultimo comune della Riviera del Brenta partendo da Venezia.

Bovolenta documentario aereo by Paesi al Tramonto

03-11-2023 – Bovolenta (PD) documentario aereo by Paesi al Tramonto. Tutte le riprese sono effettuate con pilota e drone regolarmente registrati su D-Flight, azienda autorizzata da ENAV S.p.A. (acronimo di Ente Nazionale per l’Assistenza al Volo). Le aree riprese non hanno divieti di sorvolo alle altezze in cui sono state effettuate.

Saonara documentario aereo by Paesi al Tramonto

2-11-2023 – Saonara (PD) documentario aereo by Paesi al Tramonto. Tutte le riprese sono effettuate con pilota e drone regolarmente registrati su D-Flight, azienda autorizzata da ENAV S.p.A. (acronimo di Ente Nazionale per l’Assistenza al Volo). Le aree riprese non hanno divieti di sorvolo alle altezze in cui sono state effettuate.

Il Comune di Saonara

Il Comune di Saonara si trova in provincia di Padova nella regione Veneto. Ha 10.558 abitanti, con una densità di 779.76 abitanti per chilometro quadrato.

Il territorio comunale si estende su una superficie di 13.54 km² e si trova ad un’altitudine di 10 metri sul livello del mare. Il comune rientra nella zona sismica zona 3 (sismicità bassa).

L’amministrazione comunale è guidata dal sindaco Michela Lazzaro (lista civica Saonara Domani) dal 13-6-2022 , in carica dal 13-6-2022 . Il comune ha il CAP 35020 e il prefisso telefonico 049. Il codice catastale del comune è I418.

Il santo patrono è san Martino di Tours, festeggiato il 11 novembre.

Ponte San Nicolò documentario aereo by Paesi al Tramonto

26-10-2023 – Ponte San Nicolò (PD) documentario aereo by Paesi al Tramonto. Tutte le riprese sono effettuate con pilota e drone regolarmente registrati su D-Flight, azienda autorizzata da ENAV S.p.A. (acronimo di Ente Nazionale per l’Assistenza al Volo). Le aree riprese non hanno divieti di sorvolo alle altezze in cui sono state effettuate.

« Articoli meno recenti

© 2026 Paolo Tuttoilmondo

Tema di Anders NorenSu ↑