Inhaltsverzeichnis:

Ihr Energierechnungsmonitor: 4 Schritte
Ihr Energierechnungsmonitor: 4 Schritte

Video: Ihr Energierechnungsmonitor: 4 Schritte

Video: Ihr Energierechnungsmonitor: 4 Schritte
Video: 4 Schritte System um jeden Mann verliebt zu machen 2024, Juli
Anonim
Ihr Energierechnungsmonitor
Ihr Energierechnungsmonitor

ÜBER DIESES PROJEKT

Wenn Sie Ihr Zuhause wirklich intelligenter machen möchten, sollten Sie wahrscheinlich von Ihren monatlichen Rechnungen ausgehen (z. B. Energie, Gas usw.). Wie manche sagen, Gut für Planet, The Wallet und The Bottom Line. Open-Source-Hardware ist unser Weg, um Nachhaltigkeit in der häuslichen Umgebung zu erreichen! Diese Idee brachte uns dazu, eine einfache und sichere Lösung zu entwickeln, die sich leicht in jede Hausautomationssoftware integrieren lässt, da sie Daten über MQTT verfügbar macht (in unserem Fall zeigen wir Ihnen, wie Sie sie in Home Assistant integrieren).

Überblick

Um den elektrischen Energieverbrauch zu messen, haben wir uns für das Finder Energy Meter entschieden, da es für den Hutschieneneinsatz konzipiert ist und perfekt in den Hauptschrank unseres Hauses passt. Das Coole an diesem Produkt ist, dass es über eine RS485-Modbus-Schnittstelle verfügt, ein Kommunikationsprotokoll nach Industriestandard, das das Sprechen mit einem Arduino wirklich einfach macht. Tatsächlich hat Arduino ein offizielles Shield veröffentlicht, das MKR485 und zwei Bibliotheken, um das Protokoll zu entschlüsseln. Als Mainboard haben wir uns für das Arduino MKR WiFi 1010 entschieden, da es den MKR-Formfaktor teilt und über WiFi-Konnektivität verfügt.

SetupWarnung! Überprüfen Sie die Vorschriften Ihres Landes zum Umgang mit der Hauselektrik und seien Sie äußerst vorsichtig, da dies tödlich sein kann! Wenn Sie nicht wissen, wie es geht, rufen Sie einen Elektriker an. Der erste Schritt besteht darin, das Messgerät in Ihrem Schaltschrank zu installieren. Um sicherzustellen, dass Sie in einer sicheren Umgebung arbeiten, schalten Sie die Stromversorgung des elektrischen Anschlusses vor Ihrem System aus und überprüfen Sie mit dem Multimeter, dass zwischen den Anschlüssen keine Spannung anliegt. Platzieren Sie dann den Energiezähler in Ihrem Schrank und verbinden Sie stromführende und neutrale Drähte vom Hauptschalter mit dem Eingang des Zählers. Denken Sie daran, die Farbkonvention zu verwenden (blau für neutral und braun / schwarz / grau für strom in der EU). Der Ausgang muss mit dem Rest des Systems verbunden werden.

Hauptspannungsanschlüsse. Drähte darüber sind Eingänge, Drähte dahinter sind Ausgänge.

Schritt 1: Benötigte Teile

Benötigte Teile
Benötigte Teile

Schritt 2: Softwareanforderungen

Softwarebedarf
Softwarebedarf

Software

