Smartmeter D0, SML und PRTG

Diese Seite beschreibt den nicht ganz gelungenen Versuch die Daten meiner per Tasmota ausgelesenen Smartmeter über PRTG zu erfassen.

Werte per HTTP Abfragen

Es ist zwar nett per Browser die Daten in Tasmota zu sehen aber der Nutzen ist so noch stark eingeschränkt. Interessant wird es, wenn wir die Zählerstände zyklisch abrufen und später auswerten können. Wenn Sie z.B. PRTG einsetzen, dann können Sie relativ einfach die Daten per MQTT, REST o.ä. einlesen. PRTG hat einen "Custom REST"-Sensor der mit einem Template die Zählerstände verarbeitet. Meine PRTG-Installation holt sich alle Minute die Zählerstände. Zuerst habe ich mir angeschaut, was Tasmota liefert.

Strukturiert geschrieben sehen Sie die Zählerstände.

{
   "StatusSNS":{
      "Time":"2023-11-11T20:13:55",
      "StromWP":{
         "Total":4020,
         "Total_HT":2631,
         "Total_NT":1389
      },
      "StromLi":{
         "Total_In":9469,
         "Total_Out":6434
      }
   }
}

Die JSON-Datei könnten Sie auch per PowerShell abfragen

(Invoke-RestMethod "http://192.168.178.25/cm?cmnd=Status%208").StatusSNS

Time                StromWP                         StromLi
----                -------                         -------
09.11.2023 22:30:43 @{Total_HT=3999; Total_NT=2617} @{Total_In=9417; Total_Out=6433}

PRTG REST-Sensor

Ich wollte zuerst in per dem REST-Custom Sensor nutzen, der per HTTP die Daten abrufen und mit einem Template konvertieren kann.

Allerdings wurde er auf meiner PRTG-Installation schon als nicht mehr unterstützt geführt.

Einen Grund kann ich nicht erkennen aber vielleicht ist die CPU-Last zu hoch oder die Erstellung einer Template-Datei zu anspruchsvoll für die Nutzer. Oder er wird durch den Nachfolger ersetzt, der aktuell noch BETA ist

Aber er funktioniert und daher habe ich erst einmal kein eigenes PowerShell geschrieben, sondern folgende Text-Datei unter "%PRTG-Programmverzeichnis%\Custom Sensors\rest\sml.template" im UTF-8-Format gespeichert:

{
    "prtg": {
        "description": {
            "comment": "Template to parse Tasmota SML-Data"
        },
        "result": [
            {
                "channel": "WP Total",
                "CustomUnit": "kWh",
                "value": $.StatusSNS.StromWP.Total,
                "float": "1",
                "DecimalMode":"2"
            },
            {
                "channel": "WP HT",
                "CustomUnit": "kWh",
                "value": $.StatusSNS.StromWP.Total_HT,
                "float": "1",
                "DecimalMode":"2"
            },
            {
                "channel": "WP NT",
                "CustomUnit": "kWh",
                "value": $.StatusSNS.StromWP.Total_NT,
                "float": "1",
                "DecimalMode":"2"
            },
            {
                "channel": "Licht TotalIn",
                "CustomUnit": "kWh",
                "value": $.StatusSNS.StromLi.Total_In,
                "float": "1",
                "DecimalMode":"2"
            },
            {
                "channel": "Z1 TotalOut",
                "CustomUnit": "kWh",
                "value": $.StatusSNS.StromLi.Total_Out,
                "float": "1",
                "DecimalMode":"2"
            }
        ]
    }
}

Sofern noch nicht passiert, müssen Sie nun das Tamota-Gerät in PRTG mit der IP-Adresse anlegen und dann einen "REST Custom"-Sensor addieren. Wichtig ist eigentlich nur, dass Sie beim Feld "REST Query" den Wert "/cm?cmnd=Status%208" eintragen und ihre Template auswählen.

Sollten Sie statt Daten folgende Fehlermeldung erhalten, dann haben Sie sicher im Template beim Value auch die Definition in Anführungszeichen gesetzt.

Could no evaluate channel value: can not dissolve dynamic channel WP Total: path does not exist '$'.

Danach sollten Sie aber alle Kanäle und die Werte in PRTG sehen:

Auf den ersten Blick sieht das nett aus aber es ist eigentlich wertlos, denn die absoluten Zahlen brauchen wir ja nur beim Ablesen für die Jahresabrechnung. Mich würde viel mehr die Differenz interessieren. Ich aber keinen Weg gefunden, wie ich dem "REST Custom" sagen kann, dass er die Differenz ermitteln soll.

PRTG REST Sensor V2

Anstatt gleich einen Custom Sensor in PowerShell zu schreiben, habe ich mit den Beta-Sensor "REST Custom V2" angeschaut.

Also schnell die Beta Sensoren aktiviert und addiert:

Der nächste Dialog ist dann etwas aufwändiger, da ich neben der URL für jeden Kanal dann den JSON-Pfad, die Bezeichnung, den Typ und die Einheit angeben muss. Da mein Tasmota kein HTTPS spricht, muss ich ein "http:///" davor setzen. PRTG fügt den Namen oder die IP-Adresse alleine dazwischen ein.

Aber letztlich geht es auch flüssig von der Hand und ersetzt das Erstellen einer template-Datei. Denken Sie aber daran, dass Sie nachträglich nur den JSON-Pfade aber keine Einheiten oder den Typ ändern können. Leider habe ich auch keinen Weg zum Export/Import einer aufwändigen Konfiguration gefunden.

Die Ausgaben sind nun als Delta-Werte aber dennoch nicht schön..

Das ist aber meiner Konstellation geschuldet, dass der Smartmeter nur kWh liefert und keine Wh. Da fällt dann selbst die Wärmepumpe mit 20Wh/sec scheint hier wenig zu sein, aber wenn Sie das mit 3600 multiplizieren, dann kommen unmögliche 72kWh raus. Da hat wohl der Zähler zwischen zwei Messungen im Abstand von 60 Sek um eine kWh hochgezählt. Da sieht man die Wurzeln von PRTG, denn Bandbreite wird bei Netzwerken in Byte/Sek gemessen. Für Energiemessungen ist das nicht sinnvoll. Selbst größere Messintervalle bringen nichts, solange PRTG das auf "pro Sekunde" umrechnet und ein Wechsel der Einheit auf Wh würde dann 20Wh/Sek ergeben. Wenn ein Haushalt mit vier Personen ca. 4000kWh/Jahr verbraucht, dann sind das im Mittel gerade mal 7,6 WH/min oder 0,12Wh/Sek

Eine Lösung habe ich dazu noch nicht, denn wenn ich die erweiterte Schnittstelle im Zähler aktiviere, dann bekomme ich vielleicht auch den interessanten Momentanverbrauch aber das Format kann Tasmota SML nicht parsen.

Weiterentwicklung

An der Stelle habe ich den Versuch nun abgebrochen, mit PRTG sinnvolle Daten zu ermitteln und parallel dazu mit den Daten des Wechselrichters aus PRTG-Solar zusammenzuführen. Dabei ist PRTG nur zum Teil schuld, weil es alle Differenz-Werte auf "pro Sekunde" herunter rechnet. Selbst wenn PRTG das anders könne, würde es nicht helfen, da der Smartmeter in der Standardausführung nur 1000er Wh liefert. Vielleicht gelingt es mir zukünftig auch einmal, die Momentanwerte zu ermitteln. In den OBIS-Kennzahlen sind diese schon definiert (Siehe SML - Protokoll)

Weitere Links