Innehållsförteckning:

Din energiräkningsövervakare: 4 steg
Din energiräkningsövervakare: 4 steg

Video: Din energiräkningsövervakare: 4 steg

Video: Din energiräkningsövervakare: 4 steg
Video: DAY DIN Live at DIONYSIA 2023 Full Set 2024, Juli
Anonim
Din energiräkningsövervakare
Din energiräkningsövervakare

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

Delar som behövs
Delar som behövs

Steg 2: Programvarubehov

Programvara behövs
Programvara behövs

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

Montera
Montera
Montera
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

Koda
Koda

#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: