Hallo Leute,
Nach erfolgreicher Tüfftelei (herzlichsten Dank an alle im Thread Landis + Gyr E450 über VZ Logger auslesen) möchte ich hier alle Details sharen wie man den Smartmeter "richtig" ausliest... mit der Hoffnung das es jemand anderen hilft.
Vorwort
Mein neuer Smartmeter Landis+Gyr E450 wird vom Netz Burgenland (ehem. BEWAG) in Österreich betrieben. Das ist schon mal wichtig, da anscheinend mindestens der Datenaufbau (also welches Byte was bedeutet) von Netzbetreiber zu Netzbetreiber verschieden ist. Weiters kann auch die serielle Konfiguration (Baudrate, Anzahl Stoppbits, etc.) anders sein.
Aktivierung
Zu allererst muss man beim Netzbetreiber anrufen und die "Kundenschnittstelle" aktivieren lassen. Ich wurde gefragt ob ich
- die optische oder kabelgebundene (RJ12 bzw. MBus) Schnittstelle nutzen möchte => RJ12
- die Daten verschlüsselt oder unverschlüsselt haben möchte => unverschlüsselt
Anschluss
Die Verkabelung kann mittels einem 6-Pin RJ12 Steckers oder auch, so habs ich gemacht, mit einem stinknormalen Telefonkabel/RJ11 (4-Pins) gemacht werden. Es werden nämlich nur die beiden mittleren Pins benötigt.
Also Pin 3 (MBus A => plus) und Pin 4 (MBus B => minus)... wenn man also auf die Buchse des Zählers schaut und von links mit 1 zu zählen beginnt.
Überprüfung der Aktivierung
Ich musste warten bis die BEWAG es aktiviert hat. Prüfen ob das Ganze aktiv ist geht einfach: Am Pin3+4 einfach ein DMM (digitales Multimeter) anschließen. Es muss 25V DC anzeigen und alle 5 Sekunden muss die Spannung kurzfristig einbrechen/flackern => da kommen die Daten.
Datenaufbau und -ausgabe
Leider scheinen selbst die Angaben der Netzbetreiber bzgl. Datenaufbau nicht zu stimmen. Was aber für NetzBurgenland stimmt ist, dass die Daten alle 5 Sekunden ohne zutun/Anfragen gepushed werden. Man braucht also nur drauf horchen...
Welche Werte man rauskriegt und welches Byte was bedeutet ist am Besten in der super Excel von cybermailer ersichtlich (siehe Anhang L&G_E450_xlsx.zip) die ich Dank gertschi81 gefunden hab.
Details zur Hardwareauswahl
Mein Ziel war es die Daten mittels Arduino auszulesen. Dieser hat einen seriellen Eingang der aber nur TTL Spannungen versteht. Darum brauchte ich einen Pegelwandler...
Wichtig zu verstehen: Die Zähler und Dokumente reden zwar von MBus überall, aber MBus wird nur auf Layer 1 (ISO/OSI Protokoll) verwendet! Dies heisst, dass nur die Spannungen MBus sind. Die typische Master/Slave Aufmachung etc. wird von den Netzbetribern nicht verwendet!
Wie oben schon erwähnt ist es eigentlich ganz einfach: Der Zähler schießt die Daten alle 5 Sekunden raus und die Spannungen für 0 und 1 entsprechen der MBus Spezifkation.
Eingesetzte Hardware
Ich verwende die Arudino MKR Reihe (MKR ZERO bzw. MKR WIFI 1010).
Als Pegelwandler habe ich aktuell diesen hier erfolgreich getestet: TSS721 Module Board M-BUS To TTL with RX TX Indicator STM32 Development Board
Einsetzen (ungetestet) möchte ich aber diesen kleinen: TTL to MBUS, Serial to MBUS Slave Module, Instead of TSS721A, Signal Isolation!
Verkabelung
Verkabeln ist dann einfach:
E450-Pin3 <=> Wandler linke Seite: MBus-A
E450-Pin4 <=> Wandler linke Seite: MBus-B
MKR Vcc <=> Wandler rechte Seite: Vcc/Vin
MKR Gnd <=> Wandler rechte Seite: Gnd
MKR Tx <=> Wandler rechte Seite: Rx
MRK Rx <=> Wandler rechte Seite: Tx
Software
Fehlt "nur" mehr die Programmierung. Hab den unteren Sourcecode recht gut dokumentiert und dieser sollte somit selbsterklärend sein. Am meisten Zeit hab ich verbracht die richtige Berechnung des CRC Checksum herauszufinden.
Das Programm ist nun sehr robust, verzeiht viele Ausnahmefälle und stellt sicher, dass nur korrekte Daten ausgegeben/verarbeitet werden.
Wichtigstes Detail: Die Daten vom NetzBurgenland kommen mit 2400Baud 8E1 (8 Datenbits, even parity, 1 stoppbit) daher (siehe Sourcezeile 192).
Quellcode siehe next post!
Ich glaub das wars...
Bei Fragen/Unklarheiten: Einfach fragen
Soko