ShellyHTplus - MQTT - InfluxDB

Allgemeine Informationen zum Nachbau und zum Forum.
PV-Monitorung / PV Überwachung

Moderator: Ulrich

schappi2610
Beiträge: 16
Registriert: Mi 14. Sep 2022, 13:13

Re: ShellyHTplus - MQTT - InfluxDB

Beitrag von schappi2610 »

Hallo Ulrich,
ja, ich habe etwas gebraucht, weil ich schon länger nicht mehr richtig programmiere und PHP habe ich noch nie geschrieben. Aber inzwischen habe ich die Lösung für mein Problem gefunden. Du schriebst weiter oben ja schon, dass MQTT-Nachrichten immer als String ankommen. Darum schreibst Du es auch als String in die Datenbank. Da ich nur Meldungen auswerte, die float-Nachrichten enthalten, konnte ich mit einem unsauberen "hack" folgende Zeile in der Funktion MQTT_schreiben()

$query .= $daten['InfluxSpalte']."=\"".$daten['InfluxWert']."\"";

durch diese ersetzen:

$query .= $daten['InfluxSpalte']."=".$daten['InfluxWert'];

und in mqttDatenAuswerten musste ich natürlich noch die float-Umwandlung drin lassen:

$Daten["InfluxWert"] = floatval(substr($RawDaten["MQTTNachricht"],14,4));

Wenn man die escapeten Anführungszeichen rausnimmt, kann man einen numerischen Wert in die DB schreiben. Natürlich bekommt man dann Probleme mit Strings. Vielleicht könnte man das ja um eine "Numerik-Erkennung" erweitern. Da das aber Dateien sind, die beim nächsten Update evtl. überschrieben werden, spare ich mir das. Wenn Du magst, kann ich hier ja mal einen Vorschlag für eine Änderung posten.

Wie gesagt, ich möchte gerne Temperatur-Werte von anderen Systemen per MQTT empfangen können und da reichen mir Strings leider nicht aus.

P.S.: Hat es einen Grund, dass die Influx-Funktion nicht aus $funktionen.inc.php genutzt wird? denn geladen wird die Datei schon und für das logging wird sie auch genutzt...

Benutzeravatar
Knoote
Beiträge: 16
Registriert: Mi 9. Nov 2022, 06:52
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: ShellyHTplus - MQTT - InfluxDB

Beitrag von Knoote »

Hi,
ich habe das mal Probiert, leider kommen damit keine Daten an, hast Du das zum laufen gebracht, möchte das um aus Tasmota Daten via MQTT in die Datenbank schreiben und dann z.Bsp. den Verbrauch des Gaszählers in Euro umzurechnen, mit String geht das leider nicht, Grafana lässt mich den Wert auch nicht umwandeln.

Grüße Jürgen
Sungrow SH10RT; SBR096, 13,5 KWp

schappi2610
Beiträge: 16
Registriert: Mi 14. Sep 2022, 13:13

Re: ShellyHTplus - MQTT - InfluxDB

Beitrag von schappi2610 »

Hallo Jürgen,

ja bei mir läuft es reibungslos. Was genau funktioniert bei Dir nicht? Kommen gar keine Daten an, oder bleiben die lediglich als String formatiert in der Datenbank ? Ich habe das ganze nun in zwei Schritten aktiviert:
1. generell Daten via MQTT empfangen muss man zuerst in der user.config.php einschalten und die richtigen MQTT Topics anlegen. Diese sehen bei mir inzwischen so aus:
$MQTT = true;
$MQTTBroker = "localhost";
$MQTTPort = 1883;
$MQTTBenutzer = "";
$MQTTKennwort = "";
$MQTTSSL = false;
$MQTTTopic[6] = "solaranzeige/anzeige/1/RPI/Aussen_Temp";
$MQTTTopic[7] = "solaranzeige/anzeige/1/RPI/Aussen_Humid";

Wichtig ist, dass die Daten auch mit dem entsprechenden Topic gesendet werden. Bei mir geschieht dies durch ein Bash-Skript ungefähr so:

#!/bin/bash
device=$1
temp=$2
humid=$3
echo "device = $device" >>/var/log/mqtt.log
echo "temp = $temp" >>/var/log/mqtt.log
echo "humid = $humid" >>/var/log/mqtt.log
curl -d $temp "mqtt://192.168.2.88/solaranzeige/anzeige/1/RPI/${device}_Temp"
curl -d $humid "mqtt://192.168.2.88/solaranzeige/anzeige/1/RPI/${device}_Humid"
echo "##### $(date)" >>/var/log/mqtt.log

und dieses Bashscript wird so von einem anderen script aufgerufen:
echo "Aussen $temp $humid - fertig"
/var/lib/openwebrx/mqtt_send.sh Aussen $temp $humid

Benutzeravatar
Knoote
Beiträge: 16
Registriert: Mi 9. Nov 2022, 06:52
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: ShellyHTplus - MQTT - InfluxDB

Beitrag von Knoote »

Danke für die schnelle Antwort,

die Anpassung für MQTT hatte ich gemacht und die Daten kommen auch rein, nur eben als String, dann hatte ich deinen Hack versucht, vorher die MQTT Table gelöscht war ja schon als String da und dachte er legt die dann neu als float an es kam dann aber nichts mehr an.

Als bash Script ist ja nochmal eine Idee, nur wie füllt sich dann $1,$2........ in deinem Beispiel das müsste ja dann in der User.config.PHP geschehen wo die Daten geholt werden, bin halt kein Programmierer, versuche mich da ein wenig rein zu fuchsen :-)
Sungrow SH10RT; SBR096, 13,5 KWp

schappi2610
Beiträge: 16
Registriert: Mi 14. Sep 2022, 13:13

Re: ShellyHTplus - MQTT - InfluxDB

Beitrag von schappi2610 »

Hallo Jürgen,

ja ich bin auch kein Programmierer, auch wenn ich ein bissle programmiere - aber das sind ja die schlimmsten - mit (un)gesundem Halbwissen ;-)
Also zuerst musst Du sicherstellen, dass die Daten rein kommen. Dann hatte Ulrich geschrieben, dass er MQTT immer als String versteht, weil die MQTT Nachricht immer als String ankommt. und das hatte ich mit meinem "hack" eigentlich geändert.
Der Hack nimmt einerseits die Anführungszeichen raus, die der InfluxDB sagenb: jetzt kommt ein String und zusätzlich wandelt er die reinkommende MQTT Nachricht in eine float um. Wie Du richtig erkannt hast, muss man die Ziel-Tabelle natürlich löschen, da sonst die Spalte bereits als String existiert.

Die BASH-Befehle stellen die andere (sendende) Seite des MQTT Brokers dar, um die Daten da rein zu bekommen. Man muss schliesslich sicherstellen, dass die reinkommenden Daten auch in eine float umgewandelt werden können.

Mit einer einzelnen Zeile wie :
curl -d 22.4 "mqtt://192.168.2.88/solaranzeige/anzeige/1/RPI/Aussen_Temp"

kann man z.B. einen Temperaturwert so an das Topic im MQTT senden, dass solaranzeige.de sie mit meinen zwei Änderungen als float in die Influx schreiben können sollte.
Hilft das ?

Wer ist online?

Mitglieder in diesem Forum: CloudeBot [Bot] und 1 Gast