Home Automation System - Monitor produzione fotovoltaica
Ormai ci ho preso la mano...dopo il successo (mah, per adesso sta continuando a funzionare...è già un gran bell'obiettivo...) del primo sensore autocostruito ed integrato in OpenHAB tramite MQTT (vedi Home Automation System - Costruiamo il primo sensore), voltiamo pagina e proviamo a costruirne un altro...con l'obiettivo di tenere sotto controllo la produzione del mio impianto fotovoltaico da 3 KW, installato sul tetto di casa.
[Immagine libera presa da Pixabay - Licenza Creative Commons CC0]
A tal scopo, mi appoggio ad un dispositivo commerciale, chiamato OWL CM160, fornitomi in dotazione con l'impianto, composto da una pinza amperometrica wireless e un display per la visualizzazione dei dati...
![](https://steemitimages.com/600x600/https://steemitimages.com/DQmabQQXhxkmwuCuevWLRagmz7516wLTkipUBdeAS6EHjVx/image.png)
Sostanzialmente la pinza amperometrica viene agganciata al cavo della fase collegato all'uscita dell'inverter (tensione alternata 220v) verso l'impianto elettrico di casa.
![](https://steemitimages.com/600x600/https://steemitimages.com/DQmWqus2SNrdAKCy1Ai5UTQYFszZ9PEQj8qPo3kZUcHujKo/image.png)
La pinza trasmette i dati di produzione via wireless RF 433Mhz al display che si occupa di visualizzarli (ovviamente!!!), oltre che memorizzarli per un periodo e permetterne lo scarico su PC.
Il sistema funziona bene ma purtroppo è chiuso...a me servirebbe poter intercettare questi dati e mandarli al solito OpenHAB. Prima cosa che faccio è cercare su internet se il mio inverter è facilmente interfacciabile tramite seriale / usb...dopo alcune ricerce mi rendo conto che quello che sto cercando è quasi impossibile da ottenere...
Allora mi sono detto: con Arduino tempo addietro avevo già fatto un piccolo prototipo per la trasmissione e la ricezione di segnali RF 433Mhz...perchè non provare a sniffare la comunicazione dell'OWL??? Faccio nuovamente qualche ricerca su internet e mi rendo conto di non essere stato il primo ad avere quest'idea...
In particolare ho trovato molto utile questo articolo, anche se si basa su un modello di OWL leggermente diverso.
Da qui scopro che questi dispositivi utilizzano il protocollo di comunicazione della Oregon Scientific...in particolare il CM160 utilizza la versione 3...utilizzando, per la trasmissione, la codifica Manchester OOK (on off keying) alla frequenza di 433 Mhz.
Fortunatamente viene messo a disposizione anche il software per Arduino & co che ne permette la decodifica...diciamo che scriverlo da zero, documentazione e specifiche del protocollo alla mano, sarebbe stata una bella impresa...risparmiamo un pò di tempo.
E allora, bando alle ciance...passiamo alla fase operativa.
![](https://steemitimages.com/600x600/https://steemitimages.com/DQmPZyZ6YTd1PTHjja9mpLojwsAJ4VBa2fyscVG3Ni8duiM/image.png)
Recupero un Arduino UNO che se ne stava bello bello dormiente in una scatola...più il ricevitore wireless RF 433Mhz. Scarico il software di decodifica del protocollo e mi faccio un programmino di prova...incredibile, i pacchetti dell'OWL vengono intercettati...(mi sento un Hacker 😱)...ed inviati su porta seriale. Effettuando, tramite codice, alcune "operazioni" binarie si riesce in maniera abbastanza semplice a decodificare i dati "nascosti" all'interno dei pacchetti trasmessi...et voilà: abbiamo il dato di produzione trasmesso dalla pinza amperometrica.
Questo è un esempio di pacchetti "grezzi" ricevuti in esadecimale:
2a8081bf01501a011900 ==> pari a 434 W
2a81817f02d0fdf71800 ==> pari a 627 W
2a81813f0980f3b71300 ==> pari a 2366 W
Sulla seriale di Arduino abbiamo:
![](https://steemitimages.com/800x800/https://steemitimages.com/DQmUJAwUydLrrh4ayX8qPN64LaQRjEDfuroUZw4TqanbRNb/image.png)
Bene, bene...tutto funziona e non ho dovuto neanche sbatterci troppo la testa...
Adesso non rimane altro che dire ad Arduino che i dati ricevuti devono essere mandati ad OpenHAB tramite MQTT...Ho bisogno della rete...quindi monto lo shield Ethernet per permettere ad Arduino di connettersi alla rete locale...
Modifichiamo quindi lo sketch di Arduino utilizzando le librerie di connessione MQTT già conosciute per lo sviluppo del dispositivo che ho messo in cucina...non era un Arduino ma un NodeMCU ESP8266, ma la programmazione è la stessa...a parte la modalità di connessione in rete...il NodeMCU ha il wifi nativo, mentre Arduino, come abbiamo visto, ha bisogno di uno shield aggiuntivo.
Il topic (vi ricordate cos'è, vero???) scelto per la pubblicazione è
arduino/groundfloor/rf433/solarenergy/state
seguendo la solita naming convention usata per gli altri dispositivi:
[device]/[zona]/[tipologia]/[id del dato]/state
Nel messaggio inserisco semplicemente il valore della potenza rilevata in Watt. Ecco i messaggi pubblicati dal dispositivo, visti tramite mqtt-spy:
![](https://steemitimages.com/600x600/https://steemitimages.com/DQmWF3Wf7rNFkK7e54X3hWkU4Pv9cSyu6eCAbscb2VstyDz/image.png)
La configurazione di OpenHAB è del tutto identica a quella fatta per il sensore della cucina...si crea un item agganciato ad un certo topic MQTT e poi si aggiunge un nuovo oggetto nella sitemap...
Questo il risultato finale (BasicUI di OpenHAB):
![](https://steemitimages.com/600x600/https://steemitimages.com/DQmUhciaJP6d3XVmgUsHeY9p71wFUpibGTcMsRXJuKPMwMs/image.png)
Utile anche in questo caso visualizzare l'andamento nel tempo della produzione. Creo quindi una bella dashboard in Grafana...
![](https://steemitimages.com/600x600/https://steemitimages.com/DQmNxQWfata38cbgPM5nZ7pkPt8qaVhwoqrp1XexgiGCMqA/image.png)
[Tutte le immagini sono dell'autore se non diversamente specificato]
Sempre dei fantastici progetti, ma dove trovi tutto questo tempo?!
eheh grazie...la notte porta consiglio...e toglie qualche ora di sonno 😜
Ti manca solo di aderire al progetto Power Ledger :))