Ankündigung

Einklappen
Keine Ankündigung bisher.

Grafana: Letzten Wert zeigen, falls kein Wert im Intervall

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Grafana: Letzten Wert zeigen, falls kein Wert im Intervall

    Hallo,

    ich visualisiere mit Grafana gerade unsere Fußbodenheizung/RTR.

    Glücklicherweise wird die Solltemperatur bei uns selten geändert. Das führt aber auch dazu, dass meist die Solltemperatur in den Grafanadiagrammen nicht angezeigt werden.

    Kann mir jemand sagen, wie ich in diesem Fall den letzten Wert anzeigen lassen kann?
    Beispiel:
    Ich sehe die Temperaturen von Heute. Der Sollwert wurde aber vor drei Wochen zuletzt geändert.
    Ich würde also gerne den Wert sehen, der vor drei Wochen eingestellt wurde (und somit heute noch gültig ist).

    Gruß,
    Hendrik

    #2
    Grafana kann keinen Wert anzeigen den es nicht kennt - dh muss die Query diesen Wert bereitstellen.

    Was benutzt du als DB? Influxdb? Wie beschickst du die? Evtl würde einfach zyklisches Senden der Solltemperatur helfen.

    Kommentar


      #3
      Einfach fill auf previous setzen.

      2018-11-19 12_56_00-Grafana - Netzwerk.png

      Kommentar


        #4
        Bei Influxdb zumindest geht fill(previous) nicht wenn kein Wert in der $timerange enthalten ist (es wird also nicht entweder $timerange oder last(value) gesucht). siehe: https://github.com/influxdata/influxdb/issues/6878

        Also wenn der letzte Value vor 2 Tagen geschrieben wurde und er sich 1 Tag ansehen will wird der Datensatz nicht angezeigt werden.

        Ist dagegen nur 1 Punkt in der $timerange ist das Ergebnis von fill(previous) eine Gerade so wie erwünscht.
        Zuletzt geändert von meti; 19.11.2018, 13:40.

        Kommentar


          #5
          Du hast recht. Hatte das wohl falsch in Erinnerung.
          Man könnte ggf. mit einem Continious Query arbeiten den letzten Wert einmal am Tag in die DB schreiben.
          Ist zwar ein bisschen von hinten durch die Brust ins Auge, aber könnte klappen.

          Kommentar


            #6
            Ja genau! Das wäre auch mein Vorschlag gewesen wenn zyklisches Senden von Knx Seite nicht geht (zB der Aktor das nicht unterstützt).
            Probiert hab ich's noch nicht, aber es steht auf meiner Todo

            Kommentar


              #7
              Hallo,

              danke euch Beiden.
              Was ist ein Continious Query?

              Gruß,
              Hendrik

              Kommentar


                #8
                Sowas wie ein cron Job für deine db.
                https://docs.influxdata.com/influxdb...nuous_queries/
                Vorausgesetzt du benutzt überhaupt Influx, was du uns ja noch nicht verraten hast.

                Kommentar


                  #9
                  Danke.

                  Sorry, ja, ich verwende influx.
                  Ich habe das plugin (in smarthome.py) jetzt so angepasst, dass es zyklisch sendet -bei ausgewählten Parametern.
                  Das sollte schon helfen. Deinen Link schaue ich mir an. Man weiß ja nie, wofür man es mal braucht.

                  Gruß,
                  Hendrik

                  Kommentar


                    #10
                    Du kannst das zB. verwenden um deine Daten auszudünnen. Dh du schreibst (recht oft) in ein Measurement mit kurzer Retention Policy und hast ein CQ laufen das von da in ein 2. Measurement schreibt - zb. Stündlich. Die Daten vom ersten Measurement werden dann auf stündliche Daten interpoliert (je nach Wunsch - zB. mean() ) und irgendwann verworfen. Im 2. Measurement hast du dann eine längere Retention Policy (zB. unendlich) und auf das greifst du von Grafana aus zu.
                    So hab ichs zumindest verstanden.

                    Kommentar


                      #11
                      Kann man in Grafana frei Queries schreiben oder nur zusammenklicken?
                      Ich kenne Grafana nicht, aber in InfluxDB könntest du den Sollwert in folgender Art abfragen:
                      Code:
                      select * from
                      (select [I]sollwert [/I]from [I]measurement[/I] where time >= [I]startzeit[/I]),
                      (select last([I]sollwert[/I]) as [I]sollwert[/I] from [I]measurement[/I] where time < [I]startzeit[/I])
                      Damit kriegst du alle aktuellen Sollwerte plus einen vor dem Abfragezeitraum.

                      Prinzipiell funktioniert das auch mit Aggregatsfunktionen, wird aber etwas komplizierter bzw. ist dann fraglich, über was der letzte Wert davor aggregiert werden soll. Aber da es sich in deinem Fall um Sollwerte handelt, brauchst du diese wahrscheinlich nicht.

                      Kommentar


                        #12
                        Man kann auch Statements direkt formulieren. Muss nur aufpassen beim umswitchen der Ansichten des Editors von Klick Klick auf Text und zurück.
                        ----------------------------------------------------------------------------------
                        "Der Hauptgrund für Stress ist der tägliche Kontakt mit Idioten."
                        Albert Einstein

                        Kommentar


                          #13
                          Ich hab das jetzt so gelöst:
                          SELECT last("value") FROM "°C" WHERE ("entity_id" = 'kuche_solltemeratur') GROUP BY time($__interval) fill(previous)

                          Die Lösung von smai mit den verschachtelten Select hab ich nicht zum laufen gebracht.

                          Kommentar


                            #14
                            Hello,

                            ich wollte dieses Thema nochmals aufgreifen um das jeweilige Vorhaben ebenso auch in InfluxDB 2.0 integrieren zu können.
                            Ich habe mich im Internet dazu eingelesen, jedoch funktioniert die Integration des zuständigen Befehls bei mir nicht, siehe hier
                            https://www.bookstack.cn/read/Influx...95f70e2f7d7.md

                            da logischerweise beim loggen von z.B. Temperaturwerten keine "null" Werte vorhanden sind.
                            Womit die fill() Funktion wiederrum funktioniert ist, wenn man im Vorfeld folgende rot markierte Zeile einfügt.
                            Jedo hbesitzt man dann leider den Effekt, dass die Werte im Minuten Takt angezeigt werden und nicht dann wenn eine Temperaturänderung tatsächlich vorkommt.

                            |> aggregateWindow(every: 1m, fn: mean)
                            |> fill(column: "_value", usePrevious: true)


                            Ein Beispiel Code meiner seits sieht folgendermaßen aus (der jedoch nicht zum gewünschten Effekt führt):

                            Code:
                            data = from(bucket: "Wetter")
                              |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
                              |> filter(fn: (r) =>
                                r._measurement == "Wetter" and
                                r._field == "Aussentemperatur"
                                r._field == "Hof_Temperatur"
                              )
                              |> aggregateWindow(every: 1m, fn: mean)
                              |> fill(column: "_value", usePrevious: true)
                              |> yield()

                            Hätte jemand eine Lösung zu meinem Problem?

                            Kommentar


                              #15
                              würde mich auch betreffen

                              Kommentar

                              Lädt...
                              X