Cuprins:

Monitorul dvs. de factură energetică: 4 pași
Monitorul dvs. de factură energetică: 4 pași

Video: Monitorul dvs. de factură energetică: 4 pași

Video: Monitorul dvs. de factură energetică: 4 pași
Video: Беслан. Помни / Beslan. Remember (english & español subs) 2024, Iulie
Anonim
Monitorul dvs. de factură energetică
Monitorul dvs. de factură energetică

DESPRE ACEST PROIECT

Dacă doriți cu adevărat să vă faceți casa mai inteligentă, probabil că veți dori să începeți de la facturile lunare (adică energie, gaze etc.). După cum spun unii, Bine pentru Planet, The Wallet și The Bottom Line. Hardware-ul open-source este modul nostru de a atinge sustenabilitatea în mediul acasă! Această idee ne-a adus să construim o soluție simplă și sigură, ușor de integrat cu orice software de automatizare a casei, deoarece expune date prin MQTT (în cazul nostru vă vom arăta cum să le integrați în Home Assistant).

Prezentare generală

Pentru a măsura consumul de energie electrică, am ales să folosim contorul de energie Finder, deoarece este proiectat pentru utilizarea șinei DIN și se potrivește perfect în dulapul principal al casei noastre. Interesantul acestui produs este că are o interfață RS485 Modbus, un protocol de comunicație standard industrial care face ca vorbirea cu un Arduino să fie cu adevărat ușoară. De fapt, Arduino a lansat un scut oficial, MKR485 și două biblioteci pentru a decoda protocolul. Ca placă de bază, am ales Arduino MKR WiFi 1010, deoarece împarte factorul de formă MKR și are conectivitate WiFi.

SetupWarning! Verificați reglementările din țară cu privire la tratarea sistemului electric din casă și fiți extrem de atenți, deoarece poate fi mortal! Dacă nu știți cum, sunați la un electrician. Primul pas este instalarea contorului în dulapul dvs. electric. Pentru a vă asigura că lucrați într-un mediu sigur, opriți alimentarea de la terminalul electric din fața sistemului și verificați cu multimetrul dacă nu există tensiune între terminale. Apoi, puneți contorul de energie în interiorul dulapului dvs. și conectați firele active și neutre de la întrerupătorul principal la intrarea contorului, nu uitați să utilizați convenția culorilor (albastru pentru neutru și maro / negru / gri pentru live în UE). Ieșirea trebuie conectată la restul sistemului.

Conexiuni principale de tensiune. Firele de mai sus sunt de intrare, firele de dincolo sunt ieșiri.

Pasul 1: Piese necesare

Piese necesare
Piese necesare

Pasul 2: necesități de software

Nevoile de software
Nevoile de software

Software

Porniți computerul și deschideți IDE-ul. Puteți utiliza Arduino IDE sau Arduino Create Editor. Codul îndeplinește următoarele solicitări: comunicare Modbus, management WiFi Protocol MQTT Modbus este și protocol open-source pentru senzori și mașini industriale. Pentru a face Arduino să vorbească despre Modbus, vom folosi biblioteca Arduino Modbus. Această bibliotecă împachetează toate dispozitivele de gestionare și face ca conectarea oricărui dispozitiv Modbus să fie foarte rapidă. Deoarece vom citi registre, urmând fișa tehnică a contorului, putem găsi toate informațiile de care avem nevoie, cum ar fi codurile de funcții, adresa registrului și dimensiunea registrului în cuvinte. Dar, pentru a fi mai clar, să ne explicăm modul în care funcționează Modbus: mesajele Modbus urmează o structură simplă: 01 03 04 00 16 00 02 25 C7 0x01 este adresa dispozitivului 0x03 este codul funcțional care spune dispozitivului dacă dorim să citim sau să scriem date *, în acest caz, citiți registrele de păstrare 0x04 pentru numărul de octeți00 16 - Trimitem 4 octeți de adresă de înregistrare (00 16) care spune dispozitivului ce vrem să citim 00 02- apoi dimensiunea registrului (00 02) în cuvinte (fiecare cuvânt are o lungime de 2 octeți) Ultimii 4 octeți sunt cod CRC. Acest cod este generat dintr-o funcție matematică peste octeții anteriori, ceea ce asigură că mesajul a fost primit corect.

Integrarea Home Assistant Adăugarea contorului la Home Assistant este destul de simplă. Presupunând că aveți configurat un broker MQTT (Iată ghidul), tot ce trebuie să faceți este să adăugați noi definiții în fișierul configuration.yaml. sensor: - platform: mqtt name: "Main Voltage" state_topic: "energy / main / voltage" unit_of_measurement: "V" Aici trebuie să puneți numele măsurătorii, subiectul MQTT de citit și unitatea de măsură a cantității. Salvați fișierul, verificați configurația și reîncărcați Home Assistant, acum măsurătorile vor apărea pe pagina principală.

Panoul de consum Home Assistant care arată citirile curente

Home Assistant se va ocupa de crearea graficelor și va automatiza procesele declanșate de citirile dvs. Acest tutorial s-a încheiat, acum depinde de dvs. să adăugați funcții și să îl personalizați în scopuri proprii!

Pasul 3: Asamblați

Asambla
Asambla
Asambla
Asambla

Terminat? Este timpul să înșurubați conexiunea RS485! Vom folosi un cablu răsucit cu o singură pereche cu solul, de obicei folosit pentru liniile telefonice. Cu acest cablu, puteți transmite pe o distanță lungă (1,2 km). Cu toate acestea, folosim doar un cablu suficient de lung pentru a ieși din dulap și a plasa Arduino într-un loc accesibil.

Conexiune RS485 Finder

Interfața RS485 își numește terminalele A, B și COM. Un standard comun de facto este utilizarea TX + / RX + sau D + ca alternativă pentru B (ridicat pentru MARK adică inactiv), TX- / RX- sau D- ca alternativă pentru A (scăzut pentru MARK adică inactiv) Deoarece Scutul MKR acceptă și Full Duplex, veți vedea alte două terminale, Y și Z. Aici vom înșuruba celălalt capăt al cablului, deoarece știm din foaia tehnică că comunicarea semi-duplex se întâmplă numai pe terminalele Y și Z. Terminalul COM trebuie conectat la ISOGND. Deoarece folosim o conexiune semi-duplex și deoarece cablarea este peer-to-peer, trebuie să configurăm comutatoarele de pe ecranul MKR485 pentru a se potrivi cu configurarea noastră: setăm HALF (2 la off) și terminarea pe YZ (3 la PE); primul nu contează. Terminarea este o rezistență care conectează cele două terminale de date, pentru a atenua interferențele.

Asta este. Acum puteți închide dulapul și vă puteți concentra pe partea software!

Pasul 4: Cod

Cod
Cod

#include

#include #include #include // acreditările dvs. wifi const char ssid = "**********"; const char pass = "**********";

WiFiClient net; Client MQTTClient; rata lungă nesemnată = 60000; // rata de reîmprospătare implicită în ms unsigned long lastMillis = 0;

// funcția de conectare anulară conectarea () {Serial.print ("verificarea wifi …"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); întârziere (1000); } Serial.print ("\ nconectarea …"); while (! client.connect ("nume_dispozitiv", "nume_utilizator", "utilizator_pw")) {// SCHIMBAȚI-VĂ PENTRU CONFIGURAREA CONFIGURĂRII dvs. Serial.print ("."); întârziere (1000); } Serial.println ("\ nconectat!"); client.subscribe („energie / principal / reîmprospătare”); // topic pentru a seta rata de reîmprospătare de la distanță} // mqtt primi funcția de apel invers mesaj nul Primit (Șir și subiect, Șir și sarcină utilă) {Serial.println ("incoming:" + topic + "-" + sarcină utilă); if (topic == "energy / main / refreshrate") {// refresh rate handler rate = payload.toInt () * 1000; Serial.println ("rata nouă" + Șir (rata)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); while (! Serial); client.begin ("broker_ip", net); // SCHIMBAȚI-VĂ PENTRU CONFIGURAREA CONFIGURĂRII dvs. client.onMessage (messageReceived); // porniți clientul Modbus RTU dacă (! ModbusRTUClient.begin (9600)) {Serial.println ("Nu a putut porni clientul Modbus RTU!"); în timp ce (1); }}

void loop () {client.loop (); if (! client.connected ()) {// verificați conexiunea la rețea connect (); } // publicați un mesaj după reîmprospătarea trecută (rutină non-blocantă) if (milis () - lastMillis> rate) {lastMillis = millis (); // efectuați toate apelurile citite float volt = readVoltage (); întârziere (100); float amp = readCurrent (); întârziere (100); watt dublu = readPower (); întârziere (100); float hz = readFreq (); întârziere (100); wh dublu = readEnergy (); // publică rezultate sub teme conexe client.publish ("energie / principal / tensiune", șir (volt, 3)); client.publish ("energie / principal / curent", șir (amplificator, 3)); client.publish ("energie / principal / putere", șir (watt, 3)); client.publish ("energie / principal / frecvență", șir (hz, 3)); client.publish ("energie / principal / energie", Șir (wh, 3)); Serial.print (String (volt, 3) + "V" + String (amp, 3) + "A" + String (watt, 3) + "W"); Serial.println (String (hz, 3) + "Hz" + String (wh, 3) + "kWh"); întârziere (100); }}

/ * Funcții pentru citirea registrelor Finder Energy Meter * * Verificați manualul protocolului modbus pentru a înțelege codul * 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)) {// efectuați apelul către registrul Serial.print („nu s-a citit tensiunea!”); Serial.println (ModbusRTUClient.lastError ()); // handler} else {uint16_t word1 = ModbusRTUClient.read (); // citire date din buffer uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | cuvânt2; // bit math volt = milivolt / 1000.0; } retur volt; } float readCurrent () {float ampere = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("nu s-a citit curentul!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | cuvânt2; ampere = miliamp / 1000,0; } returnare amperi; }

readPower dublu () {watt dublu = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("nu s-a citit puterea!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwatt; if (word1 >> 7 == 0) {milliwatt = word1

Recomandat: