Ankündigung

Einklappen

Hinweis

Die Forenregeln wurden überarbeitet (Stand 7.11.22). Sie sind ab sofort verbindlich. Wir bitten um Beachtung.
Mehr anzeigen
Weniger anzeigen

Plots von Jahren übereinander legen

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

    Plots von Jahren übereinander legen

    Hallo,
    ich würde gerne die Verlaufskurve von der PV Anlage in Plots übereinander legen. Also die Erträge von 2020, 2021 und die 2022.
    Plots kann man ja mehrere in einem Diagramm anzeigen. Aber wie bekommt man das hin, dass die Jahre übereinander liegen?
    Wie bekommt man es hin, dass die Daten von vor einem Jahr, also -365 Tage und von vor 2 Jahre -730 Tage geladen werden?

    Viele Grüße
    Alex
    Zuletzt geändert von wvhn; 08.11.2022, 23:45. Grund: Status gelöst gesetzt

    #2
    Hallo Alex,

    ich fürchte, das geht aktuell nicht. Erste Idee war, dasselbe item 3 mal mit verschiedenen x-Achsen darzustellen. Das scheitert aber daran, dass smartVISU ein item nicht mehrfach in einem Plot verwenden kann. Diese Einschränkung müsste ich erstmal beseitigen.

    Du könntest höchstens in der Highcharts-Doku nachsehen, ob Du eine passende Option für die gewünschte Darstellung findest.

    Gruß
    Wolfram

    Kommentar


      #3
      alex78,

      Im Develop branch ist jetzt eine Version, die das mehrfache Verwenden eines items innerhalb der Widgets erlaubt. Zum Teil ging das vorher schon bei Widgets, in denen die items jeweils eigene data-Attribute hatten. Jetzt geht es auch bei Widgets, in denen die items in einem gemeinsamen String übergeben und als Array „response“ in JavaScript ausgelesen werden. Jedes item wird wie bisher nur einmal beim Backend angefragt, wird aber beim Update des Widgets ggfls. mehrfach aus dem widget.buffer gelesen.

      Zudem kann man jetzt über die Chartoptions mehrere x-Achsen konfigurieren, so dass die Grundeinstellungen für die xAchse überschrieben werden. Bisher hat das item-update diese Einstellungen immer wieder mit den Defaultwerten überschrieben.

      Man kann jetzt also mehrere Abschnitte eines Plots auf verschiedenen x-Achsen darstellen. Im o.g. Beispiel würde man die Daten für 3 Jahre anfordern und auf 3 x-Achsen mit jeweils einem Jahr Dauer darstellen. Das geht entweder über die Durations (also relativ zum aktuellen Datum), oder über absolute Zeitstempel.

      Beispiel:
      Daten der Items "env.system.load" werden für 10 Tage abgefragt und auf 2 x-Achsen verteilt. Das item wird 2x eingetragen (2 Kurven). Die Kurven müssen unter "series:..." den jeweiligen x-Achsen zugeordnet werden. Danach werden die x-Achsen selbst parametriert. Mit "visible: false" kann man sie auch einzeln ausblenden.
      Code:
      {{plot.period('',['env.system.load', 'env.system.load'],['avg','avg'], '10d','','','','','',['green','red'],['line','line'],'','','','','','','',{series:[{xAxis: 0},{xAxis: 1}], xAxis: [{type: 'datetime', min:'5d', max: 'now'},{type: 'datetime', min: '10d', max: '5d'}]})}}
      Ergebnis:
      plot_doubleX.jpg

      Weitere Optionen sind in der Highcharts API Reference dokumentiert.

      Viel Spaß beim Testen.

      Gruß
      Wolfram

      Kommentar


        #4
        Wow, das schaue ich mir mal an. Vielen Dank.

        Ich habe jetzt mal die plot.js ausgetauscht und ein Chart erstellt. Die X-Achsen sehen schonmal sehr gut aus. Allerdings bekomme ich die zweite Linien nicht angezeigt.

        image.png

        Code:
                    <tr>{{ plot.period('pvanlagejahresertrag2', ['solar.jahresertrag', 'solar.jahresertrag'],['max','max'], '1000d','','','','','',['yellow','red'],['line','line'],['', 'Jahresertrag'],'','','','','','',{series:[{xAxis: 0},{xAxis: 1}], xAxis: [{type: 'datetime', min:'365d', max: 'now'},{type: 'datetime', min: '730d', max: '365d'}]})}}</tr>
                    <tr>{{ plot.period('',['env.system.load', 'env.system.load'],['avg','avg'], '10d','','','','','',['green','red'],['line','line'],['', 'Testverlauf'],'','','','','','',{series:[{xAxis: 0},{xAxis: 1}], xAxis: [{type: 'datetime', min:'5d', max: 'now'},{type: 'datetime', min: '10d', max: '5d'}]})}}</tr>​
        Ich habe auch mal versucht (2. Diagramm) die Load Daten reinzuziehen, aber auch hier nur eine Linie...

        VG
        Alex
        Zuletzt geändert von alex78; 06.11.2022, 17:38.

        Kommentar


          #5
          Die Änderung, die für die doppelte Verwendung der items erforderlich ist, sitzt in der /lib/base/base.js. Allerdings ist diese seit v3.2.2 erheblich geändert worden, so dass ein Austausch sicher nicht funktioniert. Du müsstest also den ganzen develop branch pullen, oder in der base.js die "_create" und "update"-Methoden ändern, wie hier dargestellt.

          Gruß
          Wolfram

          Kommentar


            #6
            Hallo Wofram, sehr schönes neues Feature. Funktioniert sehr gut. Eine Kleinigkeit ist bei mir aufgefallen:

            Der Plot Werte aus Graph 1 und 2 die man als ToolTip beim Mousover angezeigt bekommt, zeigt dauerhaft Plotwerte == 0 für beide Graphen an:
            PlotMultiXAxis.png

            Kommentar


              #7
              Hallo Alex,

              ganz so ist es in meinem Beispiel nicht. Es werden immer echte Werte angezeigt, aber es besteht ein Problem mit dem gemeinsamen ("shared") Tooltip. Beim Drüberfahren mit der Maus kann nur ein Wert von der x-Achse genommen werden, so dass immer zwei gleiche Werte angezeigt werden (die beiden Serien sind ja gleich). Setzt man "shared" auf false, hat man zwar immer nur einen Wert von der ausgewählten Kurve im Tooltip, aber der stimmt wenigstens.

              Code:
              plot.period('',['env.system.load', 'env.system.load'],['avg','avg'], '10d','','','','','',['green','red'],['line','line'],'','','','','','','',{series:[{xAxis: 0},{xAxis: 1}], xAxis: [{type: 'datetime', min:'5d', max: 'now'},{type: 'datetime', min: '10d', max: '5d'}], tooltip: {shared: false}})
              Einen shared tooltip auf 2 verschienden x-Achsen unterstützt Highcharts aktuell nicht.

              Das Problem in Deinem Beispiel kommt aus der Einheit "%". Einheiten werden in den Plots immer mit der smartVISU-Funktion "transUnit" formatiert. Das passt nicht so ganz zum sonstigen Vorgehen (z.B. in basic.print) und das schaue ich mir nochmal genauer an. Wenn Du das Format für "%" in der /lang/de.ini mit 2 Nachkommastellen definierst, dann passt die Ausgabe.

              Code:
              [format]
              % = "%01,2f%"​
              Gruß
              Wolfram

              Kommentar


                #8
                Das Problem ist tatsächlich, dass in der /lang/en.ini das Format für "%" auf ganzzahlige Werte festgelegt ist. D.h. mit der transUnit-Funktion ist alles in Ordnung. Es wäre allerdings schön, wenn man auch printf-Formate in der Form "%01,2f%%" übergeben könnte. Das muss ich nochmal näher ansehen.

                Kommentar


                  #9
                  Hallo Wolfram,

                  Danke dir. Die Formatierung zusammen mit deinem Hinweis auf shared=false hat geholfen.

                  VG
                  Alex

                  Kommentar


                    #10
                    aschwith Hallo Alex,

                    es können jetzt auch Formatangaben mit den Einheiten angegeben werden, also passend zum o.g. Beispiel "%01,2f%%".

                    Der Fix ist im develop branch.

                    Gruß
                    Wolfram

                    Kommentar


                      #11
                      Super. Danke Dir. Probier ich aus. VG

                      Kommentar


                        #12
                        Interessant. Funktioniert bei mir, allerdings nur mit Dezimalpunkt, nicht mit Komma. Sprich so funktioniert es:
                        Code:
                        '"%01.2f%%'

                        Kommentar


                          #13
                          Das doppelte Anführungszeichen an der 2. Stelle ist zu viel. Vielleicht war das der Fehler? oder Du hast nicht den letzten Stand von gestern Mittag verwendet.

                          Ich hab gerade nochmal auf meinem Testsystem den develop branch gepullt. da funktioniert beides.

                          Kommentar


                            #14
                            Sorry, mein copy paste Fehler:

                            Korekt ist in der Tat:
                            Code:
                            '%01.2f%%'
                            Bei mir funktioniert es weiterhin nur mit Dezimalpunkt. Komma funktioniert nicht. Ist für mich aber nicht weiter schlimm.

                            Kommentar


                              #15
                              Mit Punkt ging es vor der Änderung schon. die Änderung sollte explizit das Komma ermöglichen. Deswegen wäre es wichtig zu wissen, ob da noch etwas faul ist.

                              Den aktuellen Stand hast Du, wenn in der plot.js ab Zeile 230 die Schleife
                              Code:
                              for (var i = 0; i < units.length; i++) {    …
                              steht und ebenso in der plot.html ab Zeile 126
                              Code:
                              {% for uniti in unit %}
                              .

                              Kommentar

                              Lädt...
                              X