Anbei eine kurze Bauanleitung für einen Zähler Lesekopf mit einem Wemos D1 mini, der die Daten sekündlich mit MQTT oder UDP versendet, bzw. können die Daten im JSON Format via http ausgelesen werden.

Ein paar Info´s habe ich mir vom Volkszähler abgesehen. Dabei hat mir nicht gefallen das der Lesekopf direkt einen Raspberry benötigt. Somit war die Idee des Lesekopfes geboren der die Werte ausliest, entschlüsselt und versendet. JSON zum Auslesen kam später dazu da ein OM sich dies für seine Steuerung wünschte. Und UDP kam dadurch dazu, damit ich meinen Loxone Miniserver direkt ohne MQTT mit Werten versorgen kann, da dieser leider MQTT nicht unterstützt. Ich Visualisiere mir die Werte in Openhab und Loxone und steuere ein paar kleine Verbraucher anhand des aktuellen Leistungswertes. Da MQTT verwendet wird, kann fast jede IOT Plattform verwendet werden, wie IOBroker, Node-Red, Fhem um ein paar zu nennen.

Schaltplan:

Bestückungsplan:

  

 

Die IR-Led und den Fototransistor erst am Schluss verlöten, ist eine kleine Spielerei damit der Abstand zur Platine passt.

 

Gehäuse:

Das ganze wird in ein Gehäuse gepackt das wir aus dem 3D-Drucker erhalten.

  

 

Dateien zum Download :  Gehäuse  Deckel

die Anschlüsse muss man mit einem Messer freischneiden, je nachdem ob man den Wemos über USB oder Klemme versorgt. Durch die Vertiefung ist die Led des Wemos sichtbar.

Falls im Zählerveiler schon eine Spannung zw. 7-24V DC vorhanden ist, kann man ein großes Gehäuse drucken und zw. Wemos und Platine ein DC Power Shield dazwischen packen und als Spannungsversorgung verwenden. Gehäuse hoch für DC Power Shield

 

Firmware:

amis_ap_v16.ino.d1_mini.bin

Hier ist der 32-stellige Code nicht sofort erforderlich.

amis_ap_v17.ino.d1_mini.bin

Die Firmware mit einem Flashprogramm auf den Wemos "brennen"

Dieser macht im Anschluss einen AP mit der SSID: lesekopf Passwort: lesekopf auf.

Auf diesen verbindet man sich mit der IP: 192.168.4.1

Dabei kommt diese Seite zum Vorschein:

Konfiguration:

unter Config parametrieren wir unsere Werte:

Hostname: wie der Wemos sich im Wlan und am DHCP-Server anmeldet

AP password : Dieses ist zu setzten ansonsten verbindet sich der Wemos nicht mit dem WLAN, bitte merken, wird bei einen Firmewareupdate benötigt.

Wifi SSID: Wlan Name 

Wifi password: Wlan Passwort

Startup delay: bei jedem Neustart macht der Wemos für die angegeben Sekunden einen AP auf, danach verbindet er sich mit dem Wlan.

MQTT Server: IP oder DNS Name des MQTT Broker, wenn Feld leer bleibt ist MQTT deaktiviert.

MQTT Port: Port des MQTT Broker (normal 1883), wenn Feld leer bleibt ist MQTT deaktiviert.

MQTT user: MQTT Benutzer (falls leer, wird versucht ohne Benutzer sich zu verbinden)

MQTT password: MQTT Passwort (falls leer, wird versucht ohne Passwort sich zu verbinden)

MQTT First Topic: mit diesen gibt der Lesekopf die Werte an den Broker weiter, auch Subtopics sind möglich z.B. amis/zaehler1

Zähler Key: 32-stelliger Key den man vom Netzbetreiber erhält

UDP Server: an welche IP/DNS-Name der JSON-String übertragen wird z.B. Loxone Miniserver(wenn Feld leer, bleibt ist UDP deaktiviert)

UDP Port: an welchen Port der der JSON-String übertragen wird (wenn Feld leer, bleibt ist UDP deaktiviert)

Wenn alles eingetragen ist Apply drücken und der Wemos speichert die Daten und startet neu.

 

kurze Erläuterung:

 Unter Info werden ein paar Werte visualisiert und nach eingestellter Zeit aktualisiert (wird im Hintergrund über ajax nachgeladen):

 Diese Daten werden aber erst angezeigt wenn ein gültiges Payload vom Zähler empfangen und ausgewertet wurde. 

 Unter http://ip/json können die Daten auch ausgelesen werden (z.B. curl, Loxone)

 {"hostname":"amis","psaldo":1049,"qsaldo":-186,"wpf":7419448,"wpr":0,"wqf":28565,"wqr":2906946,"uptime":0,"freememory":35704,"time":1555071841,"zeit":"2019-04-12 14:24:01","ip":"10.0.0.141","mac":"DC:4F:22:66:0B:A1","rssi":"-61"}

psaldo: Wirkleistung +Bezug/-Lieferung(PV)

qsaldo: Blindleistung

wpf: Wirkleistungszählerstand Bezug

wpr: Wirkleistungszählerstand Lieferung (PV)

wqf: Blindleistungzählerstand Bezug

wqr: Blindleistungszählerstand Lieferung

uptime: wie viele Sekunden der Wemos schon seit den letzen Neustart läuft (wird mit der Zählerzeit berechnet)

freemomory: Freier Speicher am Wemos

time: UNIX-Timestamp (Sekunden seit 1.1.1970 00:00)

zeit: Lokale Zählerzeit

ip: IP-Adresse des Wemos

mac: MAC-Adresse des Wemos

rssi: wie gut der Wemos das WLAN erhält (-60dBm gut, -90dBm schlecht)

 

Diese und auch zusätzliche Werte werden per MQTT übertragen wie 15 Minuten Werte, da Strom 1/4h abgerechnet werden kann.

 

Pf: Wirkleistung Bezug

Pr: Wirkleistung Lieferung 

Qf: Blindleistung Bezug

Qr: Blindleistung Lieferung

Warum sind beide Richtungen aufgetrennt? z.B. auf L1 und L2 wird Energie aus dem Netz bezogen und auf L3 zurückgeliefert. Dann stehen auf beiden Richtungen Werte.

 

/15m/Wpf,Wpr,Wqf,Wqr : Zählerstände zu jeder vollen 1/4h (ermittelt durch Zählerzeit)

/15m/Pf , /15m/Pr : gemittelte Leistung der letzen 1/4h, aufgetrennt auf Bezug und Lieferung (berechnet durch Zählerstände, bei Neustart ist die erste 1/4h Fehlerhaft)

 

Auch ein Last Will sendet der Wemos im First Topic mit online/offline. Somit kann man feststellen ob der Lesekopf online ist.

Qos ist auf 0 gestellt.

 

Fehlerbehebung:

Falls es bei der Inbetriebnahme zu eigenartigen Verhalten des Lesekopfes kommt, ist es möglich, auf der Seriellen USB-Schnittstelle mitzulesen.

Ich habe dafür das Programm Serial-Debug-Assistent in Verwendung, da bei den die Baudrate 9600/8E1 eingestellt werden kann. Mit dieser Baudrate wird der Zähler ausgelesen und da der Wemos nur eine serielle Verbindung hat, muss diese eigenwillige Baudrate verwendet werden.

 

Danksagung:

Danke an meine technikbegeisterten Freunde und Om´s, die mir bei diesen Projekt behilflich waren.

 

Diese Anleitung ist noch nicht vollständig, 73 de OE5PMM