Inhaltsverzeichnis:

Strom- und Gaszähler ablesen (belgisch/niederländisch) und auf Thingspeak hochladen - Gunook
Strom- und Gaszähler ablesen (belgisch/niederländisch) und auf Thingspeak hochladen - Gunook

Video: Strom- und Gaszähler ablesen (belgisch/niederländisch) und auf Thingspeak hochladen - Gunook

Video: Strom- und Gaszähler ablesen (belgisch/niederländisch) und auf Thingspeak hochladen - Gunook
Video: Strom- und Gaszähler richtig ablesen - VERBUND 2024, November
Anonim
Strom- und Gaszähler ablesen (belgisch/niederländisch) und auf Thingspeak hochladen
Strom- und Gaszähler ablesen (belgisch/niederländisch) und auf Thingspeak hochladen
Strom- und Gaszähler ablesen (belgisch/niederländisch) und auf Thingspeak hochladen
Strom- und Gaszähler ablesen (belgisch/niederländisch) und auf Thingspeak hochladen

Wenn Sie sich Sorgen um Ihren Energieverbrauch machen oder einfach nur ein kleiner Nerd sind, möchten Sie wahrscheinlich die Daten Ihres schicken neuen digitalen Zählers auf Ihrem Smartphone sehen.

In diesem Projekt werden wir die aktuellen Daten von einem belgischen oder niederländischen digitalen Strom- und Gaszähler beziehen und auf Thingspeak hochladen. Diese Daten umfassen den aktuellen und täglichen Stromverbrauch und die Einspeisung (wenn Sie Solarmodule haben), Spannungen und Ströme sowie den Gasverbrauch (wenn ein digitaler Gaszähler an den Stromzähler angeschlossen ist). Über eine App können diese Werte dann in Echtzeit auf Ihrem Smartphone abgelesen werden.

Es funktioniert für einen belgischen oder niederländischen digitalen Zähler, der dem DSMR-Protokoll (Dutch Smart Meter Requirements) folgt, das alle neueren Zähler sein sollten. Wenn Sie woanders leben, wird Ihr Messgerät wahrscheinlich ein anderes Protokoll verwenden. Ich fürchte, dieses Instructable ist etwas regional eingeschränkt.

Wir verwenden den P1-Port des Messgeräts, der ein RJ11/RJ12-Kabel akzeptiert, umgangssprachlich als Telefonkabel bezeichnet. Stellen Sie sicher, dass der Installateur des Messgeräts den P1-Port aktiviert hat. Befolgen Sie beispielsweise für Fluvius in Belgien diese Anweisungen.

Um die Daten zu verarbeiten und ins Internet hochzuladen, verwenden wir einen ESP8266, einen billigen Mikrochip mit integriertem WLAN. Es kostet nur etwa 2 Dollar. Außerdem kann es mit der Arduino IDE programmiert werden. Wir speichern die Daten in der Cloud auf Thingspeak, die für maximal vier Kanäle kostenlos ist. Für dieses Projekt verwenden wir nur einen Kanal. Die Daten können dann mit einer App wie IoT ThingSpeak auf Ihrem Smartphone angezeigt werden.

Teile:

  • Ein ESP8266, wie ein nodemcu v2. Beachten Sie, dass der Nodemcu v3 für ein Standard-Steckbrett zu breit ist, daher bevorzuge ich den v2.
  • Ein Micro-USB-zu-USB-Kabel.
  • Ein USB-Ladegerät.
  • Ein BC547b NPN-Transistor.
  • Zwei 10k-Widerstände und ein 1k-Widerstand.
  • Ein RJ12-Schraubklemmenanschluss.
  • Ein Steckbrett.
  • Überbrückungsdrähte.
  • Optional: ein 1nF-Kondensator.

Insgesamt kostet das bei AliExpress oder ähnlichem etwa 15 EUR. Die Schätzung berücksichtigt, dass einige Komponenten wie Widerstände, Transistoren und Drähte in viel größeren Mengen geliefert werden, als Sie für dieses Projekt benötigen. Wenn Sie also bereits einen Komponentensatz haben, ist es billiger.

Schritt 1: Kennenlernen des ESP8266

Ich habe mich für die NodeMCU v2 entschieden, da kein Löten erforderlich ist und sie über einen Micro-USB-Anschluss verfügt, der eine einfache Programmierung ermöglicht. Der Vorteil der NodeMCU v2 gegenüber der NodeMCU v3 besteht darin, dass sie klein genug ist, um auf ein Steckbrett zu passen und seitlich freie Löcher zum Herstellen von Verbindungen zu lassen. Vermeiden Sie also besser die NodeMCU v3. Wenn Sie jedoch ein anderes ESP8266-Board bevorzugen, ist das auch in Ordnung.

