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:
Hier ist der 32-stellige Code nicht sofort erforderlich.
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