Innehållsförteckning:
Video: Din energiräkningsövervakare: 4 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:40
OM DETTA PROJEKT
Om du verkligen vill göra ditt hem smartare vill du förmodligen utgå från dina månadsräkningar (dvs. energi, gas, etc …). Som vissa säger, Good for Planet, The Wallet och The Bottom Line. Hårdvara med öppen källkod är vårt sätt att nå hållbarhet i hemmiljön! Denna idé fick oss att bygga en enkel och säker lösning, enkel att integrera med valfri hemautomatiseringsprogramvara eftersom den exponerar data över MQTT (i vårt fall visar vi dig hur du integrerar den i Home Assistant).
Översikt
För att mäta den elektriska energiförbrukningen valde vi att använda Finder Energy Meter, eftersom den är konstruerad för användning på DIN -skena och passar perfekt i huvudskåpet i vårt hus. Det fina med den här produkten är att den har ett RS485 Modbus -gränssnitt, ett industriellt standardkommunikationsprotokoll som gör det väldigt enkelt att prata med en Arduino. Faktum är att Arduino har släppt en officiell sköld, MKR485 och två bibliotek för att avkoda protokollet. Som moderkort valde vi Arduino MKR WiFi 1010, eftersom den delar MKR -formfaktorn och har WiFi -anslutning.
SetupVarning! Kontrollera dina lands föreskrifter om hur du hanterar ditt hus elektriska system och var extremt försiktig eftersom det kan vara dödligt! Om du inte vet, ring en elektriker. Det första steget är att installera mätaren i ditt elskåp. För att säkerställa att du arbetar i en säker miljö, stäng av strömmen från den elektriska terminalen framför ditt system och dubbelkontrollera med multimetern att det inte finns någon spänning mellan terminalerna. Placera sedan energimätaren inuti ditt skåp och anslut strömförande och neutrala ledningar från huvudbrytaren till mätarens ingång, kom ihåg att använda färgkonventionen (blå för neutral och brun/svart/grå för live i EU). Utgången måste anslutas till resten av systemet.
Huvudspänningsanslutningar. Ledningar ovan är ingångar, ledningar bortom är utgångar.
Steg 1: Delar som behövs
Steg 2: Programvarubehov
programvara
Starta din dator och öppna din IDE. Du kan använda Arduino IDE eller Arduino Create Editor. Koden uppfyller följande förfrågningar: Modbus-kommunikation, WiFi-hantering MQTT-protokoll Modbus är och open-source-protokoll för industriella sensorer och maskiner. För att få Arduino att prata Modbus kommer vi att använda Arduino Modbus -biblioteket. Det här biblioteket paketerar alla hanterare och gör att alla Modbus -enheter kan anslutas riktigt snabbt. Eftersom vi ska läsa register, efter mätarens datablad, kan vi hitta all information vi behöver, till exempel funktionskoder, adress till registret och registrets storlek i ord. Men för att göra det tydligare, låt oss förklara hur Modbus fungerar: Modbus -meddelanden följer en enkel struktur: 01 03 04 00 16 00 02 25 C7 0x01 är enhetsadressen 0x03 funktionskoden som talar om för enheten om vi vill läsa eller skriva data *, i detta fall, läs innehavsregister 0x04 för Byte Count00 16 - Vi skickar 4 byte registeradress (00 16) som berättar för enheten vad vi vill läsa 00 02- sedan storleken på registret (00 02) i ord (varje ord är 2 byte långt) De sista 4 bytesna är CRC -kod. Denna kod genereras från en matematisk funktion över tidigare byte, detta säkerställer att meddelandet har tagits emot korrekt.
Home Assistant Integration Att lägga till mätaren till Home Assistant är ganska enkelt. Förutsatt att du har en MQTT -mäklare konfigurerad (Här är guiden) är allt du behöver göra att lägga till nya definitioner under filen config.yaml. sensor: - plattform: mqtt namn: "Huvudspänning" state_topic: "energi/huvud/spänning" enhet_mätning: "V" Här måste du ange namnet på mätningen, MQTT -ämnet som ska läsas och måttenheten för kvantiteten. Spara filen, kontrollera konfigurationen och ladda hem Home Assistant, nu visas mätningarna på huvudsidan.
Home Assistant konsumtionspanel som visar aktuella avläsningar
Home Assistant tar hand om att skapa grafer och automatisera processer som utlöses av dina avläsningar. Denna handledning är klar, nu är det upp till dig att lägga till funktioner och anpassa den för dina egna ändamål!
Steg 3: Montera
Gjort? Det är dags att skruva in RS485 -anslutningen! Vi kommer att använda tvinnad enkelparskabel med jord, vanligtvis används för telefonlinjer. Med denna kabel kan du sända över en lång sträcka (1,2 km). Vi använder dock bara en kabel tillräckligt länge för att lämna skåpet och placera Arduino på en tillgänglig plats.
Finder RS485 -anslutning
RS485 -gränssnittet heter dess terminaler A, B och COM. En vanlig de facto-standard är användningen av TX+/RX+ eller D+ som ett alternativ för B (högt för MARK dvs inaktiv), TX-/RX- eller D- som ett alternativ för A (lågt för MARK dvs tomgång) Eftersom MKR-skärm stöder också Full Duplex, du ser två andra terminaler, Y och Z. Här ska vi skruva den andra änden av kabeln eftersom vi vet från databladet att halvduplexkommunikation bara sker på Y- och Z-terminaler. COM -terminalen måste anslutas till ISOGND. Eftersom vi använder en halv duplex-anslutning och eftersom kablarna är peer-to-peer måste vi ställa in omkopplarna på MKR485-skärmen för att matcha vår inställning: vi ställer in HALF (2 till av) och avslutning på YZ (3 till PÅ); den första spelar ingen roll. Avslutningen är ett motstånd som förbinder de två dataterminalerna för att dämpa störningar.
Detta är det. Nu kan du stänga skåpet och fokusera på mjukvarusidan!
Steg 4: Kod
#omfatta
#include #include #include // dina wifi -referenser const char ssid = "**********"; const char pass = "**********";
WiFiClient -nät; MQTTClient -klient; osignerad lång hastighet = 60000; // standard uppdateringshastighet i ms unsigned long lastMillis = 0;
// anslut funktionen void connect () {Serial.print ("kontrollerar wifi …"); medan (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); fördröjning (1000); } Serial.print ("\ nansluter …"); while (! client.connect ("device_name", "user_name", "user_pw")) {// CHANGE TO MATCH YOUR SETUP Serial.print ("."); fördröjning (1000); } Serial.println ("\ nansluten!"); klient.prenumerera ("energi/huvud/uppdatera"); // ämne för att ställa in uppdateringsfrekvens på distans} // mqtt ta emot återuppringningsfunktion void messageReceived (String & topic, String & payload) {Serial.println ("inkommande:" + ämne + " -" + nyttolast); if (topic == "energy/main/refreshhrate") {// refresh rate handler rate = payload.toInt ()*1000; Serial.println ("ny hastighet"+sträng (hastighet)); }}
void setup () {Serial.begin (115200); WiFi. Börjar (ssid, pass); medan (! Seriell); client.begin ("broker_ip", netto); // ÄNDRA ATT MATCHA DIN SETUP -klient. OnMessage (meddelande mottaget); // starta Modbus RTU -klienten om (! ModbusRTUClient.begin (9600)) {Serial.println ("Det gick inte att starta Modbus RTU -klienten!"); medan (1); }}
void loop () {client.loop (); if (! client.connected ()) {// kontrollera nätverksanslutning connect (); } // publicera ett meddelande när uppdateringen har gått (rutin som inte blockerar) if (millis () - lastMillis> rate) {lastMillis = millis (); // få alla läsanrop att flyta volt = readVoltage (); fördröjning (100); float amp = readCurrent (); fördröjning (100); dubbel watt = readPower (); fördröjning (100); float hz = readFreq (); fördröjning (100); dubbel wh = readEnergy (); // publicera resultat under relaterade ämnen client.publish ("energy/main/voltage", String (volt, 3)); client.publish ("energy/main/current", String (amp, 3)); client.publish ("energy/main/power", String (watt, 3)); client.publish ("energi/huvud/frekvens", sträng (hz, 3)); client.publish ("energy/main/energy", String (wh, 3)); Serial.print (Sträng (volt, 3)+"V"+Sträng (amp, 3)+"A"+Sträng (watt, 3)+"W"); Serial.println (String (hz, 3)+"Hz"+String (wh, 3)+"kWh"); fördröjning (100); }}
/ * Funktioner för att läsa Finder Energy Meter -register * * Kontrollera manualen för modbus -protokollet för att förstå 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 upp till registret Serial.print ("kunde inte läsa spänning!"); Serial.println (ModbusRTUClient.lastError ()); // felhanterare} annat {uint16_t word1 = ModbusRTUClient.read (); // läs data från bufferten uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | word2; // bit matematisk volt = millivolt/1000,0; } returvolym; } float readCurrent () {float ampere = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("kunde inte läsa aktuell!"); Serial.println (ModbusRTUClient.lastError ()); } annat {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | word2; ampere = milliamp/1000,0; } återvända ampere; }
dubbel readPower () {dubbel watt = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("kunde inte läsa ström!"); Serial.println (ModbusRTUClient.lastError ()); } annat {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwatt; if (word1 >> 7 == 0) {milliwatt = word1
Rekommenderad:
Steam Punk din UPS för att få timmars drifttid för din Wi-Fi-router: 4 steg (med bilder)
Steam Punk din UPS för att få timmars drifttid för din Wi-Fi-router: Det är något i grunden obehagligt med att din UPS omvandlar sitt 12V DC-batteri till 220V AC-ström så att transformatorerna som kör din router och fiber ONT kan konvertera den till 12V DC! Du är också emot [vanligtvis
Hur får du tillbaka din musik från din iPod .. GRATIS !: 7 steg
Hur får du tillbaka din musik från din iPod .. GRATIS !: I grund och botten låter Ipods dig inte importera musiken från den, de låter dig bara radera den. Till exempel, om du vill placera dina favoritlåtar på din iPod, men radera dem av misstag av din dator av misstag. Så du satt där i en dålig moo
Hur man gör din egen WIFI -gateway för att ansluta din Arduino till IP -nätverk?: 11 steg (med bilder)
Hur man gör din egen WIFI -gateway för att ansluta din Arduino till IP -nätverk?: Som så många tror du att Arduino är en mycket bra lösning för att göra hemautomation och robotik! Men när det gäller kommunikation kommer Arduinos bara med seriella länkar. Jag arbetar med en robot som måste vara permanent ansluten till en server som körs
Styr din modell tåglayout med din mobiltelefon !: 11 steg (med bilder)
Kontrollera din modelltåglayout med din mobiltelefon !: Att styra en modelltåglayout med en trådbunden gasreglage och valdeltagare kan vara en bra start för nybörjare, men de utgör ett problem med icke-bärbarhet. Dessutom kan de trådlösa kontrollerna som kommer på marknaden antingen bara styra några lok
Styr din modell tåglayout med din TV REMOTE !: 7 steg (med bilder)
Kontrollera din modelltåglayout med din TV REMOTE !: I den här instruktören kommer jag att visa dig hur du gör ett IR -fjärrkontrollsystem för ett modelltåg. Du kommer då att kunna styra dina tåg medan du kopplar av i soffan. Så, låt oss komma igång