Der ESP8266 kann einfach mit der Arduino IDE programmiert werden. Es gibt andere Instructables, die dies im Detail erklären, also werde ich mich hier sehr kurz fassen.

  • Laden Sie zuerst die Arduino-IDE herunter.
  • Zweitinstallationsunterstützung für die ESP8266-Platine. Fügen Sie im Menü Datei - Einstellungen - Einstellungen die URL https://arduino.esp8266.com/stable/package_esp8266com_index.json zu Additional Board Manager URLs hinzu. Als nächstes im Menü Tools - Board - Boards Manager installieren Sie esp8266 by esp8266 community.
  • Wählen Sie als drittes die Platine aus, die Ihrem ESP8266 am nächsten liegt. In meinem Fall habe ich NodeMCU v1.0 (ESP 12-E Module) gewählt.
  • Wählen Sie schließlich unter Tools - Flash Size eine Größe, die SPIFFS enthält, wie 4M (1M SPIFFS). In diesem Projekt verwenden wir das SPIFFS (SPI Flash File System), um die täglichen Energiewerte zu speichern, damit diese nicht verloren gehen, wenn der ESP8266 Strom verliert und auch wenn er neu programmiert wird.

Jetzt haben wir alles an Ort und Stelle, um den ESP8266 zu programmieren! Den eigentlichen Code besprechen wir in einem späteren Schritt. Zuerst erstellen wir ein Thingspeak-Konto.

Schritt 2: Erstellen Sie ein Thingspeak-Konto und einen Kanal

Gehen Sie zu https://thingspeak.com/ und erstellen Sie ein Konto. Sobald Sie eingeloggt sind, klicken Sie auf die Schaltfläche Neuer Kanal, um einen Kanal zu erstellen. Geben Sie in den Kanaleinstellungen den Namen und die Beschreibung nach Belieben ein. Als nächstes benennen wir die Kanalfelder und aktivieren sie durch Anklicken der Checkboxen rechts. Wenn Sie meinen Code unverändert verwenden, sind die Felder wie folgt:

  • Feld 1: Spitzenverbrauch heute (kWh)
  • Feld 2: Schwachlastverbrauch heute (kWh)
  • Feld 3: Spitzeneinspeisung heute (kWh)
  • Feld 4: Schwachlasteinspeisung heute (kWh)
  • Feld 5: Stromaufnahme (W)
  • Feld 6: Stromeinspeisung (W)
  • Feld 7: Gasverbrauch heute (m3)

Peak und Off-Peak beziehen sich hier auf den Stromtarif. In den Feldern 1 und 2 bezieht sich der Verbrauch auf den heutigen Nettostromverbrauch: Stromverbrauch heute im Tarifzeitraum seit Mitternacht minus Stromeinspeisung (durch Solarzellen erzeugt) heute im Tarifzeitraum seit Mitternacht mit einem Minimum von Null. Letzteres bedeutet, dass bei mehr Einspritzung als Verbrauch heute der Wert Null ist. Ebenso bezieht sich die Einspeisung in die Felder 3 und 4 auf die Nettoeinspeisung von Strom. Die Felder 5 und 6 zeigen den aktuellen Nettoverbrauch und die Injektion an. Schließlich ist Feld 7 der Gasverbrauch seit Mitternacht.

Notieren Sie sich zum späteren Nachschlagen die Channel ID, den Read API Key und den Write API Key, die im Menü API Keys zu finden sind.

Schritt 3: Aufbau der elektronischen Schaltung

Aufbau der elektronischen Schaltung
Aufbau der elektronischen Schaltung
Aufbau der elektronischen Schaltung
Aufbau der elektronischen Schaltung

Den Stromzähler lesen wir über den P1-Port ab, der ein RJ11- oder RJ12-Kabel aufnimmt. Der Unterschied besteht darin, dass das RJ12-Kabel 6 Adern hat, während das RJ11 nur 4 hat. In diesem Projekt versorgen wir den ESP8266 nicht über den P1-Port, also brauchen wir eigentlich nur 4 Adern, also würde ein RJ11 reichen.

Ich habe den im Bild gezeigten RJ12-Breakout verwendet. Es ist etwas breit und es ist nicht viel Platz um den P1-Port in meinem Messgerät. Es passt, aber es ist eng. Alternativ können Sie einfach ein RJ11- oder RJ12-Kabel verwenden und den Header an einem Ende abziehen.

Hält man den Ausbruch wie im Bild, sind die Pins von rechts nach links nummeriert und haben folgende Bedeutung:

  • Pin 1: 5V Stromversorgung
  • Pin 2: Datenanforderung
  • Pin 3: Datenmasse
  • Pin 4: nicht verbunden
  • Pin 5: Datenleitung
  • Pin 6: Strommasse

Pin 1 und Pin 6 könnten verwendet werden, um den ESP8266 mit Strom zu versorgen, aber ich habe dies nicht getestet. Sie müssten Pin 1 mit Vin des ESP8266 verbinden, damit der interne Spannungsregler der Platine verwendet wird, um die Spannung von 5 V auf die 3,3 V zu reduzieren, die der ESP8266 akzeptiert. Schließen Sie es also nicht an den 3,3-V-Pin an, da dies den ESP8266 beschädigen könnte. Auch die Stromversorgung über den P1-Port würde mit der Zeit die Batterie des digitalen Messgeräts entladen.

Das Setzen von Pin 2 auf High signalisiert dem Zähler, jede Sekunde Datentelegramme zu senden. Die eigentlichen Daten werden über Pin 5 mit einer Baudrate von 115200 für einen modernen Digitalzähler (DSMR 4 und 5) gesendet. Das Signal wird umgekehrt (Low ist 1 und High ist 0). Bei einem älteren Typ (DSMR 3 und niedriger) beträgt die Rate 9600 Baud. Für ein solches Messgerät müssen Sie im nächsten Schritt die Baudrate im Firmware-Code ändern: Ändern Sie die Zeile Serial.begin(115200); in setup().

Die Rolle des NPN-Transistors ist zweifach:

  • Um das Signal umzukehren, damit der ESP8266 es verstehen kann.
  • Um den Logikpegel von den 5V des P1-Ports auf die 3,3V zu ändern, die vom RX-Port des ESP8266 erwartet werden.

Erstellen Sie also die elektronische Schaltung auf dem Steckbrett wie im Diagramm. Der Kondensator erhöht die Stabilität, funktioniert aber auch ohne.

Halten Sie den RX-Pin an, bis Sie im nächsten Schritt den ESP8266 programmiert haben. Tatsächlich wird der RX-Pin auch benötigt, um über USB zwischen dem ESP8266 und Ihrem Computer zu kommunizieren.

Schritt 4: Laden Sie den Code hoch

Ich habe den Code auf GitHub zur Verfügung gestellt, es ist nur eine Datei: P1-Meter-Reader.ino. Laden Sie es einfach herunter und öffnen Sie es in der Arduino IDE. Oder Sie können Datei - Neu auswählen und einfach den Code kopieren/einfügen.

Am Anfang der Datei müssen Sie einige Informationen eingeben: den Namen und das Passwort des zu verwendenden WLANs sowie die Kanal-ID und den Schreib-API-Schlüssel des ThingSpeak-Kanals.

Der Code macht folgendes:

  • Liest alle UPDATE_INTERVAL (in Millisekunden) ein Datentelegramm vom Zähler. Der Standardwert ist alle 10 Sekunden. Normalerweise kommt jede Sekunde ein Datentelegramm vom Zähler, aber wenn die Frequenz zu hoch eingestellt wird, wird der ESP8266 überlastet, sodass er den Webserver nicht mehr ausführen kann.
  • Lädt die Stromdaten alle SEND_INTERVAL (in Millisekunden) auf den Thingspeak-Kanal hoch. Der Standardwert ist jede Minute. Berücksichtigen Sie bei der Entscheidung über diese Häufigkeit, dass das Senden der Daten einige Zeit in Anspruch nimmt (normalerweise einige Sekunden) und dass die Aktualisierungshäufigkeit auf Thingspeak für einen kostenlosen Account begrenzt ist. Es sind ungefähr 8200 Nachrichten pro Tag, also wäre die maximale Häufigkeit ungefähr alle 10 Sekunden, wenn Sie Thingspeak für nichts anderes verwenden.
  • Lädt die Gasdaten hoch, wenn sie sich ändern. Normalerweise aktualisiert der Zähler die Gasverbrauchsdaten nur etwa alle 4 Minuten.
  • Der Zähler verfolgt den Gesamtverbrauch und die Einspritzwerte seit dem Start. Um den täglichen Verbrauch und die Einspritzung zu erhalten, speichert der Code die Gesamtwerte jeden Tag um Mitternacht. Anschließend werden diese Werte von den aktuellen Gesamtwerten abgezogen. Die Werte um Mitternacht werden im SPIFFS (SPI Flash File System) gespeichert, das bei einem Stromausfall des ESP8266 oder sogar bei einer Neuprogrammierung bestehen bleibt.
  • Der ESP8266 betreibt einen Mini-Webserver. Wenn Sie dessen IP-Adresse in Ihrem Browser öffnen, erhalten Sie einen Überblick über alle aktuellen Strom- und Gaswerte. Diese stammen aus dem neuesten Telegramm und enthalten Informationen, die nicht auf Thingspeak hochgeladen werden, wie Spannungen und Ströme pro Phase. Die Standardeinstellung ist, dass die IP-Adresse dynamisch von Ihrem Router bestimmt wird. Bequemer ist es jedoch, eine statische IP-Adresse zu verwenden, die immer gleich ist. In diesem Fall müssen Sie staticIP, gateway, dns und subnet in den Code eingeben und die Zeile WiFi.config(staticIP, dns, gateway, subnet) auskommentieren; in der Funktion connectWifi().

