Indholdsfortegnelse:

Din energiregnskærm: 4 trin
Din energiregnskærm: 4 trin

Video: Din energiregnskærm: 4 trin

Video: Din energiregnskærm: 4 trin
Video: Zero-Net Energy House-designet pakket ind i forvitrende stål og skygget af store egetræer 2024, November
Anonim
Din energiregnskærm
Din energiregnskærm

OM DETTE PROJEKT

Hvis du virkelig vil gøre dit hjem smartere, vil du sandsynligvis starte med dine månedlige regninger (dvs. energi, gas osv.). Som nogle siger, Good for Planet, The Wallet og The Bottom Line. Open-source hardware er vores måde at nå bæredygtighed i hjemmemiljøet! Denne idé fik os til at bygge en enkel og sikker løsning, let at integrere med enhver hjemmeautomatiseringssoftware, da den afslører data over MQTT (i vores tilfælde viser vi dig, hvordan du integrerer den i Home Assistant).

Oversigt

For at måle det elektriske energiforbrug valgte vi at bruge Finder Energy Meter, da det er designet til brug på DIN -skinner og passer perfekt i hovedskabet i vores hus. Det fede ved dette produkt er, at det har en RS485 Modbus -grænseflade, en industriel standard kommunikationsprotokol, der gør det meget let at tale med en Arduino. Faktisk har Arduino frigivet et officielt skjold, MKR485 og to biblioteker for at afkode protokollen. Som hovedkort valgte vi Arduino MKR WiFi 1010, da den deler MKR -formfaktoren og har WiFi -forbindelse.

Opsætning Advarsel! Tjek dit lands forskrifter om håndtering af dit hus elektriske system og vær ekstremt forsigtig, fordi det kan være dødbringende! Ring til en elektriker, hvis du ikke ved det. Det første trin er at installere måleren i dit elskab. For at sikre, at du arbejder i et sikkert miljø, skal du slukke for strømmen fra den elektriske terminal foran dit system og dobbelttjekke med multimeteret, at der ikke er spænding mellem terminalerne. Placer derefter energimåleren inde i dit skab, og tilslut strømførende og neutrale ledninger fra hovedafbryderen til målerens indgang, husk at bruge farvekonventionen (blå for neutral og brun/sort/grå til live i EU). Outputtet skal tilsluttes resten af systemet.

Hovedspændingsforbindelser. Ledninger ovenfor er input, ledninger ud over er output.

Trin 1: Nødvendige dele

Nødvendige dele
Nødvendige dele

Trin 2: Software kræver

Software kræver
Software kræver

Software

Start din computer, og åbn din IDE. Du kan bruge Arduino IDE eller Arduino Create Editor. Koden opfylder følgende anmodninger: Modbus-kommunikation, WiFi-styring MQTT-protokol Modbus er og open-source-protokol til industrielle sensorer og maskiner. For at få Arduino til at tale Modbus, vil vi bruge Arduino Modbus -biblioteket. Dette bibliotek pakker alle håndterere og gør tilslutning til enhver Modbus -enhed virkelig hurtig. Da vi skal læse registre efter målerens datablad, kan vi finde alle de oplysninger, vi har brug for, f.eks. Funktionskoder, adresse på registret og registerets størrelse i ord. Men for at gøre det tydeligere, lad os forklare, hvordan Modbus fungerer: Modbus -meddelelser følger en enkel struktur: 01 03 04 00 16 00 02 25 C7 0x01 er enhedsadressen 0x03 funktionskoden, der fortæller enheden, om vi vil læse eller skrive data *, i dette tilfælde, læs holdingsregistre 0x04 for Byte Count00 16 - Vi sender 4 bytes registeradresse (00 16), der fortæller enheden, hvad vi vil læse 00 02- derefter størrelsen på registret (00 02) i ord (hvert ord er 2 byte langt) De sidste 4 bytes er CRC -kode. Denne kode genereres fra en matematikfunktion over tidligere bytes, dette sikrer, at meddelelsen er blevet modtaget korrekt.

Home Assistant Integration Tilføjelse af måleren til Home Assistant er ret ligetil. Forudsat at du har en MQTT -mægler konfigureret (Her er guiden), er alt du skal gøre at tilføje nye definitioner under filen config.yaml. sensor: - platform: mqtt navn: "Hovedspænding" state_topic: "energi/hoved/spænding" enhed_for_måling: "V" Her skal du sætte navnet på målingen, MQTT -emnet, der skal læses, og måleenheden for mængden. Gem filen, kontroller konfigurationen og genindlæs Home Assistant, nu vises målingerne på hovedsiden.

Home Assistant forbrugspanel, der viser aktuelle aflæsninger

Home Assistant sørger for at oprette grafer og automatisere processer, der udløses af dine aflæsninger. Denne vejledning er færdig, nu er det op til dig at tilføje funktioner og tilpasse den til dine egne formål!

Trin 3: Saml

Samle
Samle
Samle
Samle

Færdig? Det er på tide at skrue RS485 -forbindelsen i! Vi vil bruge snoet enkeltpar -kabel med jorden, der typisk bruges til telefonlinjer. Med dette kabel kan du sende over en lang afstand (1,2 km). Vi bruger dog bare et kabel længe nok til at forlade kabinettet og placere Arduino et tilgængeligt sted.

Finder RS485 -forbindelse

RS485 -grænsefladen navngiver dens terminaler A, B og COM. En almindelig de facto-standard er brugen af TX+/RX+ eller D+ som et alternativ til B (høj for MARK dvs. inaktiv), TX-/RX- eller D- som et alternativ til A (lavt for MARK dvs. inaktiv) Da MKR-skjold understøtter også Full Duplex, du ser to andre terminaler, Y og Z. Her skal vi skrue den anden ende af kablet, da vi ved fra databladet, at halvdupleks-kommunikation kun sker på Y- og Z-terminaler. COM -terminalen skal tilsluttes ISOGND. Da vi bruger en halv dupleksforbindelse, og da kablerne er peer-to-peer, er vi nødt til at opsætte kontakterne på MKR485-skjoldet, så det matcher vores opsætning: vi indstiller HALV (2 til fra) og afslutning på YZ (3 til PÅ); den første er ligegyldig. Afslutningen er en modstand, der forbinder de to dataterminaler, til dæmpning af forstyrrelser.

Dette er det. Nu kan du lukke kabinettet og fokusere på softwaresiden!

Trin 4: Kode

Kode
Kode

#omfatte

#include #include #include // dine wifi -legitimationsoplysninger const char ssid = "**********"; const char pass = "**********";

WiFiClient net; MQTTClient klient; usigneret lang hastighed = 60000; // standard opdateringshastighed i ms unsigned long lastMillis = 0;

// forbinde funktion void connect () {Serial.print ("tjekker wifi …"); mens (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); forsinkelse (1000); } Serial.print ("\ nforbinder …"); mens (! client.connect ("device_name", "user_name", "user_pw")) {// CHANGE TO MATCH YOUR SETUP Serial.print ("."); forsinkelse (1000); } Serial.println ("\ nforbundet!"); client.subscribe ("energi/main/opdater"); // emne for at indstille opdateringshastighed eksternt} // mqtt modtage tilbagekaldsfunktion void messageReceived (String & topic, String & payload) {Serial.println ("indkommende:" + emne + " -" + nyttelast); hvis (emne == "energi/main/opdater") {// opdateringshastighedsbehandlingsrate = nyttelast.tilInt ()*1000; Serial.println ("ny sats"+streng (sats)); }}

ugyldig opsætning () {Serial.begin (115200); WiFi. Begynd (ssid, pass); mens (! Seriel); client.begin ("broker_ip", net); // ÆNDRE FOR AT MATCHE DIN SETUP -klient. OnMessage (meddelelse modtaget); // start Modbus RTU -klienten, hvis (! ModbusRTUClient.begin (9600)) {Serial.println ("Kunne ikke starte Modbus RTU -klient!"); mens (1); }}

void loop () {client.loop (); hvis (! client.connected ()) {// tjek netværksforbindelse connect (); } // publicer en besked, efter opdateringen er gået (ikke -blokerende rutine) if (millis () - lastMillis> rate) {lastMillis = millis (); // få alle læseopkald til at flyde volt = readVoltage (); forsinkelse (100); float amp = readCurrent (); forsinkelse (100); dobbelt watt = readPower (); forsinkelse (100); float hz = readFreq (); forsinkelse (100); dobbelt wh = readEnergy (); // offentliggøre resultater under relaterede emner client.publish ("energy/main/voltage", String (volt, 3)); client.publish ("energi/main/current", String (amp, 3)); client.publish ("energi/main/power", streng (watt, 3)); client.publish ("energi/hoved/frekvens", streng (hz, 3)); client.publish ("energy/main/energy", String (wh, 3)); Serial.print (streng (volt, 3)+"V"+streng (amp, 3)+"A"+streng (watt, 3)+"W"); Serial.println (String (hz, 3)+"Hz"+String (wh, 3)+"kWh"); forsinkelse (100); }}

/ * Funktioner til at læse Finder Energy Meter -registre * * Kontroller modbus -protokolmanualen for at forstå koden * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf */float readVoltage () {float volt = 0.; hvis (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x000C, 2)) {// foretag opkaldet til registret Serial.print ("kunne ikke aflæse spænding!"); Serial.println (ModbusRTUClient.lastError ()); // error handler} else {uint16_t word1 = ModbusRTUClient.read (); // læse data fra bufferen uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | word2; // bit matematik volt = millivolt/1000.0; } returvolt; } float readCurrent () {float ampere = 0.; hvis (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("kunne ikke læse aktuel!"); Serial.println (ModbusRTUClient.lastError ()); } ellers {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | word2; ampere = milliamp/1000,0; } returnere ampere; }

dobbelt readPower () {dobbelt watt = 0.; hvis (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("kunne ikke læse strøm!"); Serial.println (ModbusRTUClient.lastError ()); } ellers {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwatt; hvis (word1 >> 7 == 0) {milliwatt = word1

Anbefalede: