Inhaltsverzeichnis:
- Schritt 1: Benötigte Teile
- Schritt 2: Softwareanforderungen
- Schritt 3: Zusammenbauen
- Schritt 4: Code
Video: Ihr Energierechnungsmonitor: 4 Schritte
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
Ü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
Schritt 2: Softwareanforderungen
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
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
#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:
Interessante Programmieranleitung für Designer - Bringen Sie Ihr Bild zum Laufen (Teil 2): 8 Schritte
Interessante Programmieranleitung für Designer – Bringen Sie Ihr Bild zum Laufen (Teil 2): Mathematik scheint für die meisten von Ihnen nutzlos zu sein. Die in unserem täglichen Leben am häufigsten verwendete ist einfach Addieren, Subtrahieren, Multiplizieren und Dividieren. Es ist jedoch ganz anders, wenn Sie mit Programm erstellen können. Je mehr Sie wissen, desto mehr wundervolle Ergebnisse werden Sie erhalten
So erstellen Sie Ihr eigenes WIFI-Gateway, um Ihr Arduino mit dem IP-Netzwerk zu verbinden? - Gunook
So erstellen Sie Ihr eigenes WIFI-Gateway, um Ihr Arduino mit dem IP-Netzwerk zu verbinden?: Wie so viele Leute denken Sie, dass Arduino eine sehr gute Lösung für die Heimautomatisierung und Robotik ist! Aber in Bezug auf die Kommunikation kommen Arduinos nur mit seriellen Verbindungen. Ich arbeite an einem Roboter, der permanent mit einem Server verbunden sein muss, auf dem ar
OxusR – Ihr Video-Content im Fluss: 3 Schritte
OxusR – Ihre Videoinhalte im Fluss: O QUE É?OxusR é um das Projekt von Digital Signage que otimiza o consumo de banda evitando redundância de downloads em uma mesma rede
So erstellen Sie Ihr eigenes Betriebssystem! (Batch und Beispiel innen): 5 Schritte
So erstellen Sie Ihr eigenes Betriebssystem! (Batch und Beispiel Inside): Machen Sie es jetzt
So finden Sie Ihr verlorenes Handy oder Ihr schnurloses Telefon – wikiHow
So finden Sie Ihr verlorenes Handy oder schnurloses Telefon: Szenario: Meine Frau und ich haben beide Mobiltelefone. Wir benutzen kein Heimtelefon mehr, da wir die ganze Zeit unterwegs sind. Warum für einen Festnetzanschluss bezahlen, den Sie kaum nutzen