Sommario:
- Passaggio 1: parti necessarie
- Passaggio 2: esigenze software
- Passaggio 3: assemblare
- Passaggio 4: codice
Video: Il tuo monitoraggio della bolletta energetica: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
SU QUESTO PROGETTO
Se vuoi davvero rendere la tua casa più smart, probabilmente vorrai partire dalle tue bollette mensili (es. energia, gas, ecc…). Come dicono alcuni, Good for Planet, The Wallet e The Bottom Line. L'hardware open source è il nostro modo per raggiungere la sostenibilità nell'ambiente domestico! Questa idea ci ha portato a costruire una soluzione semplice e sicura, facile da integrare con qualsiasi software di domotica poiché espone i dati su MQTT (nel nostro caso ti mostreremo come integrarlo in Home Assistant).
Panoramica
Per misurare il consumo di energia elettrica, abbiamo scelto di utilizzare il Finder Energy Meter, poiché è progettato per l'uso su guida DIN e si inserisce perfettamente nell'armadio principale della nostra casa. La cosa bella di questo prodotto è che ha un'interfaccia RS485 Modbus, un protocollo di comunicazione standard industriale che rende davvero facile parlare con un Arduino. Arduino ha infatti rilasciato uno shield ufficiale, il MKR485 e due librerie per decodificare il protocollo. Come scheda madre, abbiamo scelto Arduino MKR WiFi 1010, poiché condivide il fattore di forma MKR e dispone di connettività WiFi.
ConfigurazioneAttenzione! Controlla le normative del tuo paese sulla gestione dell'impianto elettrico di casa e fai molta attenzione perché può essere mortale! Se non sai come fare, chiama un elettricista. Il primo passo è installare il contatore nel tuo armadio elettrico. Per assicurarti di lavorare in un ambiente sicuro, disattiva l'alimentazione dal terminale elettrico a monte del sistema e ricontrolla con il multimetro che non vi sia tensione tra i terminali. Quindi posiziona il contatore di energia all'interno del tuo armadio e collega i fili sotto tensione e neutro dall'interruttore principale all'ingresso del contatore, ricordati di utilizzare la convenzione di colore (blu per neutro e marrone/nero/grigio per live in UE). L'uscita deve essere collegata al resto del sistema.
Collegamenti della tensione principale. I fili sopra sono input, i fili oltre sono output.
Passaggio 1: parti necessarie
Passaggio 2: esigenze software
Software
Avvia il tuo computer e apri il tuo IDE. Puoi usare l'IDE di Arduino o l'editor di creazione di Arduino. Il codice soddisfa le seguenti richieste: Comunicazione Modbus, gestione WiFi Protocollo MQTT Modbus è un protocollo open source per sensori e macchine industriali. Per far parlare Arduino Modbus, utilizzeremo la libreria Arduino Modbus. Questa libreria racchiude tutti i gestori e rende il collegamento di qualsiasi dispositivo Modbus davvero veloce. Poiché andremo a leggere i registri, seguendo la scheda tecnica del contatore, possiamo trovare tutte le informazioni di cui abbiamo bisogno come codici funzione, indirizzo del registro e dimensione del registro in parole. Ma per essere più chiari, spieghiamo come funziona Modbus: I messaggi Modbus seguono una struttura semplice: 01 03 04 00 16 00 02 25 C7 0x01 è l'indirizzo del dispositivo 0x03 è il codice funzione che dice al dispositivo se vogliamo leggere o scrivere dati *, in questo caso, leggi holding registers 0x04 per Byte Count00 16 - Inviamo 4 byte di indirizzo di registro (00 16) che dice al dispositivo cosa vogliamo leggere 00 02- poi la dimensione del registro (00 02) in parole (ogni parola è lunga 2 byte) Gli ultimi 4 byte sono codice CRC. Questo codice è generato da una funzione matematica sui byte precedenti, questo assicura che il messaggio sia stato ricevuto correttamente.
Integrazione con Home Assistant L'aggiunta del contatore a Home Assistant è piuttosto semplice. Supponendo che tu abbia un broker MQTT configurato (ecco la guida), tutto ciò che devi fare è aggiungere nuove definizioni nel file configuration.yaml. sensore: - piattaforma: mqtt nome: "Main Voltage" state_topic: "energy/main/voltage" unit_of_measurement: "V" Qui bisogna inserire il nome della misura, il topic MQTT da leggere e l'unità di misura della grandezza. Salva il file, controlla la configurazione e ricarica Home Assistant, ora le misure appariranno nella pagina principale.
Pannello dei consumi di Home Assistant che mostra le letture correnti
Home Assistant si occuperà di creare grafici e automatizzare i processi attivati dalle tue letture. Questo tutorial è terminato, ora tocca a te aggiungere funzionalità e personalizzarlo per i tuoi scopi!
Passaggio 3: assemblare
Fatto? È ora di avvitare la connessione RS485! Utilizzeremo un cavo a doppino intrecciato con la terra, tipicamente utilizzato per le linee telefoniche. Con questo cavo è possibile trasmettere a lunga distanza (1,2 km). Tuttavia, usiamo solo un cavo abbastanza lungo per uscire dall'armadio e posizionare Arduino in un luogo accessibile.
Ricerca connessione RS485
L'interfaccia RS485 nomina i suoi terminali A, B e COM. Uno standard di fatto comune è l'uso di TX+/RX+ o D+ in alternativa a B (alto per MARK, cioè inattivo), TX-/RX- o D- in alternativa per A (basso per MARK, cioè inattivo) Lo shield MKR supporta anche il Full Duplex, vedrai altri due terminali, Y e Z. Qui andremo ad avvitare l'altra estremità del cavo poiché sappiamo dal datasheet che la comunicazione half-duplex avviene solo sui terminali Y e Z. Il terminale COM deve essere collegato a ISOGND. Poiché utilizziamo una connessione half-duplex e poiché il cablaggio è peer-to-peer, dobbiamo impostare gli interruttori sullo shield MKR485 in modo che corrispondano alla nostra configurazione: impostiamo HALF (2 su off) e terminazione su YZ (3 su SU); il primo non importa. La terminazione è una resistenza che collega i due terminali dati, per smorzare i disturbi.
Questo è. Ora puoi chiudere il cabinet e concentrarti sul lato software!
Passaggio 4: codice
#includere
#include #include #include //le tue credenziali wifi const char ssid = "**********"; const char pass = "**********";
Rete client WiFi; client MQTTClient; tasso lungo senza segno = 60000; // frequenza di aggiornamento predefinita in ms unsigned long lastMillis = 0;
//connect function void connect() { Serial.print("controllo wifi…"); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); ritardo(1000); } Serial.print("\nconnessione…"); while (!client.connect("device_name", "user_name", "user_pw")) { //CAMBIA PER CORRISPONDERE ALLA TUA CONFIGURAZIONE Serial.print("."); ritardo(1000); } Serial.println("\nconnesso!"); client.subscribe("energia/principale/frequenza"); //topic per impostare la frequenza di aggiornamento in remoto } //mqtt riceve la funzione di callback void messageReceived(String &topic, String &payload) { Serial.println("incoming: " + topic + " - " + payload); if(topic == "energy/main/refreshrate"){ //refresh rate handler rate = payload.toInt()*1000; Serial.println("nuovo tasso "+String(tasso)); } }
void setup() { Serial.begin(115200); WiFi.begin(ssid, pass); mentre (!Seriale); client.begin("broker_ip", net); //CAMBIA PER CORRISPONDERE ALLA TUA CONFIGURAZIONE client.onMessage(messageReceived); // avvia il client Modbus RTU if (!ModbusRTUClient.begin(9600)) { Serial.println("Impossibile avviare il client Modbus RTU!"); mentre (1); } }
void loop() { client.loop(); if (!client.connected()) { //controlla la connessione di rete connect(); } // pubblica un messaggio dopo che è trascorso l'aggiornamento (routine non bloccante) if (millis() - lastMillis > rate) { lastMillis = millis(); //effettua tutte le chiamate di lettura float volt = readVoltage(); ritardo(100); float amp = readCurrent(); ritardo(100); doppio watt = readPower(); ritardo(100); float hz = readFreq(); ritardo(100); double wh = readEnergy(); //pubblica i risultati in argomenti correlati client.publish("energy/main/voltage", String(volt, 3)); client.publish("energia/principale/corrente", String(amp, 3)); client.publish("energia/principale/potenza", String(watt, 3)); client.publish("energia/principale/frequenza", String(hz, 3)); client.publish("energia/principale/energia", String(wh, 3)); Serial.print(Stringa(volt, 3)+"V "+Stringa(amp, 3)+"A "+Stringa(watt, 3)+"W "); Serial.println(Stringa(hz, 3)+"Hz "+Stringa(wh, 3)+"kWh"); ritardo(100); } }
/* Funzioni per leggere i registri del Finder Energy Meter * * Consultare il manuale del protocollo modbus per capire il codice * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf */ float readVoltage(){ float volt = 0.; if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x000C, 2)) { //effettua la chiamata al registro Serial.print("failed to read voltage! "); Serial.println(ModbusRTUClient.lastError()); //gestore errori }else{ uint16_t word1 = ModbusRTUClient.read(); //legge i dati dal buffer uint16_t word2 = ModbusRTUClient.read(); uint32_t millivolt = word1 << 16 | parola2; //bit matematico volt = millivolt/1000.0; } volt di ritorno; } float readCurrent(){ float ampere = 0.; if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x0016, 2)) { Serial.print("Impossibile leggere la corrente! "); Serial.println(ModbusRTUClient.lastError()); }else{ uint16_t word1 = ModbusRTUClient.read(); uint16_t word2 = ModbusRTUClient.read(); int32_t milliamp = word1 << 16 | parola2; ampere = milliampere/1000,0; } ritorno ampere; }
double readPower(){ double watt = 0.; if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x0025, 3)) { Serial.print("Impossibile leggere l'alimentazione! "); Serial.println(ModbusRTUClient.lastError()); }else{ uint16_t word1 = ModbusRTUClient.read(); uint16_t word2 = ModbusRTUClient.read(); uint16_t word3 = ModbusRTUClient.read(); uint64_t milliwatt; if(parola1 >> 7 == 0){ milliwatt = parola1
Consigliato:
Monitoraggio della temperatura della piscina MQTT: 7 passaggi (con immagini)
MQTT Swimming Pool Temperature Monitor: questo progetto è un compagno dei miei altri progetti di automazione domestica Smart Data-Logging Geyser Controller e Multi-purpose-Room-Lighting and Appliance Controller. È un monitor montato a lato della piscina che misura la temperatura dell'acqua della piscina, l'aria ambiente
Monitoraggio della temperatura e dell'umidità della stanza con ESP32 e AskSensors Cloud: 6 passaggi
Monitoraggio della temperatura e dell'umidità della stanza con ESP32 e AskSensors Cloud: In questo tutorial imparerai come monitorare la temperatura e l'umidità della tua stanza o scrivania utilizzando il DHT11 e l'ESP32 collegati al cloud. I nostri aggiornamenti dei tutorial possono essere trovati qui.DHT11 Specifiche: il sensore DHT11 è in grado di misurare la temperatura
Crea il tuo sistema di monitoraggio della sicurezza SMS GPS: 5 passaggi (con immagini)
Crea il tuo sistema di tracciamento di sicurezza SMS GPS: in questo progetto ti mostrerò come combinare un modulo SIM5320 3G con un Arduino e un trasduttore piezoelettrico come sensore di shock per creare un sistema di tracciamento di sicurezza che ti invierà la posizione del tuo prezioso veicolo via SMS quando
ESP8266 Nodemcu Monitoraggio della temperatura utilizzando DHT11 su un server Web locale - Ottieni la temperatura e l'umidità della stanza sul tuo browser: 6 passaggi
ESP8266 Nodemcu Monitoraggio della temperatura utilizzando DHT11 su un server Web locale | Ottieni la temperatura e l'umidità della stanza sul tuo browser: Ciao ragazzi, oggi faremo un'umidità e l'umidità; sistema di monitoraggio della temperatura utilizzando ESP 8266 NODEMCU & Sensore di temperatura DHT11. La temperatura e l'umidità saranno ottenute da DHT11 Sensor & può essere visto su un browser quale pagina web verrà gestita
Monitoraggio della temperatura e dell'umidità della stanza: 6 passaggi
Monitoraggio della temperatura e dell'umidità della stanza: il mio progetto, QTempair, misura la temperatura della stanza, l'umidità e la qualità dell'aria. Questo progetto legge i dati dai sensori, li invia al database e quei dati verranno visualizzati su un sito web. È possibile salvare una temperatura nelle impostazioni del