WiFi Batteriemonitor in SignalK integrieren

Vorab ein paar wichtige Hinweise die sie unbedingt beachten sollten.

Abb: WiFi Batteriemionitor

Der WiFi Batteriemonitor lässt sich in SignalK integrieren. Die Messdaten können dann im Instrumenten-Panel angezeigt werden. Zur Integration in SignalK ist ein kleiner Umweg über MQTT nötig. Da der WiFi-Batteriemonitor mit der Tasmota-Software standardmäßig auch über MQTT kommunizieren kann, benutzen wir diese Schnittstelle in Verbindung mit dem SignalK-Plugin signalk-mqtt-gw von Teppo Kurki. Grundsätzlich ist es so, dass wir keinen MQTT-Server auf dem Raspi benötigen, wenn wir das SignalK-Plugin benutzen wollen. Sollte ein MQTT-Server auf dem Raspi laufen, so müssen die Portadressen geändert werden, um keine Konflikte zu bekommen. Das SignalK-Plugin verhält sich wie ein MQTT-Server und kann die gesendeten Telegramme interpretieren, allerdings ohne Fehlerbehandlung und spezielle Transaktionsabsicherung. Nachfolgend wird gezeigt wie die Konfiguration vorgenommen werden muss.

Konfiguration WiFi Batterie-Monitor

Unter Configure MQTT werden folgende Einstellungen vorgenommen:

  • Host: IP des Raspi auf dem SignalK läuft
  • Port: 1883 (ändern, falls ein MQTT-Server auf dem Rapi laufen sollte)
  • Client: PZEM-017 (Name des Gerätes der als Source in MQTT angezeigt wird)
  • Topic: service
  • Full Topic: battmonitor/service

Username und Passwort bleiben unverändert und werden  nicht benutzt.

Abb: Configure MQTT

Dann ist noch unter Configure Other zu prüfen, ob MQTT aktiviert ist.

Abb: Configure Other

Unter Configure Logging wird die Updaterate eingestellt mit welcher die Telegramme versendet werden sollen. Dazu gibt es den Parameter Telemetry Period. Der Wert wird in Sekunden angeben. Als kleinster Wert kann 10 verwendet werden. Schnellere Datenübertragungen als 10s sind damit nicht möglich. In SignalK werden die Messdaten dann mit dieser Updaterate angezeigt.

Abb: Configure Logging

Als letzten Schritt müssen wir noch zwei spezielle Rules in die Tasmota-Firmware einfügen, die die Datentelegramme so aufbereitet, damit sie von dem SignalK-Plugin  signalk-mqtt-gw verarbeitet werden können. Rules sind Tasmota-Firmware-Erweiterungen mit denen das Verhalten von Tasmota beeinflusst werden kann. Wer mehr wissen möchte wie das funktioniert kann das hier im Detail nachlesen. Das SignalK-Plugin für MQTT erwartet immer einzelne Datenpaare je Telegramm mit einem Bezeichner und einem Messwert. Der Bezeichner entspricht dabei dem Daten-Pfad in SignalK. Die Daten-Pfade sollten nicht beliebig gewählt werden und sich an die Vorgaben für Datenpfade halten. Details findet man in der SignalK-Dokumentation im Anhang unter Appendix A und B. Beide Rules zerlegen das originale MQTT-Telegramm in 8 einzelne MQTT-Teiltelegramme wie man es auch im Logging sehen kann.

18:07:37 MQT: battmonitor/service/SENSOR = {"Time":"2021-04-18T18:07:37","ENERGY":{"TotalStartTime":"2021-04-09T17:21:15","Total":0.122,"Yesterday":0.011,"Today":0.111,"Period":0,"Power":6,"Voltage":13.03,"Current":0.470},"DS18B20-1":{"Id":"3C01D6075272","Temperature":23.0},"DS18B20-2":{"Id":"3C01D607E5E3","Temperature":23.3},"TempUnit":"C"}

Die Rule1 kümmert sich um die Weiterleitung der Temperaturwerte

Rule1
ON DS18B20#Temperature DO Var1 %value% ENDON
ON DS18B20#Temperature DO Add1 273.15 ENDON
ON DS18B20-1#Temperature DO Var2 %value% ENDON
ON DS18B20-1#Temperature DO Add2 273.15 ENDON
ON DS18B20-2#Temperature DO Var3 %value% ENDON
ON DS18B20-2#Temperature DO Add3 273.15 ENDON
ON DS18B20-3#Temperature DO Var4 %value% ENDON
ON DS18B20-3#Temperature DO Add4 273.15 ENDON
ON tele-DS18B20 DO publish vessels/self/environment/inside/DS18B20_1/temperature %Var1% ENDON
ON tele-DS18B20-1 DO publish vessels/self/environment/inside/DS18B20_1/temperature %Var2% ENDON
ON tele-DS18B20-2 DO publish vessels/self/environment/inside/DS18B20_2/temperature %Var3% ENDON
ON tele-DS18B20-3 DO publish vessels/self/environment/inside/DS18B20_3/temperature %Var4% ENDON

Dabei werden die Temperaturwerte eingelesen und in Kelvin umgerechnet, da SignalK immer Messwerte in SI-Einheiten erwartet.

Die Rule2 bereitet die elektrischen Messwerte auf.
Rule2
ON ENERGY#Power DO Var5 %value% ENDON
ON ENERGY#Voltage DO Var6 %value% ENDON
ON ENERGY#Current DO Var7 %value% ENDON
ON ENERGY#Total DO Var8 %value% ENDON
ON ENERGY#Yesterday DO Var9 %value% ENDON
ON ENERGY#Today DO Var10 %value% ENDON
ON tele-ENERGY DO publish vessels/self/electrical/batteries/service/power %Var5% ENDON
ON tele-ENERGY DO publish vessels/self/electrical/batteries/service/voltage %Var6% ENDON
ON tele-ENERGY DO publish vessels/self/electrical/batteries/service/current %Var7% ENDON
ON tele-ENERGY DO publish vessels/self/electrical/batteries/service/energytotal %Var8% ENDON
ON tele-ENERGY DO publish vessels/self/electrical/batteries/service/energyyesterday %Var9% ENDON
ON tele-ENERGY DO publish vessels/self/electrical/batteries/service/energytoday %Var10% ENDON
Die beiden Rules werden einzeln als kompletter Text-String in der Console eingegeben und mit Enter bestätigt. Anschließend müssen wir noch die Rules mit den Kommandos Rule1 ON  und Rule2 ON aktivieren. In der Console sollten dann die Zerlegung und die einzelnen Telegramme zu sehen sein.
Abb: Console mit Einzeltelegrammen zu den Messwerten
Hier noch einige wichtige Kommandos für Rules:
  • RuleX 0 – deaktiviert eine Rule
  • RuleX „ – löscht eine Rule
  • RuleX ON – aktiviert eine Rule

Konfiguration in SignalK

Auf dem Raspberry Pi sollte man zu erst prüfen, ob ein MQTT-Server wie mosquitto läuft. Das kann man einfachsten in einer Konsole mit dem Kommando top machen. Es zeigt eine Liste aller laufenden Prozesse auf dem Raspi. Sollte der MQTT-Server laufen ohne das man ihn benutzt, dann sollte man ihn mit dem Befehl sudo apt-get remove mosquitto deintsallieren. Wird er benötigt, so muss ein anderer Port als 1883 in der Konfiguration benutzt werden.

In SignalK wird das Plugin signalk-mqtt-gw unter Appstore -> Available installiert. Unter Server -> Plugin Config werden dann noch folgende Einstellungen vorgenommen.

Abb: Plugin Config in SignalK

Wenn alles richtig konfiguriert ist muss noch ein Restart von SignalK durchgeführt werden. Dann sind die Daten im Data Browser zu sehen.

Abb: SignalK Data Browser

Je nach Anzahl der angeschlossenen 1Wire-Temperatursensoren (DS18B20) werden dann noch Temperaturwerte angezeigt. Sofern auch die Datenbank InfluxDB und das Datenbankfrontend Grafana installiert sind, können umfangreiche grafische Datenauswertungen vorgenommen werden.

Abb: Messdaten im Instrument Panel von SignalK

Abb: Messdaten mit Grafana visualisiert