Inhoudsopgave:

Uw energierekeningmonitor: 4 stappen
Uw energierekeningmonitor: 4 stappen

Video: Uw energierekeningmonitor: 4 stappen

Video: Uw energierekeningmonitor: 4 stappen
Video: Risico's beheren en monitoren, hoe doe je dat? (RISKID stap 4/4) 2024, Juli-
Anonim
Uw energierekeningmonitor
Uw energierekeningmonitor

OVER DIT PROJECT

Als je je huis echt slimmer wilt maken, wil je waarschijnlijk beginnen met je maandelijkse rekeningen (d.w.z. energie, gas, enz…). Zoals sommigen zeggen: Good for Planet, The Wallet en The Bottom Line. Open-source hardware is onze manier om duurzaamheid in de thuisomgeving te bereiken! Dit idee bracht ons ertoe een eenvoudige en veilige oplossing te bouwen, gemakkelijk te integreren met alle domoticasoftware, omdat het gegevens via MQTT blootlegt (in ons geval zullen we u laten zien hoe u het kunt integreren in Home Assistant).

Overzicht

Om het elektrische energieverbruik te meten, hebben we ervoor gekozen om de Finder-energiemeter te gebruiken, omdat deze is ontworpen voor gebruik met een DIN-rail en perfect past in de hoofdkast van ons huis. Het leuke van dit product is dat het een RS485 Modbus-interface heeft, een industrieel standaard communicatieprotocol dat het praten met een Arduino heel eenvoudig maakt. Arduino heeft zelfs een officieel schild uitgebracht, de MKR485 en twee bibliotheken om het protocol te decoderen. Als moederbord hebben we gekozen voor de Arduino MKR WiFi 1010, omdat deze de MKR-vormfactor deelt en WiFi-connectiviteit heeft.

InstellenWaarschuwing! Controleer de voorschriften van uw land over het omgaan met uw elektrische systeem in huis en wees uiterst voorzichtig, want dit kan dodelijk zijn! Als je niet weet hoe, bel dan een elektricien. De eerste stap is het installeren van de meter in uw elektriciteitskast. Om er zeker van te zijn dat u in een veilige omgeving werkt, schakelt u de stroom uit van de elektrische aansluiting voor uw systeem en controleert u met de multimeter nogmaals of er geen spanning is tussen de aansluitingen. Plaats vervolgens de energiemeter in uw kast en sluit de stroomvoerende en neutrale draden van de hoofdschakelaar aan op de ingang van de meter, denk eraan de kleurconventie te gebruiken (blauw voor neutraal en bruin/zwart/grijs voor stroom in de EU). De uitgang moet worden aangesloten op de rest van het systeem.

Aansluitingen hoofdspanning. Bovenstaande draden zijn invoer, draden daarbuiten zijn uitvoer.

Stap 1: benodigde onderdelen

Onderdelen nodig
Onderdelen nodig

Stap 2: Softwarebehoeften

Software nodig
Software nodig

Software

Start uw computer en open uw IDE. U kunt de Arduino IDE of Arduino Create Editor gebruiken. De code voldoet aan de volgende verzoeken: Modbus-communicatie, WiFi-beheerMQTT-protocol Modbus is en open source-protocol voor industriële sensoren en machines. Om Arduino Modbus te laten praten, gaan we de Arduino Modbus-bibliotheek gebruiken. Deze bibliotheek bevat alle handlers en maakt het aansluiten van elk Modbus-apparaat heel snel. Omdat we registers gaan lezen, kunnen we volgens het gegevensblad van de meter alle informatie vinden die we nodig hebben, zoals functiecodes, adres van het register en de grootte van het register in woorden. Maar om het duidelijker te maken, laten we uitleggen hoe Modbus werkt: Modbus-berichten volgen een eenvoudige structuur: 01 03 04 00 16 00 02 25 C7 0x01is het apparaatadres 0x03 is de functiecode die het apparaat vertelt of we gegevens willen lezen of schrijven *, lees in dit geval holdingregisters 0x04 voor Byte Count00 16 - We sturen 4 bytes registeradres (00 16) dat het apparaat vertelt wat we willen lezen 00 02- en vervolgens de grootte van het register (00 02) in woorden (elk woord is 2 bytes lang) Laatste 4 bytes zijn CRC-code. Deze code wordt gegenereerd door een wiskundige functie over eerdere bytes, dit zorgt ervoor dat het bericht correct is ontvangen.

Home Assistant-integratie Het toevoegen van de meter aan Home Assistant is vrij eenvoudig. Ervan uitgaande dat u een MQTT-makelaar hebt geconfigureerd (hier is de gids), hoeft u alleen maar nieuwe definities toe te voegen onder het bestand configuration.yaml. sensor: - platform: mqtt naam: "Main Voltage" state_topic: "energy/main/voltage" unit_of_measurement: "V" Hier moet je de naam van de meting, het MQTT-onderwerp om uit te lezen en de meeteenheid van de hoeveelheid invoeren. Sla het bestand op, controleer de configuratie en laad Home Assistant opnieuw, nu verschijnen de metingen op de hoofdpagina.

Home Assistant-verbruikspaneel met huidige metingen

Home Assistant zorgt voor het maken van grafieken en automatiseert processen die worden geactiveerd door uw metingen. Deze tutorial is voltooid, nu is het aan jou om functies toe te voegen en aan te passen voor je eigen doeleinden!

Stap 3: monteren

Monteren
Monteren
Monteren
Monteren

Gedaan? Het is tijd om de RS485-verbinding in te schroeven! We zullen een getwiste kabel met één paar gebruiken met de grond, meestal gebruikt voor telefoonlijnen. Met deze kabel kun je over een lange afstand zenden (1,2 km). We gebruiken echter gewoon een kabel die lang genoeg is om de kast te verlaten en de Arduino op een toegankelijke plaats te plaatsen.

Finder RS485-aansluiting

De RS485-interface noemt de klemmen A, B en COM. Een gebruikelijke de-facto standaard is het gebruik van TX+/RX+ of D+ als alternatief voor B (hoog voor MARK dwz inactief), TX-/RX- of D- als alternatief voor A (laag voor MARK dwz inactief). MKR-shield ondersteunt ook Full Duplex, je ziet twee andere terminals, Y en Z. Hier gaan we het andere uiteinde van de kabel vastschroeven, omdat we uit de datasheet weten dat half-duplexcommunicatie alleen plaatsvindt op Y- en Z-terminals. De COM-terminal moet worden aangesloten op ISOGND. Omdat we een half-duplex-verbinding gebruiken en omdat de bekabeling peer-to-peer is, moeten we de schakelaars op het MKR485-schild instellen om overeen te komen met onze opstelling: we zetten HALF (2 op uit) en afsluiting op YZ (3 op AAN); de eerste maakt niet uit. De afsluiting is een weerstand die de twee dataterminals verbindt, voor het dempen van interferenties.

Dit is het. Nu kunt u de kast sluiten en focussen op de software kant!

Stap 4: Coderen

Code
Code

#erbij betrekken

#include #include #include //uw wifi-inloggegevens const char ssid = "**********"; const char pass = "**********";

WiFiClient-net; MQTTClient-client; ongetekende lange rente = 60000; // standaard verversingssnelheid in ms unsigned long lastMillis = 0;

//connect functie void connect() {Serial.print("checking wifi…"); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); vertraging (1000); } Serial.print("\nverbinden…"); while (!client.connect("device_name", "user_name", "user_pw")) { //WIJZIG IN OVEREENSTEMMING MET UW SETUP Serial.print("."); vertraging (1000); } Serial.println("\nverbonden!"); client.subscribe("energy/main/refreshrate"); //onderwerp om de verversingssnelheid op afstand in te stellen} //mqtt ontvang callback-functie void messageReceived (String &topic, String &payload) {Serial.println("incoming:" + topic + " - " + payload); if(topic == "energy/main/refreshrate") { //verversingssnelheid handler rate = payload.toInt()*1000; Serial.println("nieuwe koers "+String(rate)); } }

void setup() { Serial.begin(115200); WiFi.begin(ssid, pas); terwijl (!Serial); client.begin("broker_ip", net); // WIJZIG IN OVEREENSTEMMING MET UW SETUP client.onMessage (messageReceived); // start de Modbus RTU-client if (!ModbusRTUClient.begin(9600)) { Serial.println("Kan de Modbus RTU-client niet starten!"); terwijl (1); } }

void loop() { client.loop(); if (!client.connected()) { //check netwerkverbinding connect(); } // publiceer een bericht nadat de vernieuwing is verstreken (niet-blokkerende routine) if (millis() - lastMillis > rate) { lastMillis = millis(); // maak alle leesaanroepen float volt = readVoltage (); vertraging (100); float amp = readCurrent(); vertraging (100); dubbele watt = readPower(); vertraging (100); float hz = readFreq(); vertraging (100); dubbele wh = readEnergy(); //publiceer resultaten onder gerelateerde onderwerpen client.publish("energy/main/voltage", String(volt, 3)); client.publish("energie/hoofd/stroom", String(amp, 3)); client.publish("energie/hoofd/stroom", String(watt, 3)); client.publish("energie/hoofd/frequentie", String(hz, 3)); client.publish("energie/hoofd/energie", String(wh, 3)); Serial.print(String(volt, 3)+"V "+String(amp, 3)+"A "+String(watt, 3)+"W "); Serial.println(String(hz, 3)+"Hz "+String(wh, 3)+"kWh"); vertraging (100); } }

/* Functies om Finder Energy Meter-registers te lezen * * Raadpleeg de handleiding van het modbus-protocol om de code te begrijpen * 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)) { // bel naar het register Serial.print ("kan spanning niet lezen! "); Serial.println(ModbusRTUClient.lastError()); // error handler }else{ uint16_t word1 = ModbusRTUClient.read(); // lees gegevens uit de buffer uint16_t word2 = ModbusRTUClient.read(); uint32_t millivolt = woord1 << 16 | woord2; //bit wiskunde volt = millivolt/1000.0; } retourvolt; } float readCurrent(){ float ampère = 0.; if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x0016, 2)) { Serial.print("kan de huidige niet lezen! "); Serial.println(ModbusRTUClient.lastError()); }else{ uint16_t word1 = ModbusRTUClient.read(); uint16_t word2 = ModbusRTUClient.read(); int32_t milliampère = woord1 << 16 | woord2; ampère = milliamp/100,0; } retour ampère; }

dubbel leesvermogen(){ dubbele watt = 0.; if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x0025, 3)) { Serial.print("kan stroom niet lezen! "); Serial.println(ModbusRTUClient.lastError()); }else{ uint16_t word1 = ModbusRTUClient.read(); uint16_t word2 = ModbusRTUClient.read(); uint16_t word3 = ModbusRTUClient.read(); uint64_t milliwatt; if(woord1 >> 7 == 0){ milliwatt = woord1

Aanbevolen: