Skip to content

PiggyMeter

PiggyMeter am Stromzähler angebracht

Dieser Artikel zeigt Ihnen, wie Sie ein Gerät bauen, um Daten von einem Stromzähler (oder einem beliebigen Gerät mit kompatibler Schnittstelle) aus der Ferne auszulesen.

Es verwendet weit verbreitete Komponenten, Open-Source-Software und ist kompatibel mit beliebter Heimautomatisierungssoftware, Home Assistant.

INFO

Ein Bausatz zum Zusammenbau eines funktionalen Geräts ist auf Tindie erhältlich: PiggyMeter KIT.

Merkmale

  • Unterstützt IEC62056-21 basierte Protokolle
  • Unterstützt passives SML-Protokoll mit ESPHome nativer Komponente
  • Mehrere Zähler: Energie, Wasser, Wärme und mehr
  • Verwendet Open-Source ESPHome
  • Drahtlose Kommunikation über Wi-Fi
  • Integriert mit Home Assistant
  • Optionaler Webserver
  • Günstige Hardware ESP32-C3 oder ESP32-S2
  • Gehäusedesign für 3D-Druck verfügbar

Es unterstützt Zähler, die mit dem IEC62056-21-Standard kompatibel sind und in den Modi A, B, C, D (aber nicht E) arbeiten. Für Details siehe IEC 62056-21 Komponente.

Beachten Sie, dass es viele Variationen des Protokolls gibt. Obwohl der Zähler dieselbe optische Schnittstelle verwenden kann, könnte das Datenrahmenformat unterschiedlich sein.

Zusätzlich unterstützt es Zähler, die das SML (Smart Message Language) Protokoll verwenden, mit der ESPHome SML Komponente.

WARNING

DLMS-, M-Bus- und ANSI C12.18/19-Standards werden von der Software nicht unterstützt.

Wie überprüft man, ob der Zähler unterstützt wird?

Der Begriff IEC 62056-21 wird für mehrere Protokolle verwendet (mit derselben Hardwareebene, aber unterschiedlicher Datenkodierung). Das Gerät unterstützt Zähler, die ASCII-kodierte Daten bereitstellen, etwa so:

console
1-0:15.8.1(00000009999.567*kWh)
1-0:15.8.2(00000000000.000*kWh)
1-0:15.8.3(00000000000.000*kWh)
1-0:15.8.4(00000000000.000*kWh)

Der Zähler muss mit der Internationalen Norm IEC 62056-21:2002 kompatibel sein.

Charakteristischer Metallring und optische Schnittstelle in der Mitte.

Für das SML-Protokoll suchen Sie nach dem SML-Logo auf dem Zähler oder überprüfen Sie das Handbuch. Die ESPHome-Komponente unterstützt nur den passiven Modus, sie sendet keine Anfragen an den Zähler. In diesem Modus sendet der Zähler alle paar Sekunden Daten.

Zähler, die mit PiggyMeter funktionieren sollen

Die Liste basiert auf Benutzerberichten. Es gibt keine Garantie, dass sie korrekt ist.

INFO

Fühlen Sie sich frei, eine E-Mail an info@aquaticus.info zu senden, wenn Sie einen Zähler kennen, der mit PiggyMeter funktioniert, aber nicht oben aufgeführt ist.

Alternative Software

Die PiggyMeter-Hardware kann mit vielen verschiedenen Zählern arbeiten, die eine optische Schnittstelle nutzen. Die Software unterstützt jedoch derzeit nur einen Standard, was die Anzahl der unterstützten Zähler praktisch einschränkt.

Sie können versuchen, alternative Software zu verwenden, die möglicherweise Unterstützung für verschiedene Zähler hinzufügt. Es ist wichtig zu beachten, dass es keine Garantie gibt, dass sie nahtlos mit PiggyMeter funktioniert. Für Unterstützung wenden Sie sich bitte an den ursprünglichen Autor.

Stückliste

TeilBeschreibung
CPUWemos C3 oder S2 Mini https://www.wemos.cc/en/latest/
Optische SchnittstellePiggyMeter PCB https://www.tindie.com/products/32082/
2×Pin-Header 1×42,54 mm Raster; Kunststoffteil muss 8,5 mm hoch sein
Ringmagnet⌀30/⌀15×2mm
Gehäuse3D-gedrucktes Gehäuse https://github.com/aquaticus/piggymeter_case
Unterlegscheibe3D-gedruckte Unterlegscheibe https://github.com/aquaticus/piggymeter_case
Deckel3D-gedruckter Rückdeckel https://github.com/aquaticus/piggymeter_case

CPU-Platine

CPU

Sie benötigen eine Platine mit installiertem Espressif-Chip und kompatiblem Wemos/Lolin-Pinout. Der entscheidende Faktor ist die Position von 4 Pins: GND, VCC, TX und RX.

Die Größe der Leiterplatte ist ebenfalls entscheidend. Das 3D-gedruckte Gehäuse passt nur zu den unten aufgeführten Platinen (oder deren Klonen):

  • Lolin/Wemos S2 mini
  • Lolin/Wemos C3 mini

Theoretisch können Sie jede andere CPU-Platine mit kompatiblem Pinout verwenden, insbesondere ESP32 und ESP8266 D1 mini. In diesem Fall müssen Sie jedoch Ihr eigenes Gehäuse entwerfen und die Konfigurationsdateien (Platinen-Typ und serielle Schnittstellen-Pins) ein wenig anpassen.

Optische Schnittstelle

Optische Schnittstelle

Ein Zähler verwendet eine optische Schnittstelle, die mit dem IEC62056-21 Standard kompatibel ist und über eine Infrarotdiode und einen Fototransistor mit einer Sonde kommuniziert.

Die Schnittstelle ist mit einem der seriellen Ports auf der CPU-Platine verbunden. Natürlich benötigen Sie auch VCC und GND.

Optische Schnittstelle und CPU-Platine

Löten Sie 2 Pin-Header. Sie müssen einen Pin-Header mit einer Höhe von 8,5 mm verwenden. Das Design des Gehäuses berücksichtigt diese Höhe und sorgt für eine ordnungsgemäße Passform. Wenn die Höhe diese Dimension überschreitet, kann das Schließen des Deckels problematisch sein.

INFO

Sie können eine montierte Schnittstelle auf Tindie kaufen. Buy on Tindie

Gehäuse

Laden Sie Dateien für den 3D-Drucker von https://github.com/aquaticus/piggymeter_case herunter. Verwenden Sie die Version V5 für das neueste Design.

Gehäuse

Das Gehäuse besteht aus drei Komponenten:

  • dem Hauptgehäuse,
  • einer Unterlegscheibe,
  • und einem Deckel.

Es gibt drei verschiedene STL-Dateien für jede Komponente oder alternativ eine einzelne 3fm-Datei, die alle drei Elemente enthält.

Das Gehäuse erfüllt die Anforderungen der IEC62056-21 Standard-Optische Sonde>.

INFO

Das Gehäuse hat einen kleinen Verschluss. Um es zu schließen oder zu öffnen, müssen Sie etwas Kraft aufwenden.

Empfohlene 3D-Druckeinstellungen

  • Material: PLA
  • Schicht: 0,2 mm
  • Keine Unterstützung

3d print

Montage

Assembly

Ordnen Sie die Komponenten in diesem Fall in folgender Reihenfolge an:

  1. Magnet
  2. Unterlegscheibe
  3. Optische Schnittstelle
  4. CPU-Platine
  5. Deckel

INFO

Sehen Sie sich die Montage auf Youtube an https://youtu.be/fM2LyJJWQHA?si=dyY4r7zMSMfbwQtm

Programmierung für IEC62056-21 Zähler

Beginnen Sie mit der Installation von ESPHome.

Wählen Sie basierend auf Ihrer CPU-Platine die entsprechende Konfigurationsdatei aus. Nehmen Sie manuell Anpassungen an bestimmten Parametern vor, wie z.B. dem WiFi-Passwort.

Konfigurationsdateien abrufen

Klonen Sie das Git-Repository mit den Konfigurationsdateien:

bash
git clone https://github.com/aquaticus/piggymeter_esphome_yaml

Erstellen Sie die Datei secrets.yaml

Erstellen Sie eine secrets.yaml Datei im Verzeichnis, in dem sich die Konfigurationsdateien befinden. Diese Datei enthält den Namen des WiFi-Netzwerks und das entsprechende Passwort.

yaml
# Home Assistant API encryption key
api_key: my_home_assistant_encryption_key

# OTA password
ota_pass: my_ota_password

# WiFi network name
wifi_ssid: my_network

# WiFi network password
wifi_pass: my_password

Projektkonfiguration ändern

Die Konfiguration ist mit Standarddatenpunkten für einen Stromzähler voreingestellt.

Passen Sie die Liste nach Bedarf an, insbesondere wenn Ihr Zähler von einem Stromzähler abweicht. Weitere Informationen finden Sie in der IEC 62056-21 Komponente.

yaml
sensor:
   - platform: iec62056
       obis: 1-0:15.8.0
       name: Absolute active energy total
       unit_of_measurement: kWh
       accuracy_decimals: 3
       device_class: energy
       state_class: total_increasing

Firmware erstellen und flashen

bash
esphome run piggymeter-s2-iec62056-21.yaml

Der obige Befehl flasht die Firmware und zeigt die Monitor-Ausgabe. Standardmäßig liest die Schnittstelle alle 1 Minute Daten von einem Zähler.

TIP

Für die ESP32-S2-Platine müssen Sie die BOOT-Taste und dann die RESET-Taste auf der Platine drücken, um in den Programmiermodus zu gelangen. Zusätzlich können Sie nach dem Flashen eine Fehlermeldung sehen – ignorieren Sie diese einfach.

log
[12:21:27][D][iec62056.component:232]: Connection start
[12:21:27][D][binary_sensor:036]: 'Meter Connection Status': Sending state ON
[12:21:28][D][switch:013]: 'Internal LED' Turning ON.
[12:21:28][D][switch:056]: 'Internal LED': Sending state ON
[12:21:28][D][iec62056.component:174]: Meter identification: '/XXX6\2YYYYY'
[12:21:28][D][iec62056.component:407]: Meter reported protocol: C
[12:21:28][D][iec62056.component:410]: Meter reported max baud rate: 19200 bps ('6')
[12:21:28][D][iec62056.component:438]: Using negotiated baud rate 9600 bps.
[12:21:29][D][iec62056.component:470]: Switching to new baud rate 9600 bps ('5')
[12:21:29][D][iec62056.component:482]: Meter started readout transmission
[12:21:29][D][iec62056.component:524]: Data: 0-0:C.1.0(12345678)
[12:21:29][D][iec62056.component:524]: Data: 0-0:1.0.0(2000-01-01 20:10:30)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.0(00000001000.657*kWh)
[12:21:29][D][iec62056.component:620]: Set sensor 'Absolute active energy total' for OBIS '1-0:15.8.0'. Value: 1000.656982
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.1(00000002000.657*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.2(00000003000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.3(00000004000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.4(00000005000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:01)

Programmierung für SML Zähler

Die ersten Schritte sind identisch mit denen für IEC62056-21 Zähler.

Nach dem Klonen des Repositories und dem Erstellen der secrets.yaml Datei verwenden Sie die Konfigurationsdateien für SML Zähler.

bash
esphome run piggymeter-s2-sml.yaml

Wahrscheinlich müssen Sie die Konfigurationsdatei anpassen, um sie an die vom Zähler übertragenen Datenpunkte anzupassen. Es ist auch ratsam, die Baudrate und die Datenbits des seriellen Ports zu überprüfen.

Home Assistant

Das Gerät sollte automatisch von Home Assistant erkannt werden. Falls nicht, können Sie es manuell hinzufügen, indem Sie auf Integration hinzufügen klicken und die ESPHome-Integration auswählen.

PiggyMeter stellt drei Gruppen von Elementen bereit:

Auslese-Trigger

Dieser Trigger zwingt PiggyMeter dazu, Daten von einem Zähler außerhalb des Zeitplans zu lesen.

Zählerverbindungsstatus

Der Verbunden-Status zeigt an, dass die Schnittstelle Daten mit dem Zähler austauscht.

Verbindungsstatus

Sensoren

Dies ist eine Liste von Sensoren, die in der Konfigurationsdatei definiert sind.

Sensoren

Standalone-Modus

PiggyMeter kann unabhängig von Home Assistant betrieben werden und bietet die Möglichkeit, einen Webserver zu aktivieren. Dieser Server zeigt die ausgelesenen Daten direkt in einem Webbrowser an und bietet eine einfache REST-API.

Um den Webserver zu aktivieren, fügen Sie die folgenden Zeilen in die Konfigurationsdatei ein:

yaml
web_server:
  port: 80

Weitere Informationen über den Webserver finden Sie in der ESPHome-Dokumentation.

Änderungen

Standardmäßig ruft das Gerät jede Minute Daten ab, und die interne LED leuchtet während der Übertragung.

In der Konfigurations-YAML-Datei sind nur eine begrenzte Anzahl von OBIS-Codes definiert. Es wird dringend empfohlen, die Liste der Sensoren an den Zähler anzupassen.

Obwohl OBIS-Codes standardisiert sind, können Zähler unterschiedliche Anzahlen von Codes übertragen. Um die unterstützten Codes für Ihren Zähler zu ermitteln, aktivieren Sie das DEBUG-Logging für die IEC62056-21-Komponente und analysieren Sie die Protokollausgabe.

Diagnose und Probleme IEC62056-21

Dieser Abschnitt ist nur für IEC62056-21-Zähler (nicht SML).

Nach dem Flashen der Firmware versucht das Gerät, nach etwa 15 Sekunden Daten von einem Zähler zu lesen. Wenn die Übertragung fehlschlägt, wird sie alle 15 Sekunden zweimal wiederholt.

Sie können diese Parameter anpassen, indem Sie die entsprechenden Tokens konfigurieren. Konsultieren Sie die IEC62056-21 Komponente Dokumentation für weitere Details.

Es ist ratsam, das Standardprotokollniveau von DEBUG auf INFO zu ändern, sobald das Gerät korrekt funktioniert.

Nachfolgend sind häufige Probleme und deren jeweilige Lösungen aufgeführt.

TIP

Stellen Sie sicher, dass die Sonde fest am Zähler angebracht ist und der Pfeil auf der Sonde nach oben zeigt.

Keine Übertragung vom Zähler

log
[E][iec62056.component:268]: No transmission from meter.

Dies kann bedeuten:

  • Am häufigsten ist die Schnittstelle nicht an einen Zähler angeschlossen.
  • Die Schnittstelle ist nicht richtig mit der optischen Schnittstelle eines Zählers ausgerichtet.
  • Der Zähler ist nicht kompatibel.

Stellen Sie sicher, dass die optische Schnittstelle parallel zur Vorderseite des Gehäuses positioniert ist. Wenn das Gerät funktioniert, wenn es ohne Gehäuse am Zähler angebracht ist, aber nicht funktioniert, nachdem es in das Gehäuse eingesetzt wurde, könnte dies das Problem sein. In einem solchen Fall können Sie auch in Betracht ziehen, die beiden Löcher im Gehäuse zu vergrößern.

Nicht alle Sensoren haben Daten empfangen

log
[E][iec62056.component:644]: Not all sensors received data from the meter. The first one: OBIS '1-0:72.7.0'. Verify sensor is defined with valid OBIS code.

Dies kann auf zwei Probleme hinweisen:

  • Der Zähler unterstützt den OBIS-Code, den Sie in der yaml Datei konfiguriert haben, nicht. Entfernen Sie einfach den Sensor mit dem spezifischen OBIS-Code aus der Konfiguration.
  • Es könnte ein Tippfehler oder eine falsche Definition des OBIS-Codes für den Sensor in der Konfigurationsdatei vorliegen. Überprüfen Sie den Code sorgfältig.

Der Zähler überträgt Daten automatisch, aber das Gerät empfängt nichts

Dies zeigt an, dass der Zähler den Modus D von IEC62056-21 unterstützt. In diesem Modus überträgt der Zähler autonom alle paar Sekunden Daten, ohne dass eine spezifische Anfrage erforderlich ist. Stellen Sie sicher, dass der serielle Port so konfiguriert ist, dass er mit dem Übertragungsformat des Zählers übereinstimmt, das in den meisten Fällen typischerweise auf 9600 7E1 oder 2400 7E1 eingestellt ist.

yaml
# 9600bps for mode D
uart:
    rx_pin: GPIO21
    tx_pin: GPIO22
    baud_rate: 9600
    data_bits: 7
    parity: EVEN
    stop_bits: 1

Zusätzlich muss Modus D manuell aktiviert werden, indem mode_d=True in der Plattformkonfiguration gesetzt wird.

yaml
# Modus D aktivieren
iec62056:
  mode_d: True

Prüfsummenfehler

log
[E][iec62056.component:504]: BCC-Verifizierung fehlgeschlagen. Erwartet 0x6b, erhalten 0x14

Dieser Fehler deutet auf Übertragungsprobleme hin.

In der Regel ist die Übertragungsgeschwindigkeit zu hoch. Eine Reduzierung der maximalen Baudrate sollte helfen.

yaml
iec62056:
  baud_rate_max : 4800

Zähleridentifikation empfangen, aber keine Übertragung

log
[D][iec62056.component:174]: Zähleridentifikation: '/XXX6\2YYYYYYY'
[D][iec62056.component:252]: Der Zähler zeigt Modus E an, der nicht unterstützt wird. Versuch, Modus C zu verwenden. Dies funktioniert für Zähler, die sowohl Modus E als auch C unterstützen.
[E][iec62056.component:268]: Keine Übertragung vom Zähler.

Die Zähleridentifikationszeichenfolge wird erfolgreich empfangen, aber es erfolgt keine Datenübertragung. Zusätzlich zeigt das Protokoll eine Nachricht an, die besagt: "Der Zähler zeigt Modus E an."

Der Zähler arbeitet ausschließlich im Modus E, den PiggyMeter nicht unterstützt. Folglich versucht die Software, den Zähler auf Modus C umzustellen, aber dieser Versuch schlägt fehl.

Wenn ein Zähler sowohl Modus E als auch C unterstützt, sollte das System korrekt funktionieren.