ShellyHTplus - MQTT - InfluxDB
Moderator: Ulrich
-
- Beiträge: 22
- Registriert: Mi 14. Sep 2022, 13:13
ShellyHTplus - MQTT - InfluxDB
Hallo zusammen,
nachdem ich mir eine kleine Solarzelle nebst Akku für mein Projekt "Notfunk" zugelegt hatte, war schnell klar, dass ich gerne wissen möchte, was hier so an Strom passiert. Das solaranzeige.de Raspi-Image (V. 5.1.1b) war schnell installiert und auch der richtige Regler schreibt seit Monaten munter seine Daten in die DB. Jetzt habe ich "Blut geleckt" und habe gestern meinen ShellyH&Tplus überredet, an den bei solaranzeige.de mitgelieferten MQTT-Server seine Temperatur-Daten zu senden. Diese kommen auch nach wenigen Anpassungen in der InfluxDB an.
Ich habe hierzu in der Datei mqtt_prozess.php die Funktion mqttDatenAuswerten angepasst und folgende Zeilen eingefügt:
if (strpos($RawDaten["MQTTNachricht"],'"tC"') !== false) {
$Daten["InfluxSpalte"] = "Shelly-Temp1";
$Daten["InfluxWert"] = floatval(substr($RawDaten["MQTTNachricht"],14,4));
}
Dies soll den Temperatur-Wert aus der MQTT Nachricht des Shelly in die Influx Datenbank schreiben. Auch dieses funktioniert wunderbar, allerdings wird der Wert als String in der DB abgelegt und nicht als Float. Jetzt meine Fragen:
(1) Was kann ich tun, um den richtigen Datentyp abzuspeichern?
(2) Wie nimmt man so eine Änderung richtig vor, damit sie auch ein Update von solaranzeige überlebt? Muss ich auf Multi-Regler umstellen, oder sollte ich eine eigene Erweiterung schreiben? Es gibt so viele Möglichkeiten, dass mir der Überblick fehlt, wie es eigentlich gedacht ist.
Gruss, Felix
nachdem ich mir eine kleine Solarzelle nebst Akku für mein Projekt "Notfunk" zugelegt hatte, war schnell klar, dass ich gerne wissen möchte, was hier so an Strom passiert. Das solaranzeige.de Raspi-Image (V. 5.1.1b) war schnell installiert und auch der richtige Regler schreibt seit Monaten munter seine Daten in die DB. Jetzt habe ich "Blut geleckt" und habe gestern meinen ShellyH&Tplus überredet, an den bei solaranzeige.de mitgelieferten MQTT-Server seine Temperatur-Daten zu senden. Diese kommen auch nach wenigen Anpassungen in der InfluxDB an.
Ich habe hierzu in der Datei mqtt_prozess.php die Funktion mqttDatenAuswerten angepasst und folgende Zeilen eingefügt:
if (strpos($RawDaten["MQTTNachricht"],'"tC"') !== false) {
$Daten["InfluxSpalte"] = "Shelly-Temp1";
$Daten["InfluxWert"] = floatval(substr($RawDaten["MQTTNachricht"],14,4));
}
Dies soll den Temperatur-Wert aus der MQTT Nachricht des Shelly in die Influx Datenbank schreiben. Auch dieses funktioniert wunderbar, allerdings wird der Wert als String in der DB abgelegt und nicht als Float. Jetzt meine Fragen:
(1) Was kann ich tun, um den richtigen Datentyp abzuspeichern?
(2) Wie nimmt man so eine Änderung richtig vor, damit sie auch ein Update von solaranzeige überlebt? Muss ich auf Multi-Regler umstellen, oder sollte ich eine eigene Erweiterung schreiben? Es gibt so viele Möglichkeiten, dass mir der Überblick fehlt, wie es eigentlich gedacht ist.
Gruss, Felix
- Ulrich
- Administrator
- Beiträge: 6320
- Registriert: Sa 7. Nov 2015, 10:33
- Wohnort: Essen
- Hat sich bedankt: 159 Mal
- Danksagung erhalten: 933 Mal
Re: ShellyHTplus - MQTT - InfluxDB
Hallo Felix,
warum so kompliziert? Schalte MQTT aus und lese den Shelly so aus, wie hier beschrieben.
viewforum.php?f=55
warum so kompliziert? Schalte MQTT aus und lese den Shelly so aus, wie hier beschrieben.
viewforum.php?f=55
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]
Ulrich . . . . . . . . [ Admin ]
-
- Beiträge: 22
- Registriert: Mi 14. Sep 2022, 13:13
Re: ShellyHTplus - MQTT - InfluxDB
Hallo Ulrich,
danke für den Hinweis. Ich hatte bei meiner Suche viel für Shelly aber nichts für Shelly H&T gefunden...
Der o.g. Link bedeutet aber, dass ich auf Multi-Regler umstellen muss, da mit der Einstellung Regler=31 ja meine Einstellung (3) überschrieben wird...
danke für den Hinweis. Ich hatte bei meiner Suche viel für Shelly aber nichts für Shelly H&T gefunden...
Der o.g. Link bedeutet aber, dass ich auf Multi-Regler umstellen muss, da mit der Einstellung Regler=31 ja meine Einstellung (3) überschrieben wird...
- Ulrich
- Administrator
- Beiträge: 6320
- Registriert: Sa 7. Nov 2015, 10:33
- Wohnort: Essen
- Hat sich bedankt: 159 Mal
- Danksagung erhalten: 933 Mal
Re: ShellyHTplus - MQTT - InfluxDB
Ja, wenn du mehr als ein Gerät auslesen möchtest, müssen mehrere Datenbanken angelegt und die Mult-Regler-Version konfiguriert werden.
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]
Ulrich . . . . . . . . [ Admin ]
-
- Beiträge: 22
- Registriert: Mi 14. Sep 2022, 13:13
Re: ShellyHTplus - MQTT - InfluxDB
OK, Multiregler und DBs sind angelegt, aber nun stürzt mein Shelly immer ab. Da muss ich noch ein bissle forschen.
-
- Beiträge: 22
- Registriert: Mi 14. Sep 2022, 13:13
Re: ShellyHTplus - MQTT - InfluxDB
Hallo @Ulrich,
Nun steigt mein Shelly H6T plus immer aus. Er meldet gar keine Daten mehr und die Reverse Abfrage durch Dein Shelly-Modul scheint bei ihm nicht (mehr) zu funktionieren. Also habe ich einen vorhandenen RasPi genommen und ihn dazu gebracht Temp, Humidity und Pressure per MQTT zu senden. leider verarbeitet Deine MQTT-Receive funktion die Daten nur als Textstring und legt keine float Werte in der Influx DB an. Womit wir wieder beim Ausgangsproblem wären.
Kann man irgendwie konfigurieren, dass die Werte als float in die Datenbank gelangen ? Das mosquitto-log erkennt nur, dass Verbindungen eingehen. der Befehl mosquitto_sub -t solaranzeige/anzeige/# gibt aus:
19.813763407344233
55.66645140743049
945.0656859639171
und solaranzeige.log gibt aus:
04.11. 10:27:04 MQT-Array
(
[0] => solaranzeige
[1] => anzeige
[2] => 1
[3] => RPI/Temp
)
04.11. 10:27:04 MQT-Daten in die Influx Datenbank 'solaranzeige' geschrieben. Gerätenummer: 1 Spalte: RPI/Temp Wert: 19.833368793834232 RC: OK. Daten zur InfluxDB gesendet.
04.11. 10:27:04 MQT-Spalte: 'RPI_Temp' Wert: '19.833368793834232'
Am Dezimalpunkt liegt es wohl nicht, das Werte mit Komma auch als Text eingetragen werden - jedenfalls jetzt, wo die Spalte bereits existiert...
Nun steigt mein Shelly H6T plus immer aus. Er meldet gar keine Daten mehr und die Reverse Abfrage durch Dein Shelly-Modul scheint bei ihm nicht (mehr) zu funktionieren. Also habe ich einen vorhandenen RasPi genommen und ihn dazu gebracht Temp, Humidity und Pressure per MQTT zu senden. leider verarbeitet Deine MQTT-Receive funktion die Daten nur als Textstring und legt keine float Werte in der Influx DB an. Womit wir wieder beim Ausgangsproblem wären.
Kann man irgendwie konfigurieren, dass die Werte als float in die Datenbank gelangen ? Das mosquitto-log erkennt nur, dass Verbindungen eingehen. der Befehl mosquitto_sub -t solaranzeige/anzeige/# gibt aus:
19.813763407344233
55.66645140743049
945.0656859639171
und solaranzeige.log gibt aus:
04.11. 10:27:04 MQT-Array
(
[0] => solaranzeige
[1] => anzeige
[2] => 1
[3] => RPI/Temp
)
04.11. 10:27:04 MQT-Daten in die Influx Datenbank 'solaranzeige' geschrieben. Gerätenummer: 1 Spalte: RPI/Temp Wert: 19.833368793834232 RC: OK. Daten zur InfluxDB gesendet.
04.11. 10:27:04 MQT-Spalte: 'RPI_Temp' Wert: '19.833368793834232'
Am Dezimalpunkt liegt es wohl nicht, das Werte mit Komma auch als Text eingetragen werden - jedenfalls jetzt, wo die Spalte bereits existiert...
- Ulrich
- Administrator
- Beiträge: 6320
- Registriert: Sa 7. Nov 2015, 10:33
- Wohnort: Essen
- Hat sich bedankt: 159 Mal
- Danksagung erhalten: 933 Mal
Re: ShellyHTplus - MQTT - InfluxDB
Das Problem ist, dass MQTT immer nur die Daten sendet, aber nicht um welche Art von Daten es sich handelt. Deshalb kann ich nur alles als Text abspeichern, was aber Grafana in der Regel nicht stört. Wenn man genau weiß um was für Daten es sich handelt, kann man diese ja von Text in z.B. Nummerisch umwandeln.
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]
Ulrich . . . . . . . . [ Admin ]
-
- Beiträge: 22
- Registriert: Mi 14. Sep 2022, 13:13
Re: ShellyHTplus - MQTT - InfluxDB
Verstehe. Grafana meint zu mir immer "Data is missing a number field"... Ich suche mal nach einer Anzeige-Lösung.
Ich gehe mal davon aus, dass in mqtt_process.php die Funktion aufgerufen wird, die die Daten von MQTT liest und in die influx-DB schreibt.
Unten gibt es eine function mqttDatenAuswerten($RawDaten) ... Wenn ich hier die Daten als float formatiere, sollte solaranzeige die doch richtig abspeichern, oder?
leider hilft auch
$Daten["InfluxWert"] = floatval($RawDaten["MQTTNachricht"]);
nicht, den Wert in eine float umzuwandeln...
im Log kann ich es auch nicht erkennen:
04.11. 13:30:03 MQT-Daten in die Influx Datenbank 'solaranzeige' geschrieben. Gerätenummer: 1 Spalte: RPI/Pressure Wert: 941.4401100411276 RC: OK. Daten zur InfluxDB gesendet.
Ich gehe mal davon aus, dass in mqtt_process.php die Funktion aufgerufen wird, die die Daten von MQTT liest und in die influx-DB schreibt.
Unten gibt es eine function mqttDatenAuswerten($RawDaten) ... Wenn ich hier die Daten als float formatiere, sollte solaranzeige die doch richtig abspeichern, oder?
leider hilft auch
$Daten["InfluxWert"] = floatval($RawDaten["MQTTNachricht"]);
nicht, den Wert in eine float umzuwandeln...
im Log kann ich es auch nicht erkennen:
04.11. 13:30:03 MQT-Daten in die Influx Datenbank 'solaranzeige' geschrieben. Gerätenummer: 1 Spalte: RPI/Pressure Wert: 941.4401100411276 RC: OK. Daten zur InfluxDB gesendet.
-
- Beiträge: 22
- Registriert: Mi 14. Sep 2022, 13:13
Re: ShellyHTplus - MQTT - InfluxDB
Hmm.. nach einigem Suchen muss ich mal fragen: wo werden die Daten, die ich per MQTT empfange denn in die Influxdb geschrieben? in der mqtt_process.php wird die funktionen->influx_local() gar nicht aufgerufen, sondern eine eigene Funktion unten in MQTTDatenAuswerten() verwendet: MQTT_speichern().
Ist das richtig?
wenn ich dort aber einen $funktionen->log() einfüge, kommt er da scheinbar nie hin, weil nix ausgegeben wird !? So recht verstehe ich es grad nicht.
Ist das richtig?
wenn ich dort aber einen $funktionen->log() einfüge, kommt er da scheinbar nie hin, weil nix ausgegeben wird !? So recht verstehe ich es grad nicht.
- Ulrich
- Administrator
- Beiträge: 6320
- Registriert: Sa 7. Nov 2015, 10:33
- Wohnort: Essen
- Hat sich bedankt: 159 Mal
- Danksagung erhalten: 933 Mal
Re: ShellyHTplus - MQTT - InfluxDB
Die mqtt_prozess.php ist eigenständig und benutzt nicht die funktionen.inc.php
Wer PHP programmieren kann, sieht das aber sofort.
Wer PHP programmieren kann, sieht das aber sofort.
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]
Ulrich . . . . . . . . [ Admin ]
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste