Ankündigung

Einklappen
Keine Ankündigung bisher.

Chart für Windgeschwindigkeit

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

    [Codebeispiel] Chart für Windgeschwindigkeit

    Hallo zusammen,
    OH1 ,KNX,
    ich habe einen Chart wie in den Demos angelegt für die Anzeige der Windgeschwindigkeit.Der Tages max Wert wird Jedoch nicht ordentlich dargesellt .woran könnte das liegen?
    Und eine zweite Frage:Kann man die zeitliche Auflösung noch feiner gestalten.
    Screenshot-2018-5-21 HAUS.png
    Angehängte Dateien

    #2
    Zur zeitlichen Auflösung: openHAB speichert die Daten über die Persistence ab. Du musst also im Zweifel nur die Speichefrequenz von everyMinute auf every30Seconds ändern:
    Code:
    Strategies {
    everyMinute : "0 * * * * ?"
    every30Seconds : "0/30 * * * * ?"
    }
    um die Speicherhäufigkeit zu verdoppeln. Voraussetzung ist natürlich, dass die Messwerte auch häufiger rein kommen. Ob die bessere zeitliche Auflösung der Werte auch zu einer besseren zeitlichen Auflösung der Grafik führt, musst Du ausprobieren. openHAB unterstützt hier kein kleineres Zeitfenster (die zugrunde liegende Bibliothek könnte das aber sicher).

    Du musst für Tagesmaximum und Tagesminimum eine Rule haben, die die entsprechenden Werte korrigiert, sobald ein neuer Messwert eintrifft. So sieht das für meine Temperatur aus (Messwert kommt auf dem Item Temperatur, Maximum ist im Item Weather_Temp_Max und Minimum im Item Weather_Temp_Min gespeichert:
    Code:
    rule "Update max and min temperatures"
        when
            Item Temperatur changed or
            Time cron "0 0 0 * * ?"
        then
            Weather_Temp_Max.postUpdate(Temperatur.maximumSince(now.withTimeAtStartOfDay,"rrd4j").state)
            Weather_Temp_Min.postUpdate(Temperatur.minimumSince(now.withTimeAtStartOfDay,"rrd4j").state)
    end
    Die Rule löst also jedesmal aus, wenn sich der Messwert geändert hat (und um 0 Uhr)
    Dann sucht sie die Mini- und Maximaltemperatur des Temperatur Items für den aktuellen Tag aus der rrd4j Datenbank und speichert diesen Wert im entsprechenden Item. Falls das bei Dir nicht zuverlässig so funktioniert, müsste man mal forschen, warum das so ist.
    Ein Würgaround wäre, vor dem Update zu schauen, ob der gelieferte Mini-/Maximalwert unter/über dem bereits gespeicherten Wert liegt. Dann müsste man natürlich zusätzlich darauf achten, dass es um 0 Uhr trotzdem einen Reset gibt.

    Eine weitere Möglichkeit (insbesondere wegen der zeitlichen Auflösung interessant) wäre, auf Grafana zu schwenken. Meine deutsche Anleitung dazu ist leider für eine (inzwischen) sehr alte Version von Influxdb/Grafana, die unter OH2 nicht mehr unterstützt wird.
    Mit openHABian kommen Installationsroutinen für aktuelle Versionen mit.
    Ansonsten gäbe es im englischen Forum eine sehr ausführliche Anleitung, die auch beinhaltet, wie man die Graphen schön in openHAB einbettet.

    Kommentar


      #3
      Meine Rule sieht so aus:
      Code:
      rule "Update max and min Wind Geschwindigkeit Tag"
      when
          Item Weather_Wind_Geschwindigkeit changed or
          Time cron "0 0 0 * * ?" or
          System started
      then    
          postUpdate(Weather_Wind_Geschwindigkeit_Max, Weather_Wind_Geschwindigkeit.maximumSince(now.toDateMidnight).state)
          postUpdate(Weather_Wind_Geschwindigkeit_Min, Weather_Wind_Geschwindigkeit.minimumSince(now.toDateMidnight).state)
          logInfo("Weather_Wind", "Geschwindigkeit evolved of " + Weather_Wind_Geschwindigkeit.deltaSince(now.minusMinutes(2)) + " m/s.")
      end
      sind aus den Demos kopiert.
      Bei den Temperaturen läuft alles wie es soll.
      Ich benutze noch OpenHAB 1.7.1

      Kommentar


        #4
        Und die rr4dj persist dazu:
        Code:
        Strategies {
            // for rrd charts, we need a cron strategy
            everyMinute : "0 * * * * ?"
        }
        
        Items {
            Heating*,Wind*,Weather_Wind* : strategy =  everyChange, everyMinute, restoreOnStartup
        
            // let's only store temperature values in rrd
            Temperature*,Weather_Chart*,Weather_WZ_Chart*,Weather_K_Chart*,Weather_SZ_Chart*,Weather_Bad_Chart*,Weather_Wind_Chart*,Wind*,Lux_Aussen_Chart*,Lux* ,Daemmerung_Mast* :
            strategy =  everyChange, everyMinute, restoreOnStartup
        }

        Kommentar


          #5
          Du hast da aber ganz schön viel Wind zum persistieren...
          Wie sieht denn die Itemdefinition für Weather_Wind_Geschwindigkeit, Weather_Wind_Geschwindigkeit_Max und Weather_Wind_Geschwindigkeit_Min aus? (insbesondere die Group Definition).
          Vielleicht versucht openHAB, Deine Messwerte mehrfach zu persistieren, das könnte schief gehen. (Die Gruppe Wind ist sogar doppelt angegeben.)

          Ist rrd4j Default Persistence? Werden Windmesswerte auch noch anders persistiert?

          .toDateMidnight ist deprecated, das heißt, man sollte es durch eine andere Funktion ersetzen, die das gleiche bewirkt (das ist .withTimeAtStartOfDay). Vorläufig sollte das aber keine Rolle spielen (solange es in der Demo verwendet wird...)
          Ansonsten ist die Methode auf jeden Fall immer der Action vorzuziehen, also Item.postUpdate(Value) bzw. Item.sendCommand(Value) anstatt postUpdate(Item, Value) bzw. sendCommand(Item, Value).

          Kommentar


            #6
            Ist nicht alles Wind
            Hab jetzt die rr4d angepasst:
            Code:
              Strategies {
                // for rrd charts, we need a cron strategy
                everyMinute : "0 * * * * ?"
                every10Second : "0/10 * * * * ?"
            }
            
            Items {
                Heating*: strategy =  everyChange, everyMinute, restoreOnStartup
            
                // let's only store temperature values in rrd
                Temperature*:strategy = everyChange, everyMinute, restoreOnStartup
            
                Weather_WZ_Chart*,Weather_K_Chart*,Weather_SZ_Chart*,Weather_Bad_Chart*,Lux_Aussen_Chart*,Lux*,Daemmerung_Mast* : strategy = everyChange, everyMinute, restoreOnStartup
            
                Weather_Wind_Chart*,Wind*,Weather_Chart* : strategy = every10Second, everyChange, everyMinute, restoreOnStartup
            }
            Hier die Items.
            Code:
            Group Weather_Wind_Chart                                                    (Weather_Wind)
            Number Weather_Wind_Geschwindigkeit       "Wind          [%.1f m/s]"         <wind>        (Weather_Wind_Chart)                     {knx="<0/0/9"}
            Number Weather_Wind_Geschwindigkeit_Max   "Tages Maximum [%.1f m/s]"         <wind>        (Weather_Wind_Chart)
            Number Weather_Wind_Geschwindigkeit_Min   "Tages Minimum [%.1f m/s]"         <wind>        (Weather_Wind_Chart)
            Number Weather_Wind_Chart_Period          "Chart Period"
            DateTime Weather_Wind_LastUpdate          "Letztes Update [%1$ta %1$tR]"     <clock>        (Weather_Wind_Chart)
            String Weather_Wind_                ""                                              (Weather_Wind_Chart)
            Ich weiss nur nicht wo alle halbe Stunde die negativen Ausschläge herkommen.Hab ich in keinem anderen Chart.
            Ist RRD vielleicht zu träge für Wind Daten,die ändern sich ja alle paar sekunden stark?
            Zuletzt geändert von alexbn; 21.05.2018, 18:08.

            Kommentar


              #7
              Und ja rrd4j sollte default sein.Habe diesbezüglich in der .cfg nichts geändert.

              Kommentar


                #8
                Eigentlich sollte es keine Rolle spielen, wie viele Messwerte rein kommen, das Minimum und das Maximum für einen Zeitraum kann sich ja nicht in die entgegengesetzte Richtung ändern.

                Kommentar


                  #9
                  Hallöchen in die Runde,

                  ist es denn auch möglich die entsprechende Zeitangabe zu den Min und Max Werten mit anzeigen zu lassen ?

                  Kommentar


                    #10
                    Man müsste halt den Zeitstempel in ein extra Item speichern. Den Zeitstempel bekommst Du genauso wie den state als Eigenschaft der Abfrage. Leider ist mir gerade das Schlüsselwort entfallen und ich sitze nicht an einem Rechner mit geeigneter Software, um das mal schnell nachzuschauen. Wenn Du VSCode mit openHAB Plugin verwendest, sollte das aber zu finden sein. Ansonsten kann ich heute Abend noch mal nachschauen...

                    Kommentar

                    Lädt...
                    X