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 PRT 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 PRTG einen Sensor betreiben, an den mein IoT-Device bei Bedarf Daten per HTTP senden kann. 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 besorgen

Die 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ßen

Wenn 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 installieren

Einige Boards haben sogar schon Tasmota installiert oder können Sie mit Tuyaconvert ohne elektrische Kenntnisse umprogrammiert werden. Einige müssen Sie seriell über den PC flashen. 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 konfigurieren

Nach dem Flashen startet Tasmota einen kleinen Webserver, über den die eine 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 testen

Nach 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 testen

Als 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:

  • Host in []-Klammern
    Ich nutze hier mal die IP-Adresse, aber wenn Tasmota auch einen DNS-Server per DHCP oder statischer Konfiguration bekommen hat, können Sie auch einen Hostnamen nutzen
  • Leerzeichen zwischen Host und URL
    Das "Space" zwischen Hostname und der URL ist korrekt!
  • <SensorID> ersetzen
    Ersetzen Sie diesen String durch die ID, welche Sie in der PRTG-Konfiguration beim Push-Sensor eingetragen haben.
  • Beliebiger Wert
    Der Wert ist eigentlich egal. Ich nutze hier eine "Gleitkommazahl", wenn PRTG legt einen Pushsensor normal mit "Integer" an und sehe ich gleich, ob ich es richtig eingestellt habe.

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 ESB8266 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 Regeln

Nun 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, das er 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 de Time-Trigger arbeiten. Passend die 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 Pushsensoren 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:
Wenn Sie automatisiert auch Regeln ändern, dann reduziert das die Lebensdauer des Flash-Speichert, wenn Tasmota per Default jede Sekunde die Konfiguration sichert. Dann wäre ein höherer Wert mit Savedata einzustellen, z.B. Ich sollte aber einstellen, dass Tasmota nicht jedes mal die Daten im Flash-Speicher hinterlegt. (Default 1 Sekunde). Einmal die Stunde kann reichen.

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.

Tasmota HTTP-API

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.

Weitere Links