Hallo zusammen,
nachdem Anfang dieser Heizperdiode mal wieder ein Problem mit meiner Tecalor THZ 304 (SOL) aufgetreten ist (es ging nur entweder Warmwasser oder Heizung) und wilde Temperaturen im Vorlauf gemeldet wurden (> 200°C), habe ich mich etwas mit der Überwachung der Heizung beschäftigt. Einen alten Rapserry Pi2 hatte ich noch rumliegen, für 3 Euro ein passendens USB Kabel besorgt und losgelegt. Soweit so gut - die Anbindung klappt, Daten/Logs werden geschrieben. Auch habe ich schon erste Graphen / Plots mit FHEM selber erstellt. Um das ganze aber ein bisschen "moderner" zu gestalten, wollte ich nun auf einem anderen System (seperater Server mit Ubuntu) Grafana installieren. Nach etwas Recherche habe ich für mich entschieden, dass ich das Modul "93-DBLog" dazu brauche, um auf eine (neu erstellte) MySQL DB (bzw. MariaDB) die Daten "rüberzuschaufeln". Grundsätzlich hat das erstmal auch nach ein paar Schwierigkeiten geklappt (bei Datenbanken kenne ich mich "null" aus), allerdings scheitere ich jetzt bei der Einrichtung von Grafana. Dabei sind mit ein paar Dinge aufgefallen, die ich nicht verstehe bzw. nicht weiß, ob ich das richtig gemacht habe.
Als Anleitung habe ich den Artikel hier verwendet: https://wiki.fhem.de/wiki/DbLog
Zunächst mal zur Darstellung des möglichen Problems bzw. wo ich jetzt hänge ein Auszug aus dem eigentlichen Log des Gerätes und was dann entsprechend in der Datenbank steht:
Original-Logfile - Mythz-2022.log:
2022-12-21_13:19:23 Mythz sGlobal: outsideTemp: 7.3 flowTemp: 28.8 returnTemp: 27.9 hotGasTemp: 28.8 dhwTemp: 46.7 flowTempHC2: 25.6 evaporatorTemp: 20.4 condenserTemp: 28.1 mixerOpen: 0 mixerClosed: 0 heatPipeValve: 0 diverterValve: 0 dhwPump: 0 heatingCircuitPump: 1 solarPump: 0 compressor: 0 boosterStage3: 0 boosterStage2: 0 boosterStage1: 0 highPressureSensor: 0 lowPressureSensor: 0 evaporatorIceMonitor: 0 signalAnode: 0 evuRelease: 1 ovenFireplace: 0 STB: 0 outputVentilatorPower: 30 inputVentilatorPower: 32 mainVentilatorPower: 0 outputVentilatorSpeed: 40 inputVentilatorSpeed: 42 mainVentilatorSpeed: 0 outside_tempFiltered: 6.9 relHumidity: 0 dewPoint: 0 P_Nd: 5.23 P_Hd: 11.05 actualPower_Qc: 0.000 actualPower_Pel: 0.000 collectorTemp: -60 insideTemp: -60 windowOpen: 0 quickAirVent: 0 flowRate: 18.33 p_HCw: 1.35 humidityAirOut: 36.24
Das ist der dazugehörige DB "Eintrag":
[size=8pt]MariaDB [fhem]> show databases;
+--------------------+
| Database |
+--------------------+
| fhem |
| information_schema |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.001 sec)
MariaDB [fhem]> use fhem;
[/size]
select * from history;:
| 2022-12-21 13:19:23 | Mythz | THZ | sGlobal: outsideTemp: 7.3 flowTemp: 28.8 returnTemp: 27.9 hotGasTemp: 28.8 dhwTemp: 46.7 flowTempHC2: 25.6 evaporatorTemp: 20.4 condenserTemp: 28.1 mixerOpen: 0 mixerClosed: 0 heatPipeValve: 0 diverterValve: 0 dhwPump: 0 heatingCircuitPump: 1 solarPump: 0 compressor: 0 boosterStage3: 0 boosterStage2: 0 boosterStage1: 0 highPressureSensor: 0 lowPressureSensor: 0 evaporatorIceMonitor: 0 signalAnode: 0 evuRelease: 1 ovenFireplace: 0 STB: 0 outputVentilatorPower: 30 inputVentilatorPower: 32 mainVentilatorPower: | sGlobal | outsideTemp: 7.3 flowTemp: 28.8 returnTemp: 27.9 hotGasTemp: 28.8 dhwTemp: 46.7 flowTempHC2: 25.6 evaporatorTemp: 20.4 condenser | |
Wenn ich jetzt die Werte/Tabelle im Grafana anschaue sehe ich folgendes (Zeitzone bitte erstmal ignorieren, im Grafana-Bild hier ist es +1h):
https://i.imgur.com/2fGNfXU.png (https://i.imgur.com/2fGNfXU.png)
Die Spalten Timestamp, Device, Type, Event, Reading, Value und Unit scheinen ja die zu sein, welche ich Initial mit dem "script" db_create_mysql.sql erstellt habe:
as69@xenia:~/fhem_workdir$ cat db_create_mysql.sql
CREATE DATABASE `fhem` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'deruser'@'%' IDENTIFIED BY 'daspasswort';
CREATE TABLE `fhem`.`history` (TIMESTAMP TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, DEVICE varchar(64), TYPE varchar(64), EVENT varchar(512), READING varchar(64), VALUE varchar(128), UNIT varchar(32));
CREATE TABLE `fhem`.`current` (TIMESTAMP TIMESTAMP, DEVICE varchar(64), TYPE varchar(64), EVENT varchar(512), READING varchar(64), VALUE varchar(128), UNIT varchar(32));
GRANT SELECT, INSERT, DELETE, UPDATE ON `fhem`.* TO 'deruser'@'%';
CREATE INDEX Search_Idx ON `fhem`.`history` (DEVICE, READING, TIMESTAMP) USING BTREE;
So, jetzt zu den Fragen: :D
- Wenn ich das create Table richtig interpretiere, lege ich damit "die Spalten" (Columns) an und mit dem jeweiligen Wert dahinter die maximale Größe, also die Limitierung auf z.b. 128 Zeichen bei Value und 512 Zeichen bei Event, korrekt? Kann man diese Größen auch ändern (nachträglich, ggf. lösche ich die DB halt nochmal und lege sie erneut an...die "Rohdaten" in den Logs sind ja noch da
- Anscheinend wird mir sowohl bei EVENT als auch bei VALUE zweimal das gleiche aus der Original Logdatei übernommen (einmal dann abgeschnitten nach 128 Zeichen und einmal abgeschnitten nach 512 Zeichen - hat jemand eine Ahnung, warum das passiert?
- Unabhängig davon frage ich mich gerade, ob es sinnvoll ist, in der DB lauter Einträge (sei es als Value oder sonstwas) solche Einträge zu haben: outsideTemp: 7.3 flowTemp: 28.8 returnTemp: 27.9 hotGasTemp: 28.8 etc..pp...
- Wie löst man das, dass man die dann tatsächlichen einzelnen Werte in jeweils eigene Spalten in der DB bekommt? BZw. woher weiß das dbLog Modul, was das Trennzeichen ist (hier wohl Leerzeichen)? Oder geht das strikt nach Anzahl der Zeichen/characters?
- Rein von der Logik her besteht ja dieser Logeintrag nicht nur aus einer Bezeichnung (Reading) mit dem dazugehörigen Wert (value) (und hier dann auch noch ohne Einheit/unit) sondern jeweils aus mehreren...also für mein Vertändnis müsste das dann Reading1+Value1, Reading2+Value2, Reading3+Value3, .... ReadinX+ValueX sein. Wie löst man sowas?
So das sind jetzt erstmal so die ersten Fragen, es kommen sicher noch weitere, aber ich glaube erst muss mal das Grundsetup funktionieren, bevor es weitergeht.
mfg
Um die Daten von FHEM in Grafana anzuzeigen nutze ich InfluxDB.
Schaue dir das Modul mal an das geht sehr schnell:
https://fhem.de/commandref_DE.html#InfluxDBLogger
zu Frage 4: man sollte dem Modulautor von Mythz so lange auf die Füße treten, bis er in sein Modul eine passende DbLog_splitFn() einbaut, die genau eine richtige Trennung der Werte übernimmt und in einzelne readings wegschreibt.
Danke erstmal euch beiden für die schnelle Antwort :)
Zitat von: xerion am 21 Dezember 2022, 14:01:29
Um die Daten von FHEM in Grafana anzuzeigen nutze ich InfluxDB.
Schaue dir das Modul mal an das geht sehr schnell:
https://fhem.de/commandref_DE.html#InfluxDBLogger
Hm, aber löse ich damit das von Betateilchen beschriebene Problem?
Ich denke, da dürfte es egal sein, mit welcher DB man die Daten dann verarbeitet - oder? Würde jetzt ungern einfach "auf Verdacht" noch eine weitere DB neben MySQL/MariaDB installieren wollen, zumal die Beispiele zu InfluxDB irgendwie auch noch dazu auf Containerisierung setzen...wäre dann noch ein weiteres Thema womit man sich intensiver beschäftigen müsste.
Zu der Datenbank kann ich dir leider nichts zu sagen da ich das selber nicht im Einsatz habe.