Herbst und Winter sind Bastelzeit - nun ist endlich ein neues Projekt im Betrieb, aber sicher noch nicht ganz fertig. Die Photovoltaikanlage hat mir einen "Smarten" Stromzähler beschert, der aber seine Messwerte für sich behalten hat. Das konnte so nicht bleiben! Die Dinger haben eine Infrarotschnittstelle, über die die Daten preisgegeben werden. Die muss man aber erst einmal aktivieren.
Schritt 1: PIN für den Zähler bei der EWE Netz (mein Netzbetreiber) beantragen - das geht mit einer formlosen Email, nach einigen Tagen kam ein Brief mit den PIN.
Schritt 2: In den Zähler einloggen und IR Schnittstelle aktivieren. Das ist je nach Zähler in der Anleitung zu finden.
Schritt 3: IR Leser bauen. Eine gute kurze Anleitung ist beim Volkszähler zu finden. Allerdings war bei mir mit einem ESP8266 ein anderer Pull-Up für den TEKT5400S Fototransistor nötig, mit 22kOhm hat es gut funktioniert. Die Wahl des Fototransistors ist entscheidend, siehe hier.
Schritt 4: Entscheidung, welches Interface genommen wird. Mein Zähler hat zwei - eine sogenannte D0 Schnittstelle (ein IR Blink je Wh) oder die volle SML Schnittstelle. Hier ein Beitrag, der das gut beleuchtet. Ich habe mich für die SML Schnittstelle entschieden. Da gibt es eine volle Library für den Mikrocontroller. Ich habe mich an einem existierenden Projekt zu SML via ESP8266 langgehangelt. Wichtig war die schrittweise Vorgehensweise - erstmal per Software Serial auslesen, was so gesendet wird (bei mir jede Sekunde ein Datagram). Wichtig ist dabei sauberes Timing. Es gelten die gleichen Prinzipien, wie bei der Hardware Serial Schnittstelle, aber wenn der ESP8266 gerade woanders unterwegs ist (z.B. WiFi), dann fehlen schnell mal ein paar Byte!
Leider fiel mir dabei schnell auf, dass sich mein Zähler nicht ganz an den SML Standard hält, es fehlte die Startsequenz und es geht manchmal am Standard vorbei (so nutzt mein Zähler für das TL Feld auch eine 0x54 für einen int24, wo im Standard nur 0x53 für int16 und 0x55 für int32 definiert sind). Das führte dann zu meiner Entscheidung, nicht mit den Bibliotheken und einem vollen Logger wie vom Volkszähler zu arbeiten, sondern einfach nur die Listeneinträge für die aktuelle Wattzahl zu finden und auszulesen. Minimalistisch, schnell, aber eben nur für diesen einen Zähler geeignet.
Den Code pappe ich demnächst mal bei GitHub rein.