Starten Sie Ihren Computer und öffnen Sie Ihre IDE. Sie können die Arduino IDE oder den Arduino Create Editor verwenden. Der Code erfüllt folgende Anforderungen: Modbus-Kommunikation, WiFi-ManagementMQTT-Protokoll Modbus ist ein Open-Source-Protokoll für industrielle Sensoren und Maschinen. Damit Arduino über Modbus spricht, verwenden wir die Arduino Modbus-Bibliothek. Diese Bibliothek packt alle Handler und macht das Anschließen jedes Modbus-Geräts sehr schnell. Da wir Register lesen werden, können wir dem Datenblatt des Zählers folgend alle Informationen finden, die wir benötigen, wie Funktionscodes, Adresse des Registers und Größe des Registers in Worten. Aber um es klarer zu machen, lassen Sie uns erklären, wie Modbus funktioniert: Modbus-Nachrichten folgen einer einfachen Struktur: 01 03 04 00 16 00 02 25 C7 0x01 ist die Geräteadresse 0x03 ist der Funktionscode, der dem Gerät mitteilt, ob wir Daten lesen oder schreiben möchten *, lesen Sie in diesem Fall die Halteregister 0x04 für Byte Count00 16 - Wir senden 4 Bytes der Registeradresse (00 16), die dem Gerät mitteilen, was wir lesen möchten 00 02 - dann die Größe des Registers (00 02) in Worten (jedes Wort ist 2 Byte lang) Die letzten 4 Byte sind CRC-Code. Dieser Code wird aus einer mathematischen Funktion über vorherige Bytes generiert, dies stellt sicher, dass die Nachricht korrekt empfangen wurde.

Home Assistant-Integration Das Hinzufügen des Messgeräts zu Home Assistant ist ziemlich einfach. Angenommen, Sie haben einen MQTT-Broker konfiguriert (hier ist die Anleitung), müssen Sie lediglich neue Definitionen unter der Datei configuration.yaml hinzufügen. sensor: - Plattform: mqtt name: "Main Voltage" state_topic: "energy/main/voltage" unit_of_measurement: "V" Hier müssen Sie den Namen der Messung, das zu lesende MQTT-Thema und die Maßeinheit der Größe eingeben. Datei speichern, Konfiguration prüfen und Home Assistant neu laden, nun erscheinen die Messwerte auf der Hauptseite.

Home Assistant Verbrauchsanzeige mit aktuellen Messwerten

Home Assistant kümmert sich um die Erstellung von Diagrammen und die Automatisierung von Prozessen, die durch Ihre Messwerte ausgelöst werden. Dieses Tutorial ist abgeschlossen, jetzt liegt es an Ihnen, Funktionen hinzuzufügen und es für Ihre eigenen Zwecke anzupassen!

Schritt 3: Zusammenbauen

Montieren
Montieren
Montieren
Montieren

Fertig? Es ist Zeit, die RS485-Verbindung einzuschrauben! Wir verwenden verdrillte Single-Pair-Kabel mit Masse, die normalerweise für Telefonleitungen verwendet werden. Mit diesem Kabel können Sie über eine große Entfernung (1,2 km) übertragen. Wir verwenden jedoch nur ein Kabel, das lang genug ist, um den Schrank zu verlassen und den Arduino an einem zugänglichen Ort zu platzieren.

Finder RS485-Verbindung

Die RS485-Schnittstelle benennt ihre Klemmen A, B und COM. Ein gängiger De-facto-Standard ist die Verwendung von TX+/RX+ oder D+ als Alternative für B (high für MARK dh Idle), TX-/RX- oder D- alternativ für A (low für MARK dh Idle). Der MKR-Schirm unterstützt auch Vollduplex, Sie sehen zwei weitere Anschlüsse, Y und Z. Hier werden wir das andere Ende des Kabels verschrauben, da wir aus dem Datenblatt wissen, dass die Halbduplex-Kommunikation nur an den Y- und Z-Anschlüssen stattfindet. Die COM-Klemme muss mit ISOGND verbunden werden. Da wir eine Halbduplex-Verbindung verwenden und die Verkabelung Peer-to-Peer ist, müssen wir die Schalter am MKR485-Schild passend zu unserem Setup einrichten: Wir setzen HALF (2 auf off) und Terminierung auf YZ (3 auf AN); das erste ist egal. Die Terminierung ist ein Widerstand, der die beiden Datenanschlüsse verbindet, um Störungen zu dämpfen.

Das ist es. Jetzt können Sie den Schrank schließen und sich auf die Softwareseite konzentrieren!

Schritt 4: Code

Code
Code

#enthalten

#include #include #include //Ihre WLAN-Zugangsdaten const char ssid = "***********"; const char pass = "***********";

WiFiClient-Netz; MQTTClient-Client; unsigned long rate = 60000; // Standardaktualisierungsrate in ms unsigned long lastMillis = 0;

// Verbindungsfunktion Void connect () {Serial.print ("Überprüfen von WLAN …"); Während (WiFi.status () != WL_CONNECTED) { Serial.print ("."); Verzögerung (1000); } Serial.print("\nverbinden…"); Während (!client.connect("device_name", "user_name", "user_pw")) {//ÄNDERUNG, UM IHR SETUP ZU PASSEN Serial.print ("."); Verzögerung (1000); } Serial.println("\nverbunden!"); client.subscribe("Energie/Haupt/Refreshrate"); // Thema, um die Aktualisierungsrate aus der Ferne einzustellen. if (topic == "energy/main/refreshrate") {// Rate des Aktualisierungsraten-Handlers = payload.toInt () * 1000; Serial.println ("neue Rate " + String (Rate)); } }

Void setup () { Serial.begin (115200); WiFi.begin(ssid, pass); while (!Seriell); client.begin("broker_ip", net); // ÄNDERN, UM IHREM SETUP ZU PASSEN client.onMessage(messageReceived); // Starten Sie den Modbus RTU-Client if (!ModbusRTUClient.begin(9600)) { Serial.println("Fehler beim Starten des Modbus RTU-Client!"); während (1); } }

Leere Schleife () {client.loop (); if (!client.connected()) {//Netzwerkverbindung überprüfen connect(); } // eine Nachricht veröffentlichen, nachdem die Aktualisierung abgelaufen ist (nicht blockierende Routine) if (millis () - lastMillis > rate) { lastMillis = millis (); // alle Leseaufrufe floaten volt = readVoltage (); Verzögerung (100); float amp = readCurrent(); Verzögerung (100); doppeltes Watt = readPower(); Verzögerung (100); float Hz = readFreq(); Verzögerung (100); double wh = readEnergy(); //Ergebnisse unter verwandten Themen veröffentlichen client.publish("energy/main/voltage", String(volt, 3)); client.publish("Energie/Haupt/Strom", String(amp, 3)); client.publish("Energie/Haupt/Leistung", String(Watt, 3)); client.publish("Energie/Haupt/Frequenz", String(hz, 3)); client.publish("Energie/Haupt/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"); Verzögerung (100); } }

/* Funktionen zum Lesen von Finder Energy Meter Registern * * Lesen Sie das Modbus-Protokollhandbuch, um den Code zu verstehen * 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)) {// Rufen Sie das Register Serial.print auf ("Spannung konnte nicht gelesen werden!"); Serial.println (ModbusRTUClient.lastError()); //Fehlerhandler}else{uint16_t word1 = ModbusRTUClient.read(); // Daten aus dem Puffer lesen uint16_t word2 = ModbusRTUClient.read (); uint32_t Millivolt = Wort1 << 16 | Wort2; // Bit Mathe Volt = Millivolt/1000,0; } Rückspannung; aufrechtzuerhalten. Float ReadCurrent () { Float Ampere = 0.; if (!ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) { Serial.print ("Fehler beim Lesen des Stroms!"); Serial.println (ModbusRTUClient.lastError()); }sonst{ uint16_t word1 = ModbusRTUClient.read(); uint16_t word2 = ModbusRTUClient.read(); int32_t Milliampere = Wort1 << 16 | Wort2; Ampere = Milliampere/1000,0; } Ampere zurück; }

double readPower () { double watt = 0.; if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print("Strom konnte nicht gelesen werden!"); Serial.println (ModbusRTUClient.lastError()); }sonst{ uint16_t word1 = ModbusRTUClient.read(); uint16_t word2 = ModbusRTUClient.read(); uint16_t word3 = ModbusRTUClient.read(); uint64_t Milliwatt; if(word1 >> 7 == 0){ Milliwatt = word1

Empfohlen: