WiFi Batteriemonitor

Vorab ein paar wichtige Hinweise die sie unbedingt beachten sollten.

Auf der Suche im Internet nach einem Batteriemonitor für Gleichspannungen bin ich auf den PZME-017 gestoßen. Die Firma Peacefair ist bekannt für diverse kostengünstige Batteriemonitore mit LCD-Anzeige wie den PZEM-015.

Abb: PZEM-017 (100A Version, mit Shunt und USB-RS485-Adapter)

Abb: PZEM-015 (300A Version als reine Display-Variante)

Der PZEM-017 hat folgende Merkmale:

  • Spannungsmessung 0…300V DC
  • Strommessung: 10A, 50A, 100A, 200A, 300A (ab 50A über externen Shunt)
  • Anzeige der aktuellen Leistung in Watt
  • Energieanzeige in kWh für aktuellen Tag, Vortag und Gesamtverbrauchsanzeige
  • Modbus RTU-Schnittstelle (RS485, 9600Bd, 8N2, Binär-Datenübertragung)
  • Unterstützte Modbus-Befehle:
    • 0x03 Lesen Speicher-Register
    • 0x04 Lesen Eingangs-Register
    • 0x06 Schreiben Einzelregister
    • 0x41 Kalibrierung
    • 0x42 Reset Energiemessung
  • 7 Geräte am Modbus benutzbar über einstellbare ID 1…7, ID 0 Broadcast
  • USB-RS485-Adapter (CH341)

Der PZEM-017 hat im Gegensatz zum PZEM-015 kein Display und überträgt die Messdaten über den Modbus. Das Modbusprotokoll ist offengelegt und es gibt einige Implementierungen mit einem Arduino. Beispielhaft sei hier die Webseite Solarduino genannt. Dort wird jedoch ein TTL-RS485-Adapter zur Anbindung an den Arduino verwendet. Im Bereich der Home-Automation gibt es Implementierungen mit einem Wemos D1 mini (ESP8266) mit Tasmota-Firmware und einer Daten-Anbindung über WiFi. Die ist jedoch als Batteriemonitor auf einem Boot nicht gut benutzbar, da man noch eine externe Spannungsversorgung von 5V für den Wemos D1 mini benötigt.

Die Tasmota-Firmware bringt schon alle wichtigen Schnittstellen mit, die man benötigt, um einen Boots-Batteriemonitor bauen zu können:

  • Unterstützt alle PZEM-Module mit Modbus-Schnittstelle über TTL-Signale mit ausgelöteten RS485-Chip (U5)
  • Unterstützt Temperatur 1-Wire-Module wie den DS18B20
  • Webkonfiguration
  • Anzeige der Messdaten über Webseite

Nach etwas Reengineering der Elektronik konnte ich die Schaltung so modifizieren, dass sie keine zusätzliche 5V-Versorgung benötigt und mit nur wenigen Bauelementen auskommt wie:

  • Wemos D1 mini mit Tasmota-Firmware
  • 1k Widerstand
  • 4K7 Widerstand
  • 7 Verbindungskabeln
  • DS18B20 Temperatursensor

und ein eigenständiger Boots-Batteriemonitor entstanden ist der folgendes kann:

  • Eingangsspannung 10…38V
  • Genauigkeit der Spannungsmessung: 0,01V
  • Strommessung: 10A, 50A, 100A, 200A, 300A (ab 50A über externen Shunt)
  • Genauigkeit der Strommessung: 50mA
  • Anzeige der aktuellen Leistung in Watt
  • Energieanzeige in kWh für aktuellen Tag, Vortag und Gesamtverbrauchsanzeige (nicht Power off resistent bei kompletter Abschaltung, Details siehe hier)
  • Rücksetzbare Energiezähler
  • Konfiguration und Anzeige der Messdaten über Webseite
  • Temperaturmessung: 1…3 DS18B20 für Batterie, Ladegerät und Wechselrichter (parallel betrieben am 1-Wire-Bus)
  • Eigenverbrauch: 16mA (ohne WiFi-Aktivität), 60mA (mit Wifi-Datenverkehr, wenn verbunden)
  • Reduzierter Stromverbrauch mit nur 1,0mA, wenn der Wemos D1 mini abgeschaltet wird (siehe hier)

Schaltungs-Modifikation

 IC U5 auslöten (MAX485)

Der IC U5 wird nicht benötigt, da wir nicht den Modbus benutzen und die seriellen TTL-Datensignale (3,3V) direkt mit dem Wemos D1 mini verbinden. Am einfachsten geht das Auslöten mit einer Heißluft-Entlötstation. Wer die nicht zur Verfügung hat, kann jeden Pin des IC einzeln mit dem Lötkolben erhitzen und mit einer Nadel vorsichtig nach oben biegen. Man muss aber darauf achten, dass der Pin nicht zu lange erhitzt wird, da sich sonst die darunter befindliche Leiterbahn von der Platine ablöst. Das muss unbedingt vermieden werden, da wir die Pads noch zum Anlöten der Kabel benötigen. Es ist auch wichtig sich zu merken wie U5 eingelötet war, da die Kabel nach den Pin-Nummern nach Tabelle 1 angelötet werden.

Abb: Pin-Nummern

Abb: Position von U5 (unmodifizierte Platine)

1k Widerstand einlöten

Den 1k Widerstand muss man parallel zu R15 anlöten. R15 ist der Vorwiderstand zur Ansteuerung des Optokopplers U2 (CT817C Empfangsseite). Mit dem parallel gelöteten Widerstand wird R15 auf 320 Ohm reduziert, so dass man mit einem 3,3V-TTL-Signal die LED des Optokopplers vom Wemos D1 mini aus ansteuern kann.

Abb: 1k Widerstand

4K7 Widerstand und Brücke einlöten

Der 4k7 Widerstand dient als Pullup-Widerstand für den 1Wire-Bus. Er wird an die Pads des fehlenden Widerstandes R19 gelötet. Zusätzlich wird eine kleine Brücke von R19 zu R17 gelötet wie im Bild zu sehen ist. Damit wird der Widerstand mit 3,3V verbunden.

Abb: 4k7 Widerstand mit Brücke

3,3V Versorgungsspannung an die Modbus-Ausgangsschaltung anlöten

Da die Modbus-Ausgangsschaltung elektrisch isoliert über die Optokoppler von der Messschaltung betrieben wird, benötigt man in der Original-Schaltung eine externe Versorgungsspannung von 5V. Diese wird über die Modbus-Anschlüsse eingespeist. In unserem Fall benötigen wir aber keine elektrische Isolierung, da wir die Daten per WiFi übertragen und betreiben den Rest der Schaltung mit der gleichen 3,3V-Versorgungsspannung wie die Messschaltung. Zur Einspeisung benötigen wir ein schwarzes Kabel von Z2 zu U1 Pin 3 und ein rotes Kabel von Plus E1 nach C7.

Die Optokoppler machen eigentlich damit keinen Sinn mehr. Wir benötigen sie aber trotzdem, weil die Signale vom Mikrocontroller U3 invertiert sind und wir sie nicht direkt verwenden können.

Abb: Versorgungsleitungen

Wemos D1 mini einlöten

Die Anschlüsse des Wemos D1 mini werden an die freien Pads von U5 folgendermaßen angelötet:

Kabelfarbe Von Wemos D1 mini Nach Bedeutung
rot 3V3 U5 Pin 8 3,3V Versorgung
schwarz G U5 Pin 5 Masse
grün TX (GPIO 1) U5 Pin 1 Empfangen Modbus
grün RX (GPIO 3) U5 Pin 4 Senden Mosbus
gelb D1 (GPIO 5) R19 unteres Pad 1-Wire Datensignal

Tab.1: Kabelbelegungen

Abb: Pinbelegung Wemos D1 mini

Abb: Kabel am Wemos D1 mini

Abb: Belegung der Kabel an U5

Tasmota Firmware flashen

Bevor die Tsmota-Firmware geflasht wird, muss folgendes unbedingt beachtet werden:

Hinweis! Der Wemos D1 mini wird in unserer modifizierten Schaltung nicht mit der 5V-Versorgung betrieben, sondern mit 3,3V direkt aus der Messschaltung versorgt. Wenn der Wemos D1 mini über die USB-Verbindung mit 5V versorgt wird, dann muss der Batteriemonitor von der 12V-Versorgung und vom Shunt getrennt sein. Anderenfalls erfolgt eine doppelte Einspeisung und der Wemos D1 mini oder der PC können beschädigt werden. Es müssen also immer alle 4 Kabel von den Messanschlüssen getrennt sein, wenn man mit dem USB-Kabel arbeitet.

Die Tasmota Firmware kann in der aktuellen Version hier herunter geladen werden: http://ota.tasmota.com/tasmota/release/ Die Firmware gibt es in verschiedenen Sprachversionen. Das File tasmota.bin wäre eine gute Wahl für eine englischsprachige Firmware. Wer mehr über Tasmota wissen will, kann diese Webseite besuchen: https://www.tasmota.info Dort findet man ausführliche Informationen zu unterstützter Hardware und zum Flashen .

Das Flashen der Firmware erfolgt am einfachsten mit der Software Tasmotizer die es für verschiedene Betriebssysteme gibt. Am besten funktioniert das mit  der Windows-Variante.

Beim Flashen über das USB-Kabel dürfen wir nicht vergessen das Häkchen bei „Self-resetting device“ zu setzen. So wird der Wemos D1 mini automatisch in den Programmiermodus versetzt und nach dem flashen automatisch resetet.

Abb: Einstellungen Tasmotizer

Tasmota-Konfiguration

Die Tasmota Firmware ist universell gehalten und unterstützt einen Vielzahl an Geräten. Mit der Konfiguration wird die Firmware an die spezielle Hardware angepasst. Nach dem flashen startet der Wemos D1 mini mit einem eigenen AccessPoint der unter der SSID tasmota_xxxxxx zu erreichen ist. Ein Passwort für den Login in das WiFi-Netzwerk wird nicht benötigt. Unter der IP-Adresse 192.168.4.1 kann mit einem Webbrowser die Startseite geöffnet werden. Unter Configuration werden die jeweiligen Einstellungen wie in den nachfolgenden Bildern vorgenommen.

Abb: Configure WiFi: SSID, Password und Hostname eintragen

Abb: Configure Tamplate: Based on Generic(18) auswählen, Name PZEM-017 vergeben und GPIOs zuweisen

Abb: Configure Module: Module type PZEM-017 (0) auswählen

Abb: Configure Other: Device Name Battery Monitor vergeben

Damit ist die Konfiguration abgeschlossen und wir sehen die Messwerte auf der Startseite des Batteriemonitors.

Abb: Startseite des Batteriemonitors

Sicherer Einbau in das Gehäuse

Der Wemos D1 mini kann im selben Gehäuse des Batteriemonitors untergebracht werden. Dazu habe ich den Wemos D1 mini in eine kleine Zip-Tüte gepackt. So können keine Kurzschlüsse mit der übrigen Schaltung entstehen und alles ist sicher verpackt. Man könnte die Isolierung natürlich auch mit Klebeband vornehmen. Mit der Zip-Tüte ist es aber komfortabler, da man den Wemos Di mini für spätere Softwareänderungen wieder entnehmen kann.

Abb: Isolation des Wemos D1 mini in einer Zip-Tüte

Abb: Geschlossenes Gehäuse

Anschluss des Temperatursensors

Der DS18B20 Temperatursensor kann an den Anschlüssen des RS485-Busses folgendermaßen angeschlossen werden:

Anschluss RS485 Port Neue Funktion DS18B20
5V 3,3V nicht belegt
B 3,3V rot
A 1-Wire gelb
GND GND schwarz

Tab: Anschlussbelegung Temperatursensor DS18B20

Abb: Testschaltung mit Shunt, Lastwiderstand und Temperatursensor äquivalent zum Schaltplan auf der Rückseite des Batteriemonitors

Abb: Schaltung

Weitergehende Informationen

Separater Micro-USB Port

Der separate Micro USB Port an der Seite des Batteriemonitors dient der Stromversorgung, wenn die Batteriespannung unter 7V sinken sollte. Dann kann mit einem separaten USB-Kabel einen Fremdeinspeisung erfolgen. Wie in der Dokumentation vermerkt, ist das aber sehr gefährlich, wenn Batteriespannung größer als 7V sein sollte. Dann kann nämlich über die Einspeisung von einem PC oder einer Powerbank die einspeisenden Geräte zerstört werden, weil die höhere Spannung dann an den einspeisenden Geräten mit maximalem Strom der Batterie anliegt. Daher ist es nicht ratsam diesen Micro-USB-Port zu benutzen. Es ist einfach zu gefährlich.

1-Wire Port

Am 1-Wire Port können bis zu 3 Temperatursensoren parallel angeschlossen werden. Die Sensoren können z.B. die Temperatur der Batterie, des Ladgerätes, des Solarreglers oder des Wechselrichters benutzt werden. Jede andere Anwendung wäre aber auch denkbar. Die Tasmota-Firmware erkennt die zusätzlichen Temperatursensoren automatisch und zeigt die Temperaturwerte unter den Werten des Batteriemontors an. Die Zuordnung der Sensoren zu den IDs muss durch testen der Sensoren herausgefunden werden.

Spannungsversorgung

Bei Battriespannungen kleiner 10V funktioniert der WemosD1 mini nicht mehr ordnungsgemäß. Speziell beim Anschalten mit Spannungen unter 10V bleibt der Wemos D1 mini hängen. Überspannungen oberhalb von 40V sind möglich, sollten jedoch nicht all zu lange anliegen, da die Spannungsversorgung sich deutlich aufheizt.

Strommessung

Die Strommessung beim PZEM-017 weist für einen 100A-Shunt einen Offset von 0,05A auf und verfälscht damit das Zählen der Energiemenge. Es können nur positive Messströme verarbeitet werden. Negative Ströme durch Ladegeräte sind erlaubt, werden jedoch nicht in der Energiemessung berücksichtigt.

Nachträgliche Änderung des Shunt-Wertes

Bei Auslieferung des PZEM-017 ist in der Firmware der korrekte Shunt-Wert eingetragen. Wer andere Shunt-Werte benutzen möchte kann dies vor dem Umbau der Schaltung mit Hilfe der Modbus-Befehle umprogrammieren. Es ist aber zu beachten, dass die Shunts für 75mV ausgelegt sein müssen und nur die Shunt-Werte für die Ströme 50A, 100A 200A und 300A unterstützt werden. Die Umschaltung auf andere Shunt-Werte erfolgt ausschließlich durch Software. Intern wird lediglich eine andere Umrechnung der am Shunt gemessenen Spannung vorgenommen. Damit ist die Messgenauigkeit abhängig vom verwendeten Shunt. Die Messwerte für Shunts für kleinere Ströme sind entsprechend genauer und für höhere Ströme ungenauer.

Shunt-Wert einstellen:

01 06 00 03 00 00 79 CA 100A
01 06 00 03 00 01 B8 0A 50A
01 06 00 03 00 02 F8 0B 200A
01 06 00 03 00 03 39 CB 300A
01 06 00 03 00 04 78 09 10A (interner Shunt)

01 – ID
06 – Parameter schreiben
00 03 – Register-Nr.
00 00 – Shunt Wert (00 00 – 100A)
79 CA – Checksumme

Antwort:

01 06 00 03 00 00 79 CA 100A
01 06 00 03 00 01 B8 0A 50A
01 06 00 03 00 02 F8 0B 200A
01 06 00 03 00 03 39 CB 300A
01 06 00 03 00 04 78 09 10A (interner Shunt)

01 – ID
06 – Parameter schreiben
00 03 – Register-Nr.
00 00 – Shunt Wert (00 00 – 100A)
79 CA – Checksumme

Energiemessung

Die Energiemessung ist eine Messung von Spannung und Strom über der Zeit. Es wird das Produkt aus Spannung, Strom und Zeitintervall gebildet und nachfolgende Werte aufaddiert. Ein Peukertfaktor wird bei der Messung nicht berücksichtigt. Es handelt sich um eine reine Energiemengenmessung.

Kalibrierung

Messungen am PZEM-017 mit einem 100A-Shunt zeigten, dass der Batteriemonitor präzise Messfunktionen aufweist. Lediglich ein Spannungsoffset von +0.01V und ein Stromoffset von +0,05A konnten als Fehler festgestellt werden. Für typische Anwendungen ist das völlig ausreichend. Bei Versionen mit 200A- und 300A-Shunt muss mit größeren Fehlern gerechnet werden, da die Messauflösung sinkt. Eine Kalibrierung direkt am Gerät über Potis kann nicht durchgeführt werden und muss extern mit einer speziellen Software von  Peacefair erfolgen. Zur Kalibrierung benötigt man eine stabile und präzise 30V Versorgung und eine sehr genaue 10A Stromquelle. Tests mit einer selbst durchgeführten Nachkalibrieung brachten keine besseren Ergebnisse als die Werkskalibrierung.

Messwertspeicherung

Alle ermittelten Messwerte gehen nach dem kompletten ausschalten der Versorgungsspannung verloren und die Werte der Energiemessung werden auf Null gesetzt. Wer das vermeiden möchte, der muss die Messschaltung weiterhin mit der Batteriespannung versorgen. Die reine Stromaufnahme der Messschaltung beträgt nur 1mA an 12V. Wer also weiterhin die Energiewerte erhalten möchte darf also nur den Wemos Di mini abschalten und muss die Messschaltung weiter versorgt lassen. Damit reduziert sich der Stromverbrauch von 70mA auf nur noch 1mA. Weiter Details siehe auch im Kapitel Stromverbrauch reduzieren.

Reset der Zählerwerte

Die Zählerwerte können nicht auf der Hauptseit des Batteriemonitors über einen Taste rückgesetzt werden. Dazu ist ein kleiner Umweg über die Console notwendig. Dazu wird der Befehl EnergyReset 0 in die Console eingegeben und mit Enter bestätigt. Bei neueren Versionen lautet der Befehl zum Rücksetzen:

EnergyTotal 0

EnergyToday 0

EnergyYesterday 0

Nachkommastellen für Spannungswerte anzeigen lassen

Standardmäßig zeigt die Tasmota-Firmware nur die Spannung ohne Nachkommastellen an. Bis zu zwei Nachkommastellen können angezeigt werden, wenn man in der Console folgenden Befehl eingibt:

VoltRes 2

Setzen der korrekten Systemzeit

Der Wemos D1 mini bezieht die aktuelle Urzeit aus dem Internet über einen NTP-Server. Die korrekte Uhrzeit für Deutschland kann über die Console mit Timezone 99 eingestellt werden. Jede andere Zeitzone kann mit Timezone -13…+13 stundenweise als Offset eingestellt werden. Für den Fall, dass der Battriemonitor nicht am Internet hängt aber eine aktuelle Urzeit von einem NTP-Server aus dem eigenen Netz beziehen möchte, ist es möglich mehrere NTP-Server neu zu definieren. Dazu werden folgende Befehle nacheinander benötigt:

NtpServer 0 (löscht die NTP-Einstellungen, auf Leerzeichen nach NtpServer achten!)

NtpServer1 ptbtime1.ptb.de (setzt NTP-Server 1)

NtpServer2 ptbtime3.ptb.de (setzt NTP-Server 2)

NtpServer2 ptbtime3.ptb.de (setzt NTP-Server 3)

Nähere Infos zu allen Tasmota-Kommandos kann man hier finden: https://tasmota.github.io/docs/Commands/

Messwerte in fremde Webseiten einbinden

Die Messwerte des Batteriemonitors können auch als formatierte Daten ausgeben werden. Dazu verbindet man sich per HTTP mit dem Batteriemonitor

http://192.168.4.1?m=1

und erhält dann folgende Antwort

{t}{s}Voltage{m}0.00 V{e}{s}Current{m}0.000 A{e}{s}Power{m}0 W{e}{s}Energy Today{m}0.000 kWh{e}{s}Energy Yesterday{m}0.000 kWh{e}{s}Energy Total{m}0.000 kWh{e

Wer diese Daten in fremden Webseiten abrufen möchte muss CORS (Cross Origin Resource Sharing) in der Tasmota-Firmware freigeben. Dies macht man mit folgendem Befehl über die Console:

CORS *

Damit können dann beliebige Webseiten die Daten fremd abrufen. Wer die Zugriffe etwas eingeschränkter benutzen möchte kann auch folgendes Kommando benutzen:

CORS http://my.webside.com

Ein kleines Beispiel ist hier zu finden: Demo_PZEM-017.zip

Abb: Einbindung in eigene HTML-Seiten

Messwerte in SignalK integrieren

Die Messwerte lassen sich auch in SignalK einbinden und können dann über das Instrumeneten Panel angezeigt werden. Wie die Konfiguration im Detail abläuft ist hier beschrieben:

https://open-boat-projects.org/de/wifi-batteriemonitor-in-signalk-integrieren/

Abb: Messdaten im Instrumenten Panel

Stromverbrauch reduzieren

Der Stromverbrauch des Batteriemonitors kann recht deutlich auf 1,0 mA an 12 V reduziert werden, wenn man den Wemos D1 mini über einen kleinen Schalter (rotes Kabel 3,3V) abschaltbar macht. Die originale Messschaltung läuft dann im abgeschalteten Zustand weiter und zählt den Stromverbrauch. Lediglich eine Datenübertragung und Anzeige der Messdaten ist dann nicht mehr möglich. Nach dem Zuschalten der Versorgungsspannung werden wieder alle Daten übertragen und korrekt angezeigt. Das ist ganz hilfreich bei Abwesenheit am Boot, um die Batterie nicht zu entladen.

[zurück]

Abb: Einbauposition für den Ein/Aus-Schalter

Messung der Verbrauchsdaten des Wechselstrom-Landanschlusses

Wer auch die Verbrauchsdaten des Wechselstrom-Landanschlusses messen möchte kann dies mit dem Sonoff Pow Power Monitoring Switch mit der Tasmopta-Firmware machen. Über das Modul kann auch der Landanschluss zu und abgeschaltet werden. Die neuere Variante ist der Sonoff Pow R2. Sie hat einen größeren Funktionsumfang und kann mehr Messwerte anzeigen sowie auf Grenzwerte reagieren. Bei diesen beiden Geräten ist bereits ein ESP8266 eingebaut der lediglich mit der Tasmota-Firmware betrieben wird. Eine Modifikation der elektronischen Schaltung ist nicht notwendig wie beim Batteriemonitor. Der Sonoff Pow R2 ist daher eine gute Ergänzung zum Batteriemonitor.

Abb: Sonoff Pow (R2)