Ankündigung

Einklappen
Keine Ankündigung bisher.

plot.period 00:00-24:00 Uhr mit Daten von 0:00 bis now

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

    plot.period 00:00-24:00 Uhr mit Daten von 0:00 bis now

    Hallo zusammen,

    ich möchte ein Plot erstellen, dessen X-Achse statisch in 24 Stunden (0-24) geteilt ist und zwar von 0:00 Uhr bis 24:00 Uhr und nicht now - 24h.

    Beispiele:
    Um 01:00 Uhr sollen die Daten von 00:00 - 01:00 Uhr angezeigt werden, der Bereich des Plots von 01:00 - 24:00 Uhr ist im Plott noch leer bzw. unbefüllt.
    Um 18:00 Uhr sollen die Daten von 00:00 - 18:00 Uhr angezeigt werden, der Bereich des Plots von 18:00 - 24:00 Uhr ist im Plott noch leer bzw. unbefüllt.
    Um 23:59 Uhr sollen die Daten von 00:00 - 23:59 Uhr angezeigt werden, der Bereich des Plots von 23:59 - 24:00 Uhr ist im Plott noch leer bzw. unbefüllt.
    Um 00:00 Uhr ist das Plott wieder leer bzw. unbefüllt.

    Ich möchte damit für den aktuellen Tag die PV-Erzeugung visualisieren.
    Ist das mit den Plot-Widgets realisierbar?

    Ich freue mich über Vorschläge :-)


    SHNG v1.6
    smartVISU v2.9

    Zuletzt geändert von E3EAT; 23.03.2020, 21:06.

    #2
    Aktuell geht das definitiv nicht und es wäre wohl einiges anzupassen, damit man statt Durationformat zB eine Uhrzeit (des aktuellen Tages) angeben kann. Ist aber eine nette Idee, die hier positioniert werden könnte: https://github.com/Martin-Gleiss/smartvisu/issues

    Kommentar


      #3
      Ich hab aus Eigeninteresse mal ein bisschen rum probiert. Damit das geht musst du zuerst in der Datei /lib/base/base.js die Zeile 384 in
      Code:
      if (result == 0 && val) {
      abändern, damit tmax auch negative Werte (Zukunftswerte) annimmt. Und dann notierst du den Plot so:
      Code:
      {% set plot1_tmin = (date("UTC").timestamp - ((date("UTC").timestamp / 86400)|round(0, 'floor') * 86400))|round %}
      {% set plot1_tmax = (date("UTC").timestamp - ((date("UTC").timestamp / 86400)|round(0, 'ceil') * 86400))|round %}
      {{ plot.period("plot1", "item", "", plot1_tmin, plot1_tmax) }}
      Zuletzt geändert von PatrikG; 08.04.2020, 11:22.

      Kommentar


        #4
        Sehr cool, vielen Dank. Werde ich am Wochenende testen.

        Kommentar


          #5
          Allerdings weiß ich nicht wie dein Treiber dies verarbeitet. Weiter müsste man sich dann eventuell noch Gedanken machen wie man mit Wertaktualisierungen umgeht, wenn die Seite geladen ist.

          Kommentar


            #6
            Zitat von E3EAT Beitrag anzeigen
            Werde ich am Wochenende testen.
            Lässt du uns am Ergebnis teilhaben? Stehe vor einer ähnlichen Herausforderung...

            Danke

            Kommentar


              #7
              Zitat von thengsty Beitrag anzeigen
              Lässt du uns am Ergebnis teilhaben? Stehe vor einer ähnlichen Herausforderung...
              Und warum versuchst du die Lösung dann nicht selbst und prüfst ob es deinen Ansprüchen so genügt?

              Kommentar


                #8
                Ich kam noch nicht dazu bisher. Ich werde jetzt auch erst auf neue Hardware und Version 1.7 wechseln.
                Dann aber steht das wieder auf dem Plan, ist definitiv noch Thema für mich.



                ​​​​​

                Kommentar


                  #9
                  OK, danke für deine Rückmeldung. Hatte gedacht dass es schon Ergebnisse gibt, da du vom Wochenende geschrieben hattest. Sobald ich das mal ausprobiert habe gebe ich dir natürlich auch ein Feedback.

                  VG

                  Kommentar


                    #10
                    So ich habe es jetzt getestet und es funktioniert nicht, zumindest nicht vollständig.

                    Was korrekt funktioniert:
                    - durch plot1_tmin beginnt die die Skala um 0:00 des aktuellen Tages ✔
                    - durch plot1_tmax endet die Skala um 24:00 des aktuellen Tages (erst nach dem Leeren des Browser-Caches!!) ✔

                    was nicht funktioniert:
                    - Verwendung von plot1_tmax. Sobald angegeben, werden keine Daten im Plot angezeigt. ✖

                    Wenn statt plot1_tmax nichts oder now angegeben wird, werden die Daten angezeigt aber die Skala geht eben nur bis now und nicht bis 24 Uhr.


                    Jemand eine Idee?

                    Kommentar


                      #11
                      Die Lösung von PatrikG sollte funktionieren, wenn der Page-Cache von Smartvisu ausgeschaltet ist. Grund ist, dass tmin und tmax von der Twig Engine während des Renderns der Seite gerechnet werden und dann statisch bleiben. Den Page-Cache ausgeschaltet zu lassen ist aber auf Dauer nicht praktikabel. Mich wundert, dass der Plot nicht dargestellt wird. Kannst Du nochmal den Page-Cache ausschalten und löschen (und auch den Browser-Cache löschen) und die Lösung noch einmal probieren?

                      Wenn die Darstellung des Plots dann doch funktioniert, kann ich bei tmin und tmax jeweils die option 'today' einbauen und im plot.js verarbeiten. An den Plot selbst traue ich mich ehrlich gesagt aber noch nicht ran.

                      Gruß
                      Wolfram

                      Kommentar


                        #12
                        auch mit deaktiviertem und geleerten Cache (smartvisu) und geleertem Cache des Browsers wird nichts angezeigt wenn plot1_tmax angegeben ist.
                        Hier noch Screenshots der Testseite, vielleicht mache ich auch nur etwas falsch...

                        Ohne Angabe von plot1_tmax:

                        Code:
                        {% set plot1_tmin = (date("UTC").timestamp - ((date("UTC").timestamp / 86400)|round(0, 'floor') * 86400))|round %}
                        {{ plot.period('pvvplot1', 'PV.WECHSELRICHTER.kostal_172', 'raw', plot1_tmin, '', '', 7000, 1440, 'Erzeugung HEUTE', '', '', ['Zeit', 'Leistung in W'] , '' , '', '', '', '', '', '') }}
                        ergibt dann folgenden Plot (der Obere, der Untere ist nur zur Kontrolle)

                        ohneplot1_tmax.png


                        Mit Angabe von plot1_tmax:

                        Code:
                        {% set plot1_tmin = (date("UTC").timestamp - ((date("UTC").timestamp / 86400)|round(0, 'floor') * 86400))|round %}
                        {% set plot1_tmax = (date("UTC").timestamp - ((date("UTC").timestamp / 86400)|round(0, 'ceil') * 86400))|round %}
                        {{ plot.period('pvvplot1', 'PV.WECHSELRICHTER.kostal_172', 'raw', plot1_tmin, plot1_tmax, '', 7000, 1440, 'Erzeugung HEUTE', '', '', ['Zeit', 'Leistung in W'] , '' , '', '', '', '', '', '') }}
                        ergibt dann folgenden Plot (der Obere, der Untere ist nur zur Kontrolle)

                        mitplot1_tmax.png
                        Zuletzt geändert von E3EAT; 25.05.2020, 11:18.

                        Kommentar


                          #13
                          nur der Vollständigkeit und der Dokumentation wegen: kannst Du das fehlende Bild noch nachliefern?

                          Die Änderung in der base.js, die ermöglicht, dass tmax negative Werte annimmt, hast Du auch gemacht?

                          Kommentar


                            #14
                            Zitat von wvhn Beitrag anzeigen
                            nur der Vollständigkeit und der Dokumentation wegen: kannst Du das fehlende Bild noch nachliefern?

                            Die Änderung in der base.js, die ermöglicht, dass tmax negative Werte annimmt, hast Du auch gemacht?

                            Welches fehlende Bild? 🤔
                            Ja, die Änderung in der base.js habe ich gemacht.

                            Kommentar


                              #15
                              In #12 sieht es so aus, als ob ein Screenshot nicht richtig hochgeladen wurde.

                              Jetzt zum Lösungsansatz:

                              Wenn man zusätzlich zu den o.g. Änderungen in der base.js noch folgendes ab Zeile 346 einfügt:
                              Code:
                              	// calculate absolute daytime as a base for relative daybegin + dayend 
                              	var UTCdiff = new Date().getTimezoneOffset() * 60000;
                              	var daytime = (new Date() - new Date(UTCdiff)) % 86400000;
                              				
                              	if (str === 'daybegin')
                              		return new Date(daytime);
                              		
                              	if (str === 'dayend')
                              		return new Date(daytime - 86400000);  // 0:00 next day to allow scaling on x-axis
                              Dann kann man beim Aufruf der Plots für tmin und tmax "daybegin" (= heute 0:00 Uhr) und "dayend" (= morgen 0:00 Uhr)angeben.

                              Mit dem Offline-Treiber funktioniert das wunderbar. Der simuliert aber einfach Daten bis zum Ende. Kannst Du es mal mit smarthomeNG-Anbindung testen, bei der die Werte für die Zukunft fehlen? (ich habe bei mir keine Datenbank laufen).

                              Ich hatte bei mir im Test das etwas merkwürdige Verhalten, dass 'dayend' im widget-Aufruf von Twig als Null interpretiert wurde und deshalb doch wieder zu 'now' gemacht wurde. Das untersuche ich noch. Einstweilen reicht es, in der plot.html in Zeile 85 den markierten Teil zu löschen.
                              Code:
                              {% set tmax = (tmax|lower=='0h' or tmax==0 or tmax is empty) ? 'now' : tmax %}
                              Bin gespannt, ob wir ohne Anpassung des SmarthomeNG-Treibers zum Erfolg kommen.

                              Gruß
                              Wolfram

                              Kommentar

                              Lädt...
                              X