Indholdsfortegnelse:
Video: Din energiregnskærm: 4 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:26
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
Trin 2: 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
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
#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:
Steam Punk din UPS for at få timers oppetid til din Wi-Fi-router: 4 trin (med billeder)
Steam Punk din UPS for at få timers oppetid til din Wi-Fi-router: Der er noget fundamentalt ubehageligt ved at få din UPS til at konvertere sin 12V DC-batteristrøm til 220V vekselstrøm, så transformerne, der kører din router og fiber ONT, kan konvertere den tilbage til 12V DC! Du er også oppe imod [typisk
Sådan får du din musik tilbage fra din iPod .. GRATIS !: 7 trin
Sådan får du din musik tilbage fra din iPod .. GRATIS !: Grundlæggende lader Ipods dig ikke genimportere musikken fra den, de lader dig kun slette den. For eksempel, hvis du vil placere dine yndlingssange på din Ipod, men så ved et uheld slette dem alle fra din computer. Så du sad der i en dårlig moo
Sådan laver du din egen WIFI -gateway til at forbinde din Arduino til IP -netværk?: 11 trin (med billeder)
Sådan laver du din egen WIFI -gateway til at forbinde din Arduino til IP -netværk?: Som så mange mennesker synes du, at Arduino er en meget god løsning til hjemmeautomatisering og robotik! Men når det kommer til kommunikation, kommer Arduinos bare med serielle links. Jeg arbejder på en robot, der skal være permanent forbundet med en server, der kører ar
Sådan ændres din harddisk på din Asus Notebook PC: 4 trin
Sådan ændres din harddisk på din Asus Notebook PC: Har du nogensinde fået din harddisk til at stoppe med at fungere eller være løbet tør for plads på din harddisk? Jeg har en løsning til dig. Jeg vil vise dig, hvordan du ændrer din harddisk på din Asus Notebook PC
Måling af din puls er på spidsen af din finger: Fotoplethysmografi tilgang til bestemmelse af puls: 7 trin
Måling af din puls er på spidsen af din finger: Fotoplethysmografi Fremgangsmåde til bestemmelse af puls: En fotoplethysmograf (PPG) er en enkel og billig optisk teknik, der ofte bruges til at detektere ændringer i blodvolumen i et mikrovaskulært vævsbed. Det bruges mest ikke-invasivt til at foretage målinger på overfladen af huden, typisk