Cuprins:
Video: Monitorul dvs. de factură energetică: 4 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:42
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
Pasul 2: necesități 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
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
#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:
Steam Punk UPS-ul dvs. pentru a obține ore de funcționare pentru routerul dvs. Wi-Fi: 4 pași (cu imagini)
Steam Punk UPS-ul dvs. pentru a obține ore de funcționare pentru routerul dvs. Wi-fi: există ceva fundamental dezagreabil în ceea ce privește ca UPS-ul dvs. să-și convertească puterea bateriei de 12V DC în 220V AC, astfel încât transformatoarele care rulează routerul și fibra ONT să-l poată converti din nou în 12V DC! De asemenea, vă confruntați cu [de obicei
ITea - Monitorul dvs. personal de ceai: 8 pași
ITea | Monitorul dvs. personal de ceai: Bună ziua, colegi cititori, și bine ați venit la proiectul iTea! Înainte de a începe acest proiect, m-am gândit la ceva ce aș putea îmbunătăți în viața mea folosind robotica obișnuită și componentele electronice pe care le am în casa mea. Cu câteva săptămâni înainte de a scrie acest articol
Controlați aspectul modelului dvs. de tren cu televizorul dvs. REMOTE !: 7 pași (cu imagini)
Controlați-vă aspectul modelului trenului cu televizorul dvs. REMOTE !: În acest instructiv, vă voi arăta cum să realizați un sistem de telecomandă IR pentru un model tren. Veți putea apoi să vă controlați trenurile în timp ce vă relaxați pe canapea. Deci sa începem
Faceți monitorul dvs. invizibil (aproape aproape): 4 pași
Faceți monitorul dvs. invizibil (aproape Aproape): creați un fundal de desktop pentru a vă amuza și confunda prietenii și colegii de muncă folosind doar o cameră digitală și un pic de lăutări
Cum să ascultați biblioteca dvs. iTunes prin televizorul sau receptorul dvs. Av: 5 pași
Cum să ascultați biblioteca dvs. iTunes prin intermediul televizorului sau al receptorului dvs. Av: Bine, am făcut acest lucru instructabil în 10 minute. A fost atât de ușor! Un laptop ar fi bun pentru asta, dar și un desktop lângă televizor este în regulă. Dacă aveți un Airport Express, atunci voi adăuga un pas pentru voi. (Notă: Nu dețin un aeroport expres, așa că dacă