Nachdem Sie diese Änderungen vorgenommen haben, können Sie die Firmware auf den ESP8266 hochladen. Verbinden Sie den ESP8266 über das USB-Kabel mit Ihrem Computer und drücken Sie das Symbol mit dem Pfeil in der Arduino IDE. Wenn Sie keine Verbindung zum ESP8266 herstellen können, versuchen Sie, den COM-Port im Menü Tools - Port zu ändern. Wenn es immer noch nicht funktioniert, müssen Sie möglicherweise den Treiber für den virtuellen USB-COM-Port manuell installieren.

Schritt 5: Testen

Trennen Sie nach dem Hochladen der Firmware den USB und schließen Sie das RX-Kabel des ESP8266 an. Denken Sie daran, wir brauchten den RX-Kanal des ESP8266 zum Hochladen der Firmware, also haben wir ihn vorher nicht verbunden. Stecken Sie nun den RJ12-Breakout in das digitale Messgerät und verbinden Sie den ESP8266 wieder mit Ihrem Computer.

Öffnen Sie in der Arduino IDE den Serial Monitor über das Tools-Menü und stellen Sie sicher, dass er auf 115200 Baud eingestellt ist. Wenn Sie die Baudrate ändern müssen, müssen Sie den Serial Monitor möglicherweise schließen und erneut öffnen, bevor er funktioniert.

Jetzt sollten Sie die Ausgabe des Codes im Serial Monitor sehen. Sie sollten prüfen, ob Fehlermeldungen vorliegen. Außerdem sollten Sie die Telegramme sehen können. Bei mir sehen sie so aus:

/FLU5\xxxxxxxxx_x

0-0:96.1.4(50213) 0-0:96.1.1(3153414733313030313434363235) // Seriennummer Zähler hexadezimal 0-0:1.0.0(200831181442S) // Zeitstempel S: Sommerzeit (Sommer), W: nein Sommerzeit (Winter) 1-0:1.8.1(000016.308*kWh) // Gesamter Spitzenverbrauch 1-0:1.8.2(000029.666*kWh) // Gesamter Nettoverbrauch außerhalb der Spitzenzeiten 1-0:2.8.1 (000138.634*kWh) // Gesamtspitze Nettoeinspeisung 1-0:2.8.2(000042,415*kWh) // Gesamte Nettoeinspeisung außerhalb der Spitzenzeit 0-0:96.14.0(0001) // Tarif 1: Spitze, 2: Off-Peak 1-0:1.7.0(00.000*kW) // Stromaufnahme 1-0:2.7.0(00.553*kW) // Stromeinspeisung 1-0:32.7.0(235.8*V) // Phase 1 Spannung 1-0:52.7.0(237.0*V) // Phase 2 Spannung 1-0:72.7.0(237.8*V) // Phase 3 Spannung 1-0:31.7.0(001*A) // Strom Phase 1 1-0:51.7.0(000*A) // Strom Phase 2 1-0:71.7.0(004*A) // Strom Phase 3 0-0:96.3.10(1) 0-0:17.0.0(999.9*kW) // Max Leistung 1-0:31.4.0(999*A) // Max Strom 0-0:96.13.0() // Nachricht 0-1:24.1.0(003) // andere Geräte am M-Bus 0-1:96.1.1(37464C4F32313230313037393338) // Seriennummer Gaszähler r hexadezimal 0-1:24.4.0(1) 0-1:24.2.3(200831181002S)(00005.615*m3) // Gaszeitstempel Gesamtverbrauch !E461 // CRC16 Prüfsumme

Wenn etwas nicht stimmt, können Sie überprüfen, ob Sie die gleichen Tags haben und müssen möglicherweise den Code zum Parsen der Telegramme in der Funktion readTelegram ändern.

Wenn alles funktioniert, können Sie den esp8266 jetzt über das USB-Ladegerät mit Strom versorgen.

Installieren Sie die IoT ThingSpeak Monitor App auf Ihrem Smartphone, geben Sie die Channel ID und Read API Key ein und fertig!

Empfohlen: