Ankündigung

Einklappen
Keine Ankündigung bisher.

Plot.series mit SmarthomeNG Database plugin

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

    Plot.series mit SmarthomeNG Database plugin

    Hallo zusammen,

    mir ist folgendes aufgefallen: Wenn ich ein Widget plot.series im Browser geöffnet habe und ein neuer Wert ins Database plugin geschrieben wird, wird dieser Wert nicht im Plot hinzugefügt. Letzteres geschieht nur wenn die Seite manuell neu geladen wird.

    Wisst ihr, wie hier genau der Update Mechanismus aktuell aussieht?

    Viele Grüße
    Zuletzt geändert von aschwith; 25.07.2020, 19:02.

    #2
    Das webscket Plugin macht ein periodisches Update der Datenserien. Das wird nicht durch einen neuen Wert in der Datenbank getriggert.
    Viele Grüße
    Martin

    There is no cloud. It's only someone else's computer.

    Kommentar


      #3
      ... und das Update-Intervall je Serie hängt vom dargestellten Zeitraum (duaration_max - duration_min) und der Anzahl der Werte (count) ab.

      Kommentar


        #4
        Danke Euch für die Infos. Dann ist das Verhalten ja korrekt.

        Kommentar


          #5
          @wvhn:
          1) Wie berechnet sich denn genau das Updateintervall aus duration_max/min und count?
          2) Wenn ein Zoom Modus für plot.period definiert ist, wird dann die Zoom Auflösung für das Berechnen des Updateintervalls herangezogen?

          Kommentar


            #6
            Zitat von aschwith Beitrag anzeigen
            Wie berechnet sich denn genau das Updateintervall aus duration_max/min und count?
            Das geschieht im shNG database plugin (Zeile 563ff):
            Code:
            if count != 0:
                 step = int((iend - istart) / int(count))
            else:
                 step = iend - istart
            Ist also wie ein ganz normales Abtastintervall berechnet.

            In Zeile 591 wird dann der nächste Update-Zeitpunkt gesetzt:
            Code:
            'update': self.shtime.now() + datetime.timedelta(seconds=int(logs['step'] / 1000))
            Dieser Zeitpunkt wird dann in der run()-Methode des websocket-Plugins an den Scheduler übergeben.
            Zuletzt geändert von wvhn; 26.07.2020, 15:56. Grund: nachgebessert

            Kommentar


              #7
              Zitat von aschwith Beitrag anzeigen
              Wenn ein Zoom Modus für plot.period definiert ist, wird dann die Zoom Auflösung für das Berechnen des Updateintervalls herangezogen?
              smartVISU fragt die Serie nicht neu an, wenn gezoomt wird. D.h. die Parameter bleiben so im widget.buffer stehen, wie sie ursprünglich angefragt wurden und so wird 'step' auch nicht geändert.

              Zuletzt geändert von wvhn; 26.07.2020, 15:55. Grund: #6 und #7 ergänzt.

              Kommentar


                #8
                wvhn, danke Dir. Also in meinem Beispiel:

                Code:
                istart = '2w'
                iend = 'now'
                count = 100 (default)
                müsste ein Updateintervall von:

                Code:
                14* 24 * 3600s / 100 / 1000 =  12 Sekunden
                ergeben. Mein plot.period wird aber nicht alle 12 Sekunden aktualisiert. Habt ihr Eurer Updateintervall mal überprüft?

                VG

                Kommentar


                  #9
                  Nein, der gesamte Mechanismus wurde aus smarthome.py (sqlite Plugin und websocket Plugin) übernommen.
                  Viele Grüße
                  Martin

                  There is no cloud. It's only someone else's computer.

                  Kommentar


                    #10
                    Die Historie kenne ich. Dann mal anders gefragt: Kann jemand bestätigen, dass der zyklische Updatemechanismus funktioniert?

                    Kommentar


                      #11
                      Zitat von aschwith Beitrag anzeigen
                      14* 24 * 3600s / 100 / 1000 = 12 Sekunden
                      Da die Zeitstempel in Millisekunden angegeben sind, müsstest Du vor dem ersten Bruchstrich noch mit 1000 multiplizieren. 12.000 Sekunden passt dann schon eher. Das sind 3,33 Stunden. Das mal 100 sind 13,9 Tage.

                      Zitat von aschwith Beitrag anzeigen
                      Kann jemand bestätigen, dass der zyklische Updatemechanismus funktioniert?
                      Ich hab heute mal aus dem Log des io.smarthome.py Treibers die Updates mitgeschnitten (Zeilen um die Einleitung gekürzt):
                      Code:
                      {"cmd":"series","series":[[1595777213382,0.02],[1595777215870,0.0],[1595777293291,0.0]],"sid":"env.system.load|avg|2h|-1h|100"}
                      {"cmd":"series","series":[[1595777293291,0.0],[1595777373222,0.0],[1595777293291,0.0]],"sid":"env.system.load|avg|2h|-1h|100"}
                      {"cmd":"series","series":[[1595777373222,0.0],[1595777453119,0.0],[1595777373222,0.0]],"sid":"env.system.load|avg|2h|-1h|100"}
                      {"cmd":"series","series":[[1595777453119,0.0],[1595777515894,0.06],[1595777533014,0.06]],"sid":"env.system.load|avg|2h|-1h|100"}
                      {"cmd":"series","series":[[1595777533014,0.06],[1595777613425,0.06],[1595777533014,0.06]],"sid":"env.system.load|avg|2h|-1h|100"}
                      Die Duration der Serie sind 3 Stunden. Die Updates schwanken naturgemäß stark, weil ich ein sich nicht kontinuierlich veränderndes item aufgezeichnet habe. Dennoch erkennt man anhand der Zeitstempel, dass die Updateintervalle um die 108 Sekunden (3h /100 = 10800 Sekunden /100 = 108) schwanken.

                      Ich würde dem Updateintervall deshalb erstmal trauen. Was mich mehr beunruhigt sind die teils doppelt vorhandenen Werte und die letzte Zeile ist sogar kompletter Müll: der vorletzte Zeitstempel ist größer, als der letzte
                      Zuletzt geändert von wvhn; 26.07.2020, 22:01.

                      Kommentar


                        #12
                        Abgesehen von der 1. Zeile sieht es aus, als wäre der letzte Wert (Timestamp & Wert) identisch um vor-vor-letzten Wert.
                        Ist die 1. Zeile die Antwort auf die Anfrage und die weiteren Zeilen sind Series Updates?

                        Ich erinnere dunkel, dass es bei der Umstellung von sv 2.7 auf 2.8 Probleme mit den Plots gab und daran rumgeschraubt wurde. Mich hatte das damals nicht betroffen und ich hatte nur am Rande verfolgt was da geändert wurde. Ich muss mal durch die alten Posts im Forum schauen was da war und was gemacht wurde. (Ich meine damals fehlten Werte, bin mir aber nicht sicher)
                        Viele Grüße
                        Martin

                        There is no cloud. It's only someone else's computer.

                        Kommentar


                          #13
                          Es sind alles Updates in unmittelbarer chronologischer Reihenfolge, aber zu einem beliebigen Zeitpunkt aus der Konsole entnommen. Ich hatte über längere Zeit einen Plot mit kurzer Duration laufen lassen, um meine Antworten auf die Fragen von aschwith abzusichern

                          Es gab im Forum immer wieder Diskussionen, ob Werte für den Zeitpunkt „now“ künstlich erzeugt werden dürfen, wenn sie noch nicht in der Datenbank stehen. IMHO hängt das hier beobachtete Verhalten mit diesem „Feature“ zusammen.
                          Zuletzt geändert von wvhn; 27.07.2020, 08:13.

                          Kommentar


                            #14
                            Top, danke Euch. Ja, der Updatezyklus passt nun mit den 3,33 Stunden. Ich habe heute auch mal ein Log laufen lassen und dabei auch die doppelten Werte beobachten können. Allerdings nicht immer an gleicher Stelle:

                            Code:
                            ...,[1595623024445,110.0],[1595623145015,0.0],[1595788177040,0.0],[1595788385724,0.0],[1595792623434,0.0],[1595794100029,0.0],[1595794100029,0.0],[1595832774621,0.0]],"sid":"Enocean.actor2.power|raw|2w|now|100"} io_smarthome.py.js:147:12
                            
                            12:14:35.608 [io.smarthome.py] receiving data: {"cmd":"series","series":[[1595832774621,0.0],[1595832774621,0.0]],"sid":"Enocean.actor2.power|raw|2w|now|100"} io_smarthome.py.js:147:12
                            
                            15:36:14.395 [io.smarthome.py] receiving data: {"cmd":"series","series":[[1595844875163,0.0],[1595844875163,0.0]],"sid":"Enocean.actor2.power|raw|2w|now|100"} io_smarthome.py.js:147:12
                            Hier eine andere Serie bei der nur die erste Serie betroffen ist, alle weiteren nicht:
                            Code:
                            ...,[1595829382353,10.0],[1595829382353,10.0],[1595832774659,10.0]],"sid":"Enocean.actor1.power|raw|2w|now|100"} io_smarthome.py.js:147:12
                            
                            12:14:35.695 [io.smarthome.py] receiving data: {"cmd":"series","series":[[1595832774659,10.0],[1595842420517,22.0],[1595843026073,23.0],[1595844845947,22.0]],"sid":"Enocean.actor1.power|raw|2w|now|100"} io_smarthome.py.js:147:12
                            
                            
                            15:36:14.610 [io.smarthome.py] receiving data: {"cmd":"series","series":[[1595844875183,22.0],[1595845823908,11.0],[1595846389329,0.0]],"sid":"Enocean.actor1.power|raw|2w|now|100"} io_smarthome.py.js:147:12
                            Sortierung war bei mir immer monoton steigend. Lediglich bei einem Restart von SmarthomeNG und dem damit verbundenen neuen Senden der kompletten Serie, sieht Highcharts "alte" Werte und quitiert dieses mit einem Fehler im SmartVisu log: www.highcharts.com/errors/15 Das ist aus meiner Sicht aber ok

                            Kommentar


                              #15
                              Zu den Diskussionen der Werte in der Serie:
                              a) Nach meinem Verständnis werden alle Werte aus dem DB Abfragezeipunkt gesendet und zusätzlich noch der aktuelle Wert (der ja noch nicht in die DB geschrieben worden ist.) Der Wert ist ja nicht künstlich, nur die Dauer konnte noch nicht bestimmt werden, da der Endzeitpuntk fehlt.

                              b) Die andere Frage haben wir schon vor vielen Jahren diskutiert. Wie reagiert das plugin auf eine Anfrage von 100 Werten, wenn nur 35 Werte in der Datenbank sind? Die Serie gibt dann nur 35 + now Wert = 36 Werte aus. Das ist aus meiner Sicht auch ok. Konsequenter Weise sollten dann aber in obigen Serien keine Werte zum auffüllen doppelt Vorkommen (Padding).

                              Was meint ihr? VG

                              Kommentar

                              Lädt...
                              X