Grafana und komprimierte Datenpunkte

Das Langzeitarchiv für HomeMatic

Moderator: Co-Administratoren

MoosHam
Beiträge: 10
Registriert: 27.08.2019, 09:45
Hat sich bedankt: 4 Mal
Danksagung erhalten: 3 Mal

Grafana und komprimierte Datenpunkte

Beitrag von MoosHam » 04.11.2019, 17:35

Moin zusammen,

nutze jetzt seit einiger Zeit CCU-Historian mit Grafana auf einen Raspi 3 in Verbindung mit einer CCU3. Läuft alles super, echt ein tolles Werkzeug! Vielen Dank nochmals an Mathias für das tolle Teil!

Nun bin ich über ein Problem gestolpert und frage mich, ob es eine einfachere Lösung dafür gibt, als das was ich mir überlegt habe:
Ich nutze die Datenkompression von CCU-Historian um die Datenbank klein zu halten. Dies führt allerdings dazu, dass bei Daten, die sich selten ändern (wie etwa Solltemperaturen) nur wenige Einträge in der Datenbank vorhanden sind. In Grafana führt das dazu, dass teilweise, je nach X-Achse, keine oder nur ein Datenpunkt angezeigt wird. Oft fehlen links und rechts Einträge. Im Diagramm soll in solchen Fällen einfach der letzte Wert durchgezogen werden. Im Anhang ein einfache Beispiel:
ScrShotTempGraf.JPG
ScrShotTempGraf.JPG (24.31 KiB) 3421 mal betrachtet
Ich habe das jetzt dadurch gelöst, dass ich insgesamt 3 SQL SELECTS per UNION verbinde um die fehlenden Werte zu holen.

Geht das auch einfacher?

Danke,
MoosHam

Mathias
Beiträge: 1796
Registriert: 03.11.2010, 10:25
System: CCU
Wohnort: Aachen
Hat sich bedankt: 58 Mal
Danksagung erhalten: 262 Mal
Kontaktdaten:

Re: Grafana und komprimierte Datenpunkte

Beitrag von Mathias » 04.11.2019, 21:31

MoosHam hat geschrieben:
04.11.2019, 17:35
Ich habe das jetzt dadurch gelöst, dass ich insgesamt 3 SQL SELECTS per UNION verbinde um die fehlenden Werte zu holen.
Zurzeit geht es nicht einfacher. Ich habe aber bereits eine Idee, wie das verbessert werden kann (s.a. GitHub).

Gruß
Mathias

Slice
Beiträge: 1203
Registriert: 03.02.2016, 14:44
System: Alternative CCU (auf Basis OCCU)
Wohnort: irgendwo aus Süd BaWü
Hat sich bedankt: 141 Mal
Danksagung erhalten: 85 Mal

Re: Grafana und komprimierte Datenpunkte

Beitrag von Slice » 07.11.2019, 21:49

Hallo,

da ich auch auf Grafana umgestellt und die gleichen Probleme habe würde ich eine solches Feature gut heißen.
Allerdings habe ich das auch bei länger nicht gemeldeten Statusänderungen ohne diese Komprimierung.
Ich komprimiere die DB immer von Hand irgendwann, so einmal im Jahr oder so.
Auch hier wird mir dann im generierten Diagramm keine Linien angezeigt. Ich denke das kommt daher das in der DB keine geänderten Werte gespeichert werden?! Ich sehe das regelmäßig an der Schließerkontaktschnittstelle für meine Heizung.
Oder ich mach da evtl bei mir was falsch in der Abfrage der Daten?!
Kann gerne mal ein Beispiel posten.

Grüße,
Slice
----------------------------------------------------------------------------------------
Raspi3B+ Bullseye mit HB-RF-ETH und RPI-RF-MOD auf piVCCU-FW 3.75.7 / Addons: CuxD v2.11 - E-Mail v1.7.6 - Patcher v1.0.0 - Philips Hue v3.2.5 - Programme drucken v2.6 - Scriptparser v1.11 - XML-API v2.3
Geräte: 141 / Kanäle: 791 / Datenpunkte: 6080 / SysVars: 275 / Programme: 161 / Regadom IDs: 14010 / 48 CUxD-Kanäle in 3 CUxD-Geräten
Intel NUC i3-5010U @ 2,1 GHz mit 16 GB RAM & 512 GB SSD für Proxmox mit ioBroker VM und CCU-Historian/InfluxDB/Grafana VM
----------------------------------------------------------------------------------------
Projekte im Forum: HomeHub v4.1 / Fritzbox-Anruferliste für HomeHub
----------------------------------------------------------------------------------------

MoosHam
Beiträge: 10
Registriert: 27.08.2019, 09:45
Hat sich bedankt: 4 Mal
Danksagung erhalten: 3 Mal

Re: Grafana und komprimierte Datenpunkte

Beitrag von MoosHam » 07.11.2019, 22:31

Hi Slice,

also ich habe das so gelöst, dass ich 3 Selects mit UNION Verbinde:

Code: Alles auswählen

(select  ts_to_unix(ts) as time,  value as SollSchlaf from D_HMIP_RF_00000000000000_1_SET_POINT_TEMPERATURE
where  ts >= unix_to_ts($__unixEpochFrom()) and ts < unix_to_ts($__unixEpochTo())
union
(select  $__unixEpochFrom() as time,   value as SollSchlaf from D_HMIP_RF_00000000000000_1_SET_POINT_TEMPERATURE
where ts = (select max(ts) from D_HMIP_RF_00000000000000_1_SET_POINT_TEMPERATURE where ts <= unix_to_ts($__unixEpochFrom())) )
union
(select $__unixEpochTo() as time,  value as SollSchlaf from D_HMIP_RF_00000000000000_1_SET_POINT_TEMPERATURE
where  ts = (select max(ts) from D_HMIP_RF_00000000000000_1_SET_POINT_TEMPERATURE where ts <= unix_to_ts($__unixEpochTo())) )
)order by time
Die erste SELECT wählt ganz normal die Daten,
Die zweite SELECT wählt den Wert für den linken Rand, indem es den Wert für den letzten TimeStamp der <= des linken Rands des Diagrams ist
Die dritte SELECT wählt den Wert für den rechten Rand indem es den Wert für den letzten TimeStamp der <= des rechten Rands des Diagrams ist

Durch die "$__unixEpochFrom() as time" / "$__unixEpochTo() as time" Selects, werden diese werte genau auf die grenzen des Diagrams gelegt.

Das sollte eigentlich auch für Deinen Fall gut funktionieren. Musst natürlich an Deine Datenpunkte anpassen, habe hier einen Fake-Wert genutzt (D_HMIP_RF_00000000000000_1_SET_POINT_TEMPERATURE)

gruß,
MoosHam

Slice
Beiträge: 1203
Registriert: 03.02.2016, 14:44
System: Alternative CCU (auf Basis OCCU)
Wohnort: irgendwo aus Süd BaWü
Hat sich bedankt: 141 Mal
Danksagung erhalten: 85 Mal

Re: Grafana und komprimierte Datenpunkte

Beitrag von Slice » 09.11.2019, 14:34

Hallo MoosHam,

danke für diesen Tip bzw. Code,damit habe ich es nun auch hinbekommen.
Leider bin ich echt nicht fit in solchen SQL Abfragen.
Werde das nun bei mir mit den Geräten/SVs entsprechend umsetzten.

Grüße,
Slice
----------------------------------------------------------------------------------------
Raspi3B+ Bullseye mit HB-RF-ETH und RPI-RF-MOD auf piVCCU-FW 3.75.7 / Addons: CuxD v2.11 - E-Mail v1.7.6 - Patcher v1.0.0 - Philips Hue v3.2.5 - Programme drucken v2.6 - Scriptparser v1.11 - XML-API v2.3
Geräte: 141 / Kanäle: 791 / Datenpunkte: 6080 / SysVars: 275 / Programme: 161 / Regadom IDs: 14010 / 48 CUxD-Kanäle in 3 CUxD-Geräten
Intel NUC i3-5010U @ 2,1 GHz mit 16 GB RAM & 512 GB SSD für Proxmox mit ioBroker VM und CCU-Historian/InfluxDB/Grafana VM
----------------------------------------------------------------------------------------
Projekte im Forum: HomeHub v4.1 / Fritzbox-Anruferliste für HomeHub
----------------------------------------------------------------------------------------

MoosHam
Beiträge: 10
Registriert: 27.08.2019, 09:45
Hat sich bedankt: 4 Mal
Danksagung erhalten: 3 Mal

Re: Grafana und komprimierte Datenpunkte

Beitrag von MoosHam » 11.11.2019, 20:45

Freut mich, dass ich helfen konnte!

Benutzeravatar
roe1974
Beiträge: 746
Registriert: 17.10.2017, 16:15
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wien
Hat sich bedankt: 52 Mal
Danksagung erhalten: 13 Mal

Re: Grafana und komprimierte Datenpunkte

Beitrag von roe1974 » 23.12.2019, 12:02

Hallo @MoosHam

Deine Abfrage funktioniert perfekt .. DANKE !!!!
Eine Frage noch ... in der speziellen Datenreihe die ich Abfrage liegen die Wwerte zwischen 0 und 99 % ... ab und zu kann sie aber auch -1 sein.....
Wie kann ich diesen "-1" excluden sodass mir der Graph hier nicht ins Negative fährt ..... Hast eine Idee ?

lg RIchard

MoosHam
Beiträge: 10
Registriert: 27.08.2019, 09:45
Hat sich bedankt: 4 Mal
Danksagung erhalten: 3 Mal

Re: Grafana und komprimierte Datenpunkte

Beitrag von MoosHam » 31.12.2019, 17:07

Hallo Richard,

das sollte recht einfach dadurch gehen, dass Du an die WHERE Bedingungen einfach ein

AND value >= 0

einfügst, also etwa so:

Code: Alles auswählen

(select  ts_to_unix(ts) as time,  value as SollSchlaf from D_HMIP_RF_00000000000000_1_SET_POINT_TEMPERATURE
where  ts >= unix_to_ts($__unixEpochFrom()) and ts < unix_to_ts($__unixEpochTo()) and value >= 0
union
(select  $__unixEpochFrom() as time,   value as SollSchlaf from D_HMIP_RF_00000000000000_1_SET_POINT_TEMPERATURE
where ts = (select max(ts) from D_HMIP_RF_00000000000000_1_SET_POINT_TEMPERATURE where ts <= unix_to_ts($__unixEpochFrom()) and value >= 0 ) )
union
(select $__unixEpochTo() as time,  value as SollSchlaf from D_HMIP_RF_00000000000000_1_SET_POINT_TEMPERATURE
where  ts = (select max(ts) from D_HMIP_RF_00000000000000_1_SET_POINT_TEMPERATURE where ts <= unix_to_ts($__unixEpochTo()) and value >= 0 ) )
)order by time
Damit sollten alle Werte kleiner als 0 ignoriert werden. Bei den beiden per Union angehängten Abfragen musst DU etwas aufpassen, wo Du die zusätzliche Bedingung anhängst (achte auf die Klammern).

Ich hoffe es funktioniert?

Guten Rutsch!

MoosHam

Benutzeravatar
roe1974
Beiträge: 746
Registriert: 17.10.2017, 16:15
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wien
Hat sich bedankt: 52 Mal
Danksagung erhalten: 13 Mal

Re: Grafana und komprimierte Datenpunkte

Beitrag von roe1974 » 02.01.2020, 09:20

ja geht perfekt !!!
DANKE !
Prosit Neujahr !!!

lg RIchard

Benutzeravatar
roe1974
Beiträge: 746
Registriert: 17.10.2017, 16:15
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wien
Hat sich bedankt: 52 Mal
Danksagung erhalten: 13 Mal

Re: Grafana und komprimierte Datenpunkte

Beitrag von roe1974 » 27.01.2020, 20:51

Hallo @MoosHam

Danke...passt bis jetzt alles perfekt ;-) ... bin ein bisschen am "fine tuning"
Gibts eine Möglichkeit in der Abfrage die Kurven zu "glätten" ... damit die Grafiken nicht so viele Spitzen haben ?

lg Richard

Antworten

Zurück zu „CCU-Historian“