PRTG und Tasmota
Auf dieser Seite zeige ich, wie Sie sehr einfach die Vielzahl an "Tasmota"-kompatiblen IoT-Devices sehr einfach mit PRTG koppeln können. Das kann zuhause die 100 Sensor "Free-Version" von PRTG sein. Sie können aber damit auch einfach Serverräume, Türschlösser, Energiebedarf u.a. überwachen.
Schnittstellen
PRTG unterstütze mehrere Möglichkeiten, Statusmeldungen und numerische Werte in das System zu bringen. Auf der Seite PRTG Plattform habe ich die Zusammenhänge zwischen Server, Probe und Agent geschrienen und PRTG kann über seine Probe selbst Werte von einem erreichbaren System über unterschiedlichste Wege (RPC, WMI SNMP HTTP etc.) abfragen aber auch Werte zugesendet bekommen.
Tasmota ist eine der vielen ESP8266/ESP32 3rd Party Firmware-Optionen, um Geräte mit Chips der ESP8266 oder ESP32-Reihe mit einer "offenen" Firmware zu versehen, die unterschiedlichste Sensoren auslesen und an weitere Systeme melden kann. Primär kommt hier MQTT oder mittlerweile auch eine REST-API zum Einsatz. Wenn Sie eine Kopplung zwischen PRTG und einer Tasmota-Instanz herstellen wollen, dann gib es folgende Optionen:
-
MQTT
Tasmota kann seine Daten problemlos per MQTT an einen MQTT-Server senden.PRTG ist zwar selbst kein MQTT-Broker, so dass Sie selbst einen Browser zusätzlich betreiben müssen. PRTG kann dann aber problemlos Werte vom MQTT-Broker einlesen. Siehe PRTG und MQTT. - PRTG-Polling
Tasmota ist selbst ein Webeserver und hat auch eine HTTP/REST-API, die sie von PRTG auch regelmäßig abfragen können. Allerdings muss dann das IoT-Device permanent "eingebucht" und zumindest von der PRTG-Probe erreichbar sein. Für Batteriebetrieb eignet sich diese Option natürlich nicht. Es skaliert auch nicht so gut, weil PRTG dann immer wieder pollen muss und die IoT-Devices per IP auch erreichbar sein müssen. Ich schotte aber meine IoT-Devices z.B. durch ein eigenes WLAN mit eigenen Subnetz ab und einige Installationen nutzen noch NAT, so dass PRTG das Device gar nicht erreichen kann. - Tasmota Rules und WebSend
PRTG kann aber auch von einem Gerät per HTTP angesprochen werden. Mit den PRTG - HTTP Push-Sensoren kann ich in PRTG einen Sensor einrichten, der Daten von eine Device per HTTP erhalten knan. In Tasmota gibt es die Möglichkeit, über hinterlegte Regeln bei gewissen Eingangszuständen eine Aktion auszulösen und per "WebSend" kann ich so einen Wert direkt zum PRTG-Server senden lassen. - Eigenbau
Ich habe Anfangs überlegt, die Daten mit einer eigenen Firmware einzusammeln und dann eine PRTG-kompatible JSON-Struktur per HTTP an meinen PRTG-Server zu senden. Das wäre zumindest eine Option für bestehende Projekte, die die Daten heute schon anderweitig senden. Aber nicht jeder möchte so tief an der Hardware programmieren.
Tasmota unterstützt leider keine SNMP-Anfragen oder Traps und KNX (https://tasmota.GitHub.io/docs/KNX/) über UDP/TCP-Multicasts an Port 3671 versteht aktuell leider PRTG noch nicht. Aber gerade die "WebSend"-Funktion kann in Verbindung mit den Tasmota-Regeln sehr leistungsfähig sein.
Tasmota mit HTTPPush
Ich habe zuerst einmal den ESP8266/ESP32 mit Tasmota versorgt und ganz klassisch nach Anleitung konfiguriert.
Tätigkeiten | erledigt |
---|---|
ESP8266 besorgenDie gibt es sogar schon in Deutschland für 3-8 € pro Stück und ESP8266 aus China sogar schon unter 2€. Oder sie kaufen eines der fertigen Systeme, die sie mit Tasmota versorgen können.
|
![]() |
Sensoren anschließenWenn ich Werte an PRTG melden will, dann muss ich natürlich auch Wert erheben. Der eingebaute Temperatursensor im ESP32 wäre nur ein Beispiel und die WLAN-Empfangsstärke zu messen ist auch nicht repräsentativ. Also sie Sie sich einen Sensor aus.
Ich habe zum Test einfach einen SR04-Ultraschallsensor angeschlossen, mit dem ich die Belegung im Carport messe.
|
![]() |
Tasmota installierenSie finden im Baumarkt sogar Geräte mit einem ESP8266 aber fremden "China"-Firmware. Meist basieren Sie afu der Tuya-Plattform und können vielleicht mit Tuyaconvert ohne elektrische Kenntnisse umprogrammiert werden. Ansonsten haben einige innen entsprechende Programmieranschlüsse. Schließen Sie das Board an den PC an und am einfachsten nutzen Sie den WebInstaller mit Chrome oder Edge.
Für die meisten Sensoren können Sie direkt "Tasmota Sensors" nutzen. Ich finde es schon interessant, dass ein Browser mittlerweile mit COM-Ports umgehen und Firmware flashen kann. |
![]() |
Tasmota konfigurierenMittlerweile bietet der WebInstaller am Ende direkt die Einrichtung von WLAN an, so dass sie das System einfach integrieren können. Ansonsten startet Tasmota einen eigenen WLAN-AP mit kleinem Webserver, über den Sie die Einrichtung vornehmen können. Ich nutze dazu lieber die im WebInstaller enthaltene Console um schnell folgende Befehle abzusetzen: Sie setzen die WLAN-Konfiguration und optional einen MQTT-Host und einen SyslogHost. Passen Sie die Werte ihrer Umgebung an. Backlog SSID1 wlanssid; Password1 wlankennwort MqttHost 192.168.178.10 Backlog Loghost 192.168.178.10; LogPort 514; Syslog 2 In der Konsole sehe ich nach dem Neustart direkt, ob die WLAN-Verbindung geklappt hat und welche IP-Adresse der ESP8266 nutzt. Ich gehe dann auf die WebUI und konfiguriere die Sensoren an den angeschlossenen Ports |
![]() |
Sensoren testenNach dem Neustart sollte Tasmota die Werte der konfigurierten Sensoren auf der Weboberfläche anzeigen. Kontrollieren Sie die Werte und die Bezeichnung. Sie können auch auf der Konsole die MQTT-Meldungen sehen. Mit dem Befehl "Status 8" sehen Sie dir konfigurierten Sensoren und ihren Wert aber vor allem auch den Namen. Hier mal ein SR04 Ultraschall-Abstandssensor
Die JSON-Struktur kann ich auch aufklappen und bekomme: { "StatusSNS":{ "Time":"2022-01-07T23:37:11", "SR04":{"Distance":84.491} } } Interessant ist hier "SR4" und "Distance" |
![]() |
PRTG HTTPPush testenAls nächsten Schritt sollten Sie in PRTG einen HTTP-Push-Sensor anlegen. Das habe ich auf PRTG - HTTP Push-Sensoren beschrieben und sollte kein Problem sein. Dann nutze ich die Tasmota-Commandline, um einmal Daten zu senden: WebSend [192.168.178.91:5050] /<SensorID>?value=1.3 Beachten sie folgende Besonderheiten:
Je nach Eingabe sehen Sie in der Konsole auch die Antwort. Wenn Sie einen nicht erreichbaren Host oder Port angeben, kommt ein Fehler. Bei einer falschen SensorID aber nicht. Da die Verbindung beim ESP8266 aufgrund der eingeschränkten Leistung nur per HTTP möglich ist, kann ich mit Wireshark auf dem PRTG-Server den Request und die Antwort recht einfach finden:
Dieser Request war erfolgreich. |
|
Tasmota RegelnNun brauche ich eine Regel, die die Daten immer wieder sendet. Tasmota unterstützt bis zu drei Regelsätze und da ich "Rule1" schon mit einer MQTT-Regel belegt habe, nutze ich einfach Regelsatz2: Rule2 ON SR04#Distance DO WebSend [192.168.178.91:5050] /418C0D9B-01B1-4393-B492-B84A43FC0547?value=%value% ENDON Rule2 1 Ich sage Tasmota, dass es bei jedem Lesevorgang des Sensors SR04 den Wert von "Distance" per WebSend an die URL senden soll. Diese Aktion ist in der Konsole sichtbar.
Hier sollten Sie aber genau hinschauen, denn es kann sein, dass Tasmota den Sensor sehr oft liest und dann auch jedes Mal die Regel angetriggert wird. Wenn das der Fall ist, können Sie mit der Time-Trigger arbeiten. Passend zu den normalen Sensorintervallen von PRTG von 1 Minute oder 5 Minuten gibt es: Time#Minute startet jede Minute Time#Minute|5 startet alle 5 Minuten Entsprechend kann ich dann eine Regel bauen, die einmal pro Minute die Daten sendet: Wenn Sie dies nicht machen, sendet Tasmota alle 4-5 Sekunden ein Datenupdate an PRTG, der all diese Daten auch in der Datenbank speichert: Rule2 ON SR04#Distance DO var1 %value% ENDON ON Time#Minute DO WebSend [192.168.178.91:5050] /418C0D9B-01B1-4393-B492-B84A43FC0547?value=%var1% ENDON Rule2 1 Da ich keinen Weg gefunden haben, einen beliebigen Wert zu referenzieren, lasse ich jede Änderung in "var1" ablegen und alle Minute triggert die zweite Zeile, die den Inhalt von Var1 dann an PRTG sendet. Insgesamt hat Tasmota 16 Variablen. Nach einiger Zeit sehe ich in PRTG dann die Werte:
Wer mehrere Werte senden will, kann diese als Einzelwerte mit eigenen Regeln zu mehreren Push-Sensoren senden oder formatiert eine PRTG-tauglich JSON-Antwort. Über die in PRTG eingebauten Möglichkeiten können Sie dann ja Alarme erzeugen, Ausfälle melden etc. Achtung: SaveData 3600
|
![]() |
Das war schon der ganze Prozess
Tasmota mit MQTT
Der zweite einfache Weg ist natürlich der Einsatz eines vorhandenen MQTT-Broker, z.B. Mosquitto o.ä., an den das Tasmota-Gerät einfach den Status meldet. PRTG kann mittlerweile auch MQTT-Daten auslesen und in sein Monitoring übernehmen.
- MQTT
- PRTG und MQTT
- Everything you need to monitor MQTT and more
https://www.paessler.com/mqtt
Tasmota HTTP-API (Polling)
Tasmota kann so konfiguriert werden, dass Sie per HTTP auch Aktionen auslösen und Daten abfragen können. Insofern können Sie mit einem PRTG JSON-Sensor auch die Daten abrufen. Das geht native ohne größere Einstellungen aber hat meiner Ansicht nach folgende Einschränkungen:
- IP-Erreichbarkeit
Da PRTG die Verbindung zum IoT-Device aufbauen muss, muss es auch eine IP-Verbindung geben. Meine IoT-Geräte sind aber in der Regel nicht ungeschützt im gleichen IP-Subnetz, so dass ich mir Gedanken über Routing und Firewalls machen muss. Ich werde auch sicher nicht von einer PRTG-Instanz der Firma oder in der Cloud auf einen im Internet veröffentlichten Sensor zugreifen. - Statische IP-Adresse
In Tasmota können statische IP-Adressen konfiguriert werden aber bequemer geht es mit DHCP. Wenn ein Sensor aber einige Tage "Offline" und die Leasedauer des DHCP-Pools kürzer ist, dann bekommt das Gerät vermutlich eine neue IP-Adresse. Auch nicht elegant. - Always On
Ein ESP8266/ESP32 ist per WLAN im Netzwerk und damit PRTG ihn abfragen kann, muss er dauernd laufen. Damit scheidet dieser Weg natürlich aus, wenn es um "Batteriebetrieb" geht.
Die Nutzung eines PRTG - HTTP Push-Sensoren hat hier deutlich mehr Vorteile.
Dennoch ist der Abruf per HTTP durchaus geeignet, wen Tasmota dauernd erreichbar ist und Sie z.B. über PRTG die Intervalle bestimmen wollen. Wenn sich z.B. der Status sehr oft ändert, dann würde dies bei MQTT oder HTTPPush zusätzliche überflüssige Last erzeugen.
Technisch ist es ein HTTP-Request mit den Befehlen, die Sie ansonsten über die Console versenden würden. Über den Browser (http://<ipadresse>/cs) oder seriell können Sie die "Console" starten und dann "STATUS 0" eingeben.
Das ist auch per HTTP möglich, wobei sie das Leerzeichen im Kommando mit "%20" schreiben müssen.
PS C:> Invoke-RestMethod "http://192.168.178.25/cm?cmnd=Status%200"
Das sind natürlich viele Meldungen aber für Sensoren ist hier der StatusSNS interessant. In dem Beispiel ist das ein Stromzähler mit dem Namen "Z1", den ich dann über "Status 8" auslesen kann.
PS C:> Invoke-RestMethod "http://192.168.178.25/cm?cmnd=Status%208"
Sie können also ein Device mit der IP-Adresse des Tasmota-Systems anlegen und darunter dann einen "PRTG Manual: REST Custom v2 Sensor" anlegen. Allerdings müssen sie vorher eine Konfigurationsdatei im Verzeichnis "\Custom Sensors\rest\sml.template" des PRTG-Servers anlegen.
Wichtig: Die Parameter wie "Z1" im JSON müssen natürlich zur Definition des Zählers in Tasmota passen.
{ "prtg": { "description": { "query": "/cm?cmnd=Status%208", "comment": "Template to parse Tasmota SML-Data" }, "result": [ { "channel": "Z1 TotalIn", "CustomUnit": "kWh", "value": "$.StatusSNS.Z1.Total_In", "float": "1", "DecimalMode":"2" }, { "channel": "Z1 TotalOut", "CustomUnit": "kWh", "value": "$.StatusSNS.Z1.Total_Out", "float": "1", "DecimalMode":"2" } ] } }
Erst dann können Sie im Sensor die REST-URL "/cm?cmnd=Status%208" eintragen.
Die Konfiguration des Custom REST Sensors mit der Template-Datei ist vielleicht etwas aufwändig aber aufgrund der umfangreichen Möglichkeiten in PRTG wohl erforderlich. PRTG muss neben der reinen Zahl schon noch wissen, ob dies ein INT/FLOAT ist, die Werte absolut/differenziell bewertet werden müssen und welche Einheit dahinter steht.
Das bedeutet aber natürlich auch, dass Sie mehrere Tasmota-Sensoren mit unterschiedlicher Konfiguration über eigene Templates konfigurieren müssen.
Daher habe ich erst einmal kein eigenes PowerShell-Script zur Einbindung in PRTG entwickelt, denn auch da müsste ich ja parametrisieren.
- Commands
https://tasmota.github.io/docs/Commands/ - PRTG Manual: REST Custom v2 Sensor
https://www.paessler.com/manuals/prtg/rest_custom_v2_sensor
HTTPPoling und Zigbee, BTLE
Mittlerweile kann die Tasmota-Firmware nicht nur fest konfigurierte Sensoren verstehen, sondern auch z.B. auf eine Sonoff Zigbee Bridge Pro installiert werden. Hier sind die Sensoren dann "besonders", denn Sie erscheinen auf der Webseite und senden MQTT-Meldungen:
Zur automatischen Abfrage per HTTPS sind aber andere Optionen erforderlich. Zuerst muss ich die Liste der Geräte mit "zbstatus" abrufen und dann pro Gerät die Details mit "zbstatus3 <device>" zu ermitteln.
Das macht aber auch Sinn, da es ja doch sehr viele Zigbee-Geräte an einer Bridge geben kann.
-
Zigbee
Ein Funkstandard für Hausautomatisierung aber auch für IT-Monitoring mit Tasmota und PRTG - Tasmota Commands
https://tasmota.github.io/docs/Commands/#zigbee
Abruf über die Statusseite
Wenn Sie einfach mit einem Browser auf die Webseite des Tasmota-Device gehen, dann sehen Sie auch die ermittelten Werte. Sie werden sogar regelmäßig aktualisiert.
Dabei wird nicht die ganze Webseite neu geladen, sondern per JavaScript wird ca. alle 2,5 Sekunden die URL "http://<ipadresse>/?m=1" abgerufen und enthält einen HTML-Ausschnitt.
{t}</table>{t} <tr> <td style='width:100%;text-align:center;font-weight:bold;font-size:62px'>ON</td> </tr> <tr> </tr> </table>
Die Verarbeitung erfolgt dann im Code. (Zur Lesbarkeit umgebrochen)
x = new XMLHttpRequest(); x.onreadystatechange = ()=>{ if (x.readyState == 4 && x.status == 200) { var s = x.responseText.replace(/{t}/g, "<table style='width:100%'>") .replace(/{s}/g, "<tr><th>") .replace(/{m}/g, "</th><td style='width:20px;white-space:nowrap'>") .replace(/{e}/g, "</td></tr>"); eb('l1').innerHTML = s; clearTimeout(ft); clearTimeout(lt); lt = setTimeout(la, 2345); } } ; x.open('GET', '.?m=1' + a, true); x.send(); ft = setTimeout(la, 2e4);
Oben ist der Handler zum parsen der Rückgabe, wenn der GET mit ".?m=1" ausgelöst wurde. Theoretisch können Sie als auch diese "API" nutzen, um alle konfigurierten Dienste auszugeben und abzugreifen.
Der Weg verbietet sich aber, denn Änderungen an der Ausgabe würden ihren Code stören. Dann nutzen Sie besser die offizielle WebAPI
Weitere Links
- ESP8266
- WeMOS IoT-Device
- NodeMCU / LUA
- MQTT
- PRTG - HTTP Push-Sensoren
- ESP8266/ESP32 3rd Party Firmware
-
Zigbee
Ein Funkstandard für Hausautomatisierung aber auch für IT-Monitoring mit Tasmota und PRTG -
Nagios: check_tasmota
https://exchange.nagios.org/directory/Plug-ins/Others/check_tasmota/details - ESP8266 und ESP8285 Module - Starter Anleitung
http://stefanfrings.de/esp8266/ - Adafruit ESP8266 Temperature / Humidity Webserver
https://learn.adafruit.com/esp8266-temperature-slash-humidity-webserver - Depends on Adafruit DHT Arduino library
https://GitHub.com/adafruit/DHT-sensor-library -
Arduino SimpleServer
https://raw.GitHubUsercontent.com/wemos/D1_mini_Examples/master/examples/04.Shields/DHT_Shield/SimpleServer/SimpleServer.ino