NEWS
Grafana - Legendentext aus einem Datenpunkt einer Gruppe
-
Hallo, ich habe mir das Skript zum Auslesen der Fritzbox-Werte aus diesem Thread geschnappt, und ein wenig angepasst, da ich eine 6591 habe ...
https://forum.iobroker.net/topic/38443/pegelwerte-fritzbox-6490-cable-auslesen/109?_=1695053945064
Ein Kanal hat folgenden Datenpunkte:
In die influx Datenbank gehen nur die drei Datenpunkte mit den nicht ausgegrauten Zahnrädern.
Gibt es irgendeine Möglichkeit, die untenstehehende Legendenbeschriftung automatisch zu generieren?
Ich habe da ziemlich aufwändig die bereits als Datenpunkt für den Kanal im Iobroker vorhandene "Frequency" in Grafana von Hand als "Override" eingetippt
Diesen Override für "Display Name" musste ich für jeden der 30 Kanäle von Hand eintippen...
Wenn man da im Bulk eine individuelle Beschriftung aus dem Datenpunkt mit der Kanalfrequenz erzeugen könnte, würde das schon Arbeit sparen.
Hat da jemand eine Idee?
-
@martinp zeigmal den sql
-
from(bucket: "iobroker") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "javascript.0.Internet.Docsis.DS.C01.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C02.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C03.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C04.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C05.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C06.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C07.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C08.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C30.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C29.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C28.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C27.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C26.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C25.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C24.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C23.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C22.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C21.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C20.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C19.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C18.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C17.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C16.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C15.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C14.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C13.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C12.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C11.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C10.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C09.UncorrectableErrorsPerMinute") |> filter(fn: (r) => r["_field"] == "value") |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false) |> yield(name: "last")
-
-
@arteck Auch da ist es eine Konstante, die da als Feldbeschriftung gesetzt wird.
set(key: "_field", value: "Stromverbrauch in kWh")
so etwas ähnliches schwebte mir vor
set(key: "_field", value:"javascript.0.Internet.Docsis.DS.C01.Frequency" )
-
@martinp sagte in Grafana - Legendentext aus einem Datenpunkt einer Gruppe:
set(key: "_field", value:"javascript.0.Internet.Docsis.DS.C01.Frequency" )
Da die Frequenz in einem separaten Measurement vorliegt, bekommst du das so einfach nicht zusammengestrickt.
Entweder du machst ein manuelles Mapping innerhalb der Query, das würde dann schnell zusammengeschrieben so aussehen (und muss natürlich angepasst/erweitert werden):
import "strings" from(bucket: "iobroker") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "javascript.0.Internet.Docsis.DS.C01.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C02.UncorrectableErrorsPerMinute" or r["_measurement"] == "javascript.0.Internet.Docsis.DS.C03.UncorrectableErrorsPerMinute") |> filter(fn: (r) => r["_field"] == "value") |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false) |> map(fn: (r) => ({r with _measurement: if strings.substring(v: r["_measurement"], start: 32, end: 35) == "C01" then "474MHz" else if strings.substring(v: r["_measurement"], start: 32, end: 35) == "C02" then "480MHz" else if strings.substring(v: r["_measurement"], start: 32, end: 35) == "C03" then "490MHz" else "000" })) |> keep(columns: ["_time","_measurement", "_value"])
Wenn man es ganz richtig machen wollte, dann würde man per Skript/Node Red/Blockly ein eigenes Measurement "UncorrectableErrorsPerMinute" schreiben und als zusätzliches "Tag" an jeden Datensatz die Frequenz dranschreiben. Dann wäre die Query auch ganz easy und ohne das Mapping machbar. Das Wegschreiben per Influx-Adapter könnte dann entfallen. Aber ich glaube kaum, dass der Aufwand gerechtfertigt wäre.
-
@marc-berg Danke, ich glaube, dass ich dann bei der Lösung mit dem Grafana "Override" bleibe. Da ist die Tipparbeit schon erledigt
Muss mal schauen, wie sich ein Neustart der Fritzbox auswirkt. Wenn man da jedes Mal die Overrides editieren muss, damit die Frequenzen wieder stimmen (Weil die Fritzbox womöglich dann die Zuordnung Kanalnummer-Frequenz anders anlegt), ist das vielleicht auf die Dauer doch zu mühsam, und ich muss noch einmal nachdenken ...
-
@martinp sagte in Grafana - Legendentext aus einem Datenpunkt einer Gruppe:
(Weil die Fritzbox womöglich dann die Zuordnung Kanalnummer-Frequenz anders anlegt)
Na wenn das wirklich so wäre, dann kommst du um die zweite Variante nicht herum.
-
Wenn ich es nicht darauf anlege, läuft die Fritzbox Monatelang durch ...
Ich komme aber aus dem Kabelgebiet von ehemals Unitymedia. Da will Vodafone eine Harmonisierung durchführen, dass die Frequenzen in allen Kabelnetzen (Ehemals Kabel Deutschland, Unitymedia NRW, Unitymedia Hessen, Unitymedia BaWü) identisch den Nutzungen (Kabelfernsehen, Video-On-Demand, Internet usw) zugeordnet werden. Die Umstellung ist bereits im Gange, aber hier noch nicht "durch"...Danach werde ich wohl definitiv noch einmal korrigieren müssen ...
-
Die Änderung ist wohl deutlich umfangreicher ...
Hier ein bereits umgestelltes Segment
https://helpdesk.vodafonekabelforum.de/sendb/belegung-791.html
24 x DOCSIS3.0 Down Andere Frequenzen und Kanalbreiten für 2xDOCSIS 3.1 downUnd hier mein noch nicht umgestelltes Segment
https://helpdesk.vodafonekabelforum.de/sendb/belegung-731.html
30 x DOCSIS 3.0 Down 2xDOCSIS3.1 DownAnfang November soll wohl die Umstellung hier in Dortmund erfolgen ...
https://helpdesk.vodafonekabelforum.de/wiki/Umstellungstermine_bei_der_Senderumbelegung_2022_/_2023#Nordrhein-Westfalen
Hauptsache die Fritzbox kommt mit den neuen Gegebenheiten genau so gut klar, wie bisher, und der Anschluss läuft weiter Stabil...Eigentlich kann man da dann Datenpunkte für die wegfallenden sechs Kanäle löschen...