Da es hier vor kurzem endlich moderne Stromzähler gab und das Thema wahrscheinlich eher länderspezifisch ist, schreibe ich diesen Artikel zur Abwechslung auf Deutsch.
Idee
Die Idee stammt von volkszaehler.org, wobei deren Lösung nicht so ganz zu meiner Hausautomatisierung passt. Aber auch bei esphome.io gibt es alles an Software was man braucht.
Material
Der von mir gebaute Lesekopf kommt mit sehr wenigen Bauteilen aus:
- Infrarot-Fototransisor (z.B. SFH309, BPW40)
- Widerstand 1k
- Microcontroller D1 mini ESP32 (ein ESP8266 könnte es auch tun aber da der ESP32 nicht viel mehr kostet setze ich keine ESP8266 mehr ein)
- Ring-Magnet (25x6x13, z.B. hier)
- USB-Kabel und Netzteil
- 3D-gedrucktes Gehäuse (Lesekopf, Deckel, Freecad-Zeichnung)
Aufbau
Als Signaleingang habe ich GPIO27 gewählt – weil er bei meinem ESP32 direkt neben dem Masse-Pin liegt. Diesen Pin verbinde ich per 1k Widerstand mit dem 3.3V Pin (der interne PullUp Widerstand funktioniert nicht).
Beim Fototransistor auf die richtige Polung achten:
- Emitter (langes Bein) – auf Masse
- Collector (kurzes Bein) – auf den Signaleingang. Das ist keine Fotodiode – von daher auf die Polung achten!
Zu beachten ist noch dass die LED bei dem bei mir verbauten Stromzähler nur schwach leuchet – dh. der Fototransistor muss genau positioniert werden. Dabei hilft der 3D-gedruckte Halter.
Einbau
Der Lesekopf wird mit mit den Löchern auf die Positionierungshilfen gesetzt, der Magnet haftet dann an einer Metallplatte um den Sensor herum. Anschliessen und fertig.
Software
Da bei mir zuhause Home Assistant im Einsatz ist, bietet sich für den ESP32 ESPHome als Software an. Bei volkszaehler.org gibts noch mehr Software zur Auswahl – im Prinzip ist eine serielle Schnittstelle zu lesen und die Daten im Obis format zu dekodieren. ESPHome bringt entsprechende Funktionen schon mit. Meine Konfiguration für ESPHome sieht so aus:
uart:
rx_pin: GPIO27
baud_rate: 9600
sml:
id: mysml
sensor:
- platform: sml
name: "Total energy"
sml_id: mysml
obis_code: "1-0:1.8.0"
unit_of_measurement: kWh
accuracy_decimals: 1
device_class: energy
state_class: total_increasing
filters:
- multiply: 0.0001
- platform: sml
name: "Current power"
sml_id: mysml
obis_code: "1-0:16.7.0"
unit_of_measurement: W
device_class: power
state_class: measurement
on_value:
then:
- switch.turn_on: blueled
switch:
- platform: gpio
pin: GPIO2
id: blueled
name: "$uroom Status LED"
restore_mode: ALWAYS_OFF
on_turn_on:
- delay: 500ms
- switch.turn_off: blueled
Wie man sieht, liefert mein Zähler nur zwei Werte (eigentlich liefert er vier, aber Seriennummer und Typbezeichnung sind nicht sehr interessant).
Update 2022-08-29: ESPHome
Ich wollte eine Möglichkeit haben am Sensor zu sehen ob gültige Werte empfangen werden ohne immer den Laptop dabei zu haben. Dafür nutze ich die kleine blaue LED auf dem ESP32, sobald ein gültiger Wert empfangen wird blinkt sie kurz auf.
Update 2022-08-29: Meßwerte
Meßstellenbetreiber Syna hat mir mitgeteilt dass der Zähler nur einen reduzierten Datensatz ausgibt (siehe auch Config oben). Schade, aber nicht zu ändern (ja, ich könnte einen anderen Meßstellenbetreiber beauftragen). Gründe haben sie leider nicht genannt.
Update 2022-10-01: Lesekopf
Nach ca. 3 Wochen bekam ich keine Daten mehr. Alles hin und her justiere half nichts. Zuerst dachte ich der Zähler ist defekt, aber mit einer alten Digigalkamera konnte ich die Infrarot-LED im Sekundentakt blinken sehen. Also war wohl mein Setup mit dem Fototransistor auf einmal nicht mehr empfindlich genug. Im Fotovoltaik-Forum fand ich einen Hinweis auf einen Fertigen lesekopf, schnell via Ebay bestellt und es tut wieder.
Verarbeitung der Meßwerte
Ich nutze hier HomeAssistant und Grafana. Viel kann man mit den zwei Messwerten natürlich nicht visualisieren:
Moin, ich habe das gleiche setup aus Zähler und Lesekopf. Leider bekomme ich gar keine Daten gelesen mit meinem Lesekopf. (Ich logge momentan alles direkt, also versuche noch nichtmal es zu dekodieren. Leider kann ich garnichts auslesen im Moment).
– Ist es bei dir egal wierum du du Lesekopf auf den Stromzähler hälst? (Kabel oben, Kabel unten)? Funktioniert der in jeder Position.
– Ich habe leider keine alte Digicam, kannst du mit deinem Handy was sehen? Wie häufig sollte das Gerät senden, wie lange musst du warten bis was kommt?
– Hast du noch einen Tip, etwas was vorher nicht auf Anhieb geklappt hat?
Sonst fällt mir nix ein….