esp-smartmeter-netznoe
esp-smartmeter-netznoe copied to clipboard
Read Smartmeter Data and store to SD Card or publish to Graphite
ESP32 Smartmeter Logger für P1 Kundenschnittstelle
Musste mich gegen ein DIN-Hutschienengehäuse entscheiden, da in meinem Schaltschrank kein Platz mehr war...
Quellen
- DLMS Entschlüsselung: esphome-dlms-meter
- Datenlogger: ESPLogger
- Fileserver: esp32-asyncwebserver-fileupload
- weitere siehe platformio.ini
Unterstützte Smartmeter
- Kaifa MA309M
- Sagecom T210-D
Unterstützte (bekannte) Netzbetreiber
Features
- Lest alle verfügbaren OBIS Daten von der Kundenschnittstelle P1 aus
- Speichert alle Daten auf einer SD-Karte im CSV Format ab
- Daten können über einen Webserver heruntergeladen werden
- Daten können an eine Graphite-Datenbank gesendet werden
- On-board Feuchte und Temperatursensor
- TFT Display auf dem aktuelle Werte zu sehen sind, welches sich automatisch nach 2 Minuten inaktivität ausschaltet.
- WiFi Manager zum bequemen Aufsetzen
Allgemeines
Zunächst muss der Entschlüsselungscode angefordert werden. Für Niederösterreich E-Mail an: [email protected]
Information zur Kundenschnittstelle (netz-nö) sind hier zu finden: www.netz-noe.at/SmartMeter_Kundenschnittstelle_lektoriert.aspx.
Bekannte Probleme
Leistungsfaktor ist teils unglaubwürdig, siehe dazu Issue #7
Software Installation
Das Projekt wurde in PlatformIO entwickelt. Um es zu kompilieren, bitte Einstellungen in platformio.ini übernehmen.
key.h:
KEY[]: Hier muss der Entschlüsselungs-Code eingetragen werden
config.h:
SD_CARD_LOGGING: Speichern auf SD-Karte bzw. den Fileserver (de)aktivierenUSE_GRAPHITE: Daten an Graphite senden (de)aktivieren
TFT Display Setup
siehe lib/display/README.md
Optionale Einstellungen
lib/fileserver/fileserver.h:
default_httppassword = "admin": Fileserver Login Usernamedefault_httppassword = "smartmeter": Fileserver Login Passwort
Test Setup
In platformio.ini kann das Flag TEST_SETUP verwendet werden, um ohne Smartmeter die Funktionalität zu überprüfen. Dazu muss mein Schlüssel in key.h verwendet werden.
Flowchart
flowchart LR
Smartmeter -- M-Bus --> a[M-Bus UART Konverter] -- UART --> ESP32
ESP32 --> Decrypting
subgraph ESP32
Decrypting -- save -->b[SD-Karte]
c[SD-Karte] -- serve --> Webserver
Decrypting-- push --> d[Graphite Server]
end
ESP32-- display -->e[TFT Display]
Hardware
Für eine simplere Hardware Version siehe Release V0.1.
Als Folge meiner ersten Version wurde hier eine eigene PCB mit mehr Features entworfen. Diese beinhaltet folgende Kern-Komponenten:
- ESP32-S Modul (mit IPEX Konnektor für Antenne, falls schlechter Empfang)
- CP2102 USB-UART Konverter
- Micro SD-Karten Slot
- 1,77 Zoll TFT Display (160x128px)
- TSS721ADR M-Bus zu UART Konverter (Spende vom M-Bus Slave Click Board😉)
- Zweipolige Steckklemme für M-Bus Anschluss (TODO: besser wäre direkt eine RJ12 Buchse!)
- Micro USB für Versorgung bzw. Debugging
- Zwei Taster für die Menüführung
Schaltplan, BOM, Anmerkungen, Zukünftige Verbesserungen der PCB usw. befinden sich im Ordner hardware.
Für einen "simplen" Aufbau wird folgendes benötigt:
- M-Bus Slave Click Board (oder Kompatible)
- ESP32 Development Board, vorzugsweise mit SD-Karten Slot
- RJ12 Kabel bzw. (optional) RJ12 Adapter (Amazon, AliExpress) (Anmerkung: Die Gummiisolierung muss etwas getrimmt werden, damit er passt)
- (optional) Micro SD-Karten Modul
- (optional) 1,77 Zoll TFT Display (Amazon, AliExpress) (Anmerkung: Ist derzeit noch voll im Programm integriert und kann nicht einfach "auskommentiert" werden)
Verbindungen zwischen ESP und M-Bus:
| ESP32-S Modul | M-Bus Slave Board | RJ12 | Anmerkung | |
|---|---|---|---|---|
| 3.3V | 3V3 | Versorgung | ||
| GND | GND | Masse | ||
| RXD 2 | GPIO16 | TX | Empfangene Daten vom M-Bus | |
| TXD 2 | GPIO17 | RX | Optional, da wir keine Daten senden | |
| MBUS1 | 3 | M-Bus Ausgang, Polarität egal | ||
| MBUS2 | 4 | M-Bus Ausgang, Polarität egal |
Verbindungen zwischen ESP und TFT Display:
| ESP32-S Modul | TFT Display | Anmerkung | |
|---|---|---|---|
| 3.3V | VCC | Versorgung | |
| GND | GND | Masse | |
| SCK | GPIO18 | SCK | |
| MOSI | GPIO23 | SDA | |
| MISO | GPIO19 | RES | |
| GPIO25 | RS | ||
| SS | GPIO5 | CS | |
| GPIO26 | LEDA | Display an/aus (Hintergrundbeleuchtung) |
Verbindungen zwischen ESP und TFT Display:
Achtung: Ob ein SPI Micro SD-Karten Modul kompatibel mit dem TFT Display ist, weiß ich nicht. Ich verwende die SD-Karte im 4-Bit SD Bus Mode, welcher folgend aufgelistet ist.
| ESP32-S Modul | SD-Karte | Anmerkung | |
|---|---|---|---|
| 3.3V | VDD | Versorgung | |
| GND | VSS | Masse | |
| GPIO2 | SD_DATA0 | DAT0 | |
| GPIO4 | SD_DATA1 | DAT1 | |
| GPIO12 | SD_DATA2 | DAT2 | |
| GPIO13 | SD_DATA3 | CD/DAT3 | |
| GPIO15 | SD_CMD | CMD | |
| GPIO14 | SD_CLK | CLK | |
| GPIO27 | SD_CD | CD | Card detect. Erkennt, ob SD-Karte physisch vorhanden ist (Schließer). |
Showcase
Fileserver
Für jeden Monat wird eine Datei erstellt. Ein Monat hat ca. 60MB und dauert somit ungefähr 5 Minuten zum Herunterladen.
Als Übersicht wird oben der SD-Karten Status (Freier Speicher, usw.) angezeigt.

Visualisierung
Zur Visualisierung wird Grafana (und Graphite) verwendet. Beide Programme laufen auf einem NAS (Synology DS218).

TFT Display
PCB
Zukünftiges
Es gibt noch viele Ideen für weitere Entwicklungen, siehe dazu:
- Hardware: TODO's
- Software: TODO's