Innholdsfortegnelse:

Monitor for energiregning: 4 trinn
Monitor for energiregning: 4 trinn

Video: Monitor for energiregning: 4 trinn

Video: Monitor for energiregning: 4 trinn
Video: How To Connect The 9 Dots With 4 Straight Lines Puzzle #shorts 2024, Juli
Anonim
Energiregnskapsmonitoren din
Energiregnskapsmonitoren din

OM DETTE PROJEKTET

Hvis du virkelig vil gjøre hjemmet ditt smartere, vil du sannsynligvis starte med månedlige regninger (dvs. energi, gass, osv.). Som noen sier, Good for Planet, The Wallet og The Bottom Line. Åpen kildevare-maskinvare er vår måte å nå bærekraft i hjemmemiljøet! Denne ideen brakte oss til å bygge en enkel og sikker løsning, enkel å integrere med hvilken som helst hjemmeautomatiseringsprogramvare siden den avslører data over MQTT (i vårt tilfelle viser vi deg hvordan du integrerer den i Home Assistant).

Oversikt

For å måle det elektriske energiforbruket valgte vi å bruke Finder Energy Meter, siden det er designet for bruk på DIN -skinner og passer perfekt i hovedskapet i huset vårt. Det kule med dette produktet er at det har et RS485 Modbus -grensesnitt, en industriell standard kommunikasjonsprotokoll som gjør det veldig enkelt å snakke med en Arduino. Faktisk har Arduino gitt ut et offisielt skjold, MKR485 og to biblioteker for å dekode protokollen. Som hovedkort valgte vi Arduino MKR WiFi 1010, siden den deler MKR -formfaktoren og har WiFi -tilkobling.

Oppsett Advarsel! Sjekk landets forskrifter om håndtering av husets elektriske system og vær ekstremt forsiktig fordi det kan være dødelig! Ring en elektriker hvis du ikke vet det. Det første trinnet er å installere måleren i ditt elektriske skap. For å sikre at du jobber i et trygt miljø, må du slå av strømmen fra den elektriske terminalen foran systemet og dobbeltsjekke med multimeteret at det ikke er spenning mellom terminalene. Plasser deretter energimåleren inne i skapet og koble strømførende og nøytrale ledninger fra hovedbryteren til inngangen til måleren, husk å bruke fargekonvensjonen (blå for nøytral og brun/svart/grå for live i EU). Utgangen må kobles til resten av systemet.

Hovedspenningstilkoblinger. Ledninger ovenfor er inngang, ledninger utover er utganger.

Trinn 1: Nødvendige deler

Nødvendige deler
Nødvendige deler

Trinn 2: Programvare trenger

Programvare trenger
Programvare trenger

Programvare

Start datamaskinen og åpne IDE. Du kan bruke Arduino IDE eller Arduino Create Editor. Koden oppfyller følgende forespørsler: Modbus-kommunikasjon, WiFi-styring MQTT-protokoll Modbus er og åpen kildekode-protokoll for industrielle sensorer og maskiner. For å få Arduino til å snakke Modbus, skal vi bruke Arduino Modbus -biblioteket. Dette biblioteket pakker alle behandlerne og gjør det raskt å koble til en hvilken som helst Modbus -enhet. Siden vi skal lese registre, etter målerens datablad, kan vi finne all informasjonen vi trenger, som funksjonskoder, adresse til registeret og størrelsen på registret i ord. Men for å gjøre det tydeligere, la oss forklare hvordan Modbus fungerer: Modbus -meldinger følger en enkel struktur: 01 03 04 00 16 00 02 25 C7 0x01 er enhetsadressen 0x03 funksjonskoden som forteller enheten om vi vil lese eller skrive data *, i dette tilfellet, les holdingregister 0x04 for Byte Count00 16 - Vi sender 4 byte registeradresse (00 16) som forteller enheten hva vi vil lese 00 02- deretter størrelsen på registeret (00 02) i ord (hvert ord er 2 byte langt) De siste 4 byte er CRC -kode. Denne koden genereres fra en matematisk funksjon over tidligere byte, dette sikrer at meldingen er mottatt riktig.

Hjemmeassistentintegrering Det er ganske enkelt å legge til måleren til hjemmeassistenten. Forutsatt at du har en MQTT -megler konfigurert (Her er veiledningen), er alt du trenger å gjøre å legge til nye definisjoner under filen config.yaml. sensor: - plattform: mqtt navn: "Hovedspenning" state_topic: "energi/hoved/spenning" enhet_for_måling: "V" Her må du sette navnet på målingen, MQTT -emnet som skal leses og måleenheten for mengden. Lagre filen, sjekk konfigurasjonen og last inn Home Assistant på nytt, nå vil målingene vises på hovedsiden.

Home Assistant forbrukspanel som viser nåværende avlesninger

Home Assistant tar seg av å lage grafer og automatisere prosesser utløst av lesningene dine. Denne opplæringen er ferdig, nå er det opp til deg å legge til funksjoner og tilpasse den til dine egne formål!

Trinn 3: Monter

Montere
Montere
Montere
Montere

Ferdig? Det er på tide å skru inn RS485 -tilkoblingen! Vi bruker vridd enkeltpar -kabel med bakken, vanligvis brukt til telefonlinjer. Med denne kabelen kan du sende over en lang avstand (1,2 km). Imidlertid bruker vi bare en kabel lenge nok til å gå ut av skapet og plassere Arduino på et tilgjengelig sted.

Finder RS485 -tilkobling

RS485 -grensesnittet navngir terminalene A, B og COM. En vanlig de facto-standard er bruk av TX+/RX+ eller D+ som et alternativ for B (høyt for MARK dvs. inaktiv), TX-/RX- eller D- som et alternativ for A (lavt for MARK dvs. inaktiv) Siden MKR-skjold støtter også Full Duplex, du ser to andre terminaler, Y og Z. Her skal vi skru den andre enden av kabelen siden vi vet fra databladet at halvdupleks-kommunikasjon bare skjer på Y- og Z-terminaler. COM -terminalen må kobles til ISOGND. Siden vi bruker en halv dupleks-tilkobling og siden kablingen er node-til-node, må vi sette opp bryterne på MKR485-skjermen for å matche vårt oppsett: vi setter HALV (2 til av) og avslutning på YZ (3 til PÅ); den første spiller ingen rolle. Avslutningen er en motstand som forbinder de to dataterminalene for å dempe forstyrrelser.

Det var det. Nå kan du lukke skapet og fokusere på programvaresiden!

Trinn 4: Kode

Kode
Kode

#inkludere

#include #include #include // din wifi -legitimasjon const char ssid = "**********"; const char pass = "**********";

WiFiClient nett; MQTTClient klient; usignert lang hastighet = 60000; // standard oppdateringsfrekvens i ms unsigned long lastMillis = 0;

// koble til funksjon void connect () {Serial.print ("sjekker wifi …"); mens (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); forsinkelse (1000); } Serial.print ("\ nkoble til …"); while (! client.connect ("device_name", "user_name", "user_pw")) {// CHANGE TO MATCH YOUR SETUP Serial.print ("."); forsinkelse (1000); } Serial.println ("\ nkoblet!"); client.subscribe ("energi/main/oppdater"); // emne for å angi oppdateringshastighet eksternt} // mqtt motta tilbakeringingsfunksjon void messageReceived (String & topic, String & payload) {Serial.println ("incoming:" + topic + " -" + payload); if (topic == "energy/main/refresh") {// refresh rate handler rate = nyttelast.tilInt ()*1000; Serial.println ("ny rate"+streng (rate)); }}

ugyldig oppsett () {Serial.begin (115200); WiFi. Begynner (ssid, pass); mens (! Seriell); client.begin ("broker_ip", netto); // ENDRE FOR Å MATCHE DIN OPPSETT klient. OnMessage (melding mottatt); // 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 ()) {// sjekk nettverkstilkoblingen connect (); } // publiser en melding etter at oppdateringen har gått (ikke -blokkerende rutine) if (millis () - lastMillis> rate) {lastMillis = millis (); // få alle leseanropene til å flyte volt = readVoltage (); forsinkelse (100); float amp = readCurrent (); forsinkelse (100); dobbel watt = readPower (); forsinkelse (100); float hz = readFreq (); forsinkelse (100); dobbel wh = readEnergy (); // publisere resultater under relaterte emner client.publish ("energy/main/voltage", String (volt, 3)); client.publish ("energy/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); }}

/ * Funksjoner for å lese Finder Energy Meter -registre * * Sjekk manualen for modbus -protokollen for å forstå koden * 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)) {// ring til registeret Serial.print ("kunne ikke lese spenning!"); Serial.println (ModbusRTUClient.lastError ()); // error handler} else {uint16_t word1 = ModbusRTUClient.read (); // lese data fra bufferen uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | word2; // bit matematisk volt = millivolt/1000.0; } returvolum; } float readCurrent () {float ampere = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("kunne ikke lese gjeldende!"); Serial.println (ModbusRTUClient.lastError ()); } annet {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | word2; ampere = milliamp/1000,0; } returnere ampere; }

double readPower () {double watt = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("mislyktes i å lese strøm!"); Serial.println (ModbusRTUClient.lastError ()); } annet {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwatt; hvis (word1 >> 7 == 0) {milliwatt = word1

Anbefalt: