Ankündigung

Einklappen
Keine Ankündigung bisher.

Plots flexibel analysieren

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

    [Featurewunsch] Plots flexibel analysieren

    Hallo,

    Ich bin schon seit einiger Zeit mit der Überlegung beschäftigt wie man ein "plot.analyze" auf Basis von "plot.period" gestalten könnte.

    Oft möchte man Daten aus verschiedenen Quellen in einem Plot darstellen, es muss aber nicht immer alles und sofort dargestellt werden. (Performance zum Backend reduzieren) - Aktuell habe ich auf einer Seite 10 Plots mit RAW-Daten - die brauche ich nicht immer möchte bei Bedarf die Daten aber ansehen können.

    Zur Konkretisierung meiner Vorstellung :
    - Ich stelle mir hier vor, dass man X Items als Auswahl hat, die Darstellung der Items kann in der VISU aktiviert/deaktiviert werden.
    - Die Zuordnung zu rechter/linker Achse kann angegeben werden ( Direkt in der Visu).
    - Die Darstellung als Line/Spline/Balken/Stairs kann über die Visu ausgewählt werden.
    - Der Zeitraum von/bis des Plots kann über einen Datepicker gewählt werden

    Viele Grüße
    Andre

    Zuletzt geändert von wvhn; 04.04.2024, 16:55.

    #2
    Moin AndreK

    Du kannst heute schon (ab v3.4) mehrere Popups mit Deinen Plots anlegen und den jeweiligen Plots eindeutige IDs geben, die mit dem Suffix „-plotpopup“ enden. Solche Plots werden erst beim Öffnen des jeweiligen Popups beim Backend angefordert. Das senkt die Belastung der Schnittstelle erheblich.

    Zudem habe ich als Proof of Concept eine App erstellt, in der man beliebige items gemeinsam darstellen kann. Die items werden mit Kommas getrennt in ein Eingabefeld geschrieben. Fürs erste kann der „Modus“ (Aggregatsfunktion der Datenbank), sowie Anfangs- und End-Duration für alle items gemeinsam eingegeben werden, sowie pro item die Anzahl der Punkte (durch Kommas getrennt).

    Die verfügbaren Modi werden aus dem jeweiligen Backend-Treiber genommen, was nur in der aktuellen develop-Version möglich ist. Zwecks Kompatibilität mit v3.4 habe ich ersatzweise alle Modi von smarthomeNG hinterlegt.

    grafik.png

    Wie gesagt ist das ein Proof of Concept, der das Handling der items und Optionen, sowie die Steuerung des Plotwidgets übernimmt - also den kniffligen Anteil der App abdeckt. Die Höhe des Plots muss ich noch verbessern. Wer Zeit und Lust hat, kann gerne das User Interface der App verbessern und weitere Optionen ergänzen.

    Die App muss in den Ordner ./apps kopiert werden.

    Gruß
    Wolfram
    Angehängte Dateien

    Kommentar


      #3
      Hi wvhn Wolfram,

      wow, ich habe die App mal runtergeladen und eingebunden - das sieht schon mal richtig gut aus 😀
      Das ist schon ein "deutlicher" Proof of Concept. - ich habe mir den Code nicht im Details angesehen. D.h. auf jeden Fall da geht was !

      Ich sehe das folgende als Ideen-Sammlung um die Lösung zu konkretisieren. Der Vorschlag als App gefällt mir, sollte dann ja auch Widget funktionieren, oder ?

      Meine "Vision" geht hier noch ein wenig weiter - wobei der Grundgedanke der selbe ist. Ich könnte mir vorstellen :

      - Eine Auswahlliste aller DB-Items, bzw. über einen Filter (z.B. "*.Heizung") nur eine Auswahl
      - In der Auswahlliste kann man Items mittels Checkbox aktivieren/deaktivieren
      - man kann je Item den DB-Mode festlegen
      - man kann je Item die Darstellung (line/spline/stair....) festlegen - wenn ich es richtig in Erinnerung habe kann Highcharts ja gemischt darstellen, oder ?
      - man kann je Item die Farbe über einen Color-Picker definieren
      - man kann je Item die zugehörige Achse festlegen
      - die Achsen können direkt in der Visu definiert werden
      - der Datumsbereich kann von/bis Datum/Uhrzeit oder bis "now" - von "14d" oder von Datum/Uhrzeit gewählt werden, ist aber für alle Items gleich, ?
      - die gwählten Einstellungen werden in einem Item gecached.

      Das geht natürlich nur mit einer Erweiterung des backends -> kleines Plugin für shNG. (Schätze ich als kurzfristig machbar ein)

      Ich schreibe hier einfach mal meine Ideen runter - kein Anspruch auf Vollständigkeit - weiterer Austausch ist willkommen.
      Ich habe bisher nur ein paar Untersuchungen angestellt - bevor wir das Thema weiter "in Code" fassen wäre aus meiner Sicht eine kleine "Roadmap" von Vorteil.
      An einer "schönen/smarten" Lösung beteilige ich mich gerne, ich erwarte keine fertige Lösung, das wollte ich noch erwähnen. Ich bin für alles offen.


      Ich denke mit einem "Analyzer"-Tool können wir die SmartVisu nochmal einen deutlichen Schritt nach vorne bringen.

      Besten Dank schon mal

      Viele Grüße
      Andre

      Kommentar


        #4
        Moin Andre,

        da ist ja schon ein beachtliches Pflichtenheft zusammen gekommen . Hier mal die ersten Antworten auf die Fragen:

        Zitat von AndreK Beitrag anzeigen
        Der Vorschlag als App gefällt mir, sollte dann ja auch als Widget funktionieren, oder ?
        Ich habe mich erstmal für eine App entschieden, weil ich davon ausgegangen bin, dass dies ein zentrales Tool wird und keine Parameter von außen braucht. Die App nutzt das Widget plot.period und stellt Eingabefelder für dessen Parameter zur Verfügung. Ein Widget wird notwendig, wenn man zusätzlich Parameter übergeben will und das Tool mehrfach in der Visu einsetzt. Dann muss man allerdings einiges umbauen und die IDs der Eingabe-Elemente an die jeweilige Seite knüpfen, damit sie eindeutig bleiben.

        Zitat von AndreK Beitrag anzeigen
        man kann je Item die Darstellung (line/spline/stair....) festlegen - wenn ich es richtig in Erinnerung habe kann Highcharts ja gemischt darstellen, oder ?
        Ja. Das kann man im plot.period schon so machen.

        Zitat von AndreK Beitrag anzeigen
        der Datumsbereich kann von/bis Datum/Uhrzeit oder bis "now" - von "14d" oder von Datum/Uhrzeit gewählt werden, ist aber für alle Items gleich, ?
        Datum/Uhrzeit kann in Form von Zeitstempeln alternativ zu durations verwendet werden. Das wird auch in shNG schon korrekt umgesetzt. Die Zeitachse muss aber bisher in plot.period für alle items gleich sein.

        Zitat von AndreK Beitrag anzeigen
        Das geht natürlich nur mit einer Erweiterung des backends -> kleines Plugin für shNG. (Schätze ich als kurzfristig machbar ein)
        Welche Erweiterungen werden dafür gebraucht?

        Gruß
        Wolfram

        P.S.: inzwischen habe ich die Plothöhe auch angepasst. Fix ist unter dem o.g. Link verfügbar. Dort werde ich auch von Zeit zu Zeit Erweiterungen einbauen, ohne dies immer hier anzukündigen.
        Zuletzt geändert von wvhn; 05.04.2024, 10:37.

        Kommentar


          #5
          noch ein bisschen gespielt :

          grafik.png
          Angehängte Dateien

          Kommentar


            #6
            Hallo Wolfram,

            das sieht schon richtig Klasse aus. Kurze Ausführung zur "Roadmap" dazu am besten Zustimmung, Einwände und Verbesserngsvorschläge :

            Einstellungen zu den Items:
            - Wir bleiben bei der App-Lösung
            - Erstellung einer json-Datei mit allen Series-Item aus shnG via Logik (wie beim der MasterItem.json)
            - Ein wenig PHP-Zauber der die Datei an die App liefert
            - Ein wenig PHP-Zauber um die Einstellungen in einer Datei im Ordner /pages/MeineSeiten zu speichern
            - Somit kein Plugin notwendig
            - Sobald die Serien-Items in der App bekannt sind wird dynamisch eine "Tabelle" mit allen Items erstellt.
            - Zum jeweiligen Item kann die Bezeichnung,DB-Mode, Serie-Type, Farbe, Counts, Zuordnung Y-Achse gewählt werden, über eine Checkbox wird das Item aktiviert / deaktiviert - das hätte ich von einem anderen Projekt fast fertig in der Schublade, siehe unten

            Grundsätzliche Einstellungen :
            - das Ende-Datum kann über Eingabefelder Datum/Uhrzeit oder über eine Checkbox für "NOW" als Ende gwählt werden
            - das Start-Datum kann über Eingabefelder Datum/Uhrzeit oder über eine Checkbox für manuelle "Duration" oder eine Selectfeld mit Durations gewählt werden
            - die Chartoptions können über ein Eingabefeld erfasst werden
            - die Einstellungen der Y-Achsen kann über zwei Eingabefelder in Kombination mit einer Checkbox erfasst werden

            Gerne auch Ergänzungen hinzufügen.

            CreateNewEntry.gif

            Viele Grüße
            Andre

            P.S.: im letzen Stand funktioniert alles wunderbar mit zwei items, sobald ich drei Items habe wird der Plot für das dritte Item unterschlagen.

            Kommentar


              #7
              Zitat von AndreK Beitrag anzeigen
              - Erstellung einer json-Datei mit allen Series-Item aus shnG via Logik (wie beim der MasterItem.json)
              - Ein wenig PHP-Zauber der die Datei an die App liefert
              Wenn wir es so machen, wie bei der Masteritem.json oder die Datei einfach erweitern, dann brauchen wir keinen PHP-Zauber. JavaScript kann das direkt einlesen.

              Zitat von AndreK Beitrag anzeigen
              - Ein wenig PHP-Zauber um die Einstellungen in einer Datei im Ordner /pages/MeineSeiten zu speichern
              Eventuell kann das vorhandene Backup-Skript verwendet werden.

              Zitat von AndreK Beitrag anzeigen
              - Sobald die Serien-Items in der App bekannt sind wird dynamisch eine "Tabelle" mit allen Items erstellt.
              - Zum jeweiligen Item kann die Bezeichnung,DB-Mode, Serie-Type, Farbe, Counts, Zuordnung Y-Achse gewählt werden, über eine Checkbox wird das Item aktiviert / deaktiviert - das hätte ich von einem anderen Projekt fast fertig in der Schublade, siehe unten

              Grundsätzliche Einstellungen :
              - das Ende-Datum kann über Eingabefelder Datum/Uhrzeit oder über eine Checkbox für "NOW" als Ende gwählt werden
              - das Start-Datum kann über Eingabefelder Datum/Uhrzeit oder über eine Checkbox für manuelle "Duration" oder eine Selectfeld mit Durations gewählt werden
              - die Chartoptions können über ein Eingabefeld erfasst werden
              - die Einstellungen der Y-Achsen kann über zwei Eingabefelder in Kombination mit einer Checkbox erfasst werden
              Das hört sich gut an. Als Vorversion habe ich gerade ein etwas anderes Konzept im Test:
              - es gibt 5 Tabs, in denen man jeweils ein item konfigurieren kann.
              - pro Tab sind auch mehrere Items möglich, die sich dann aber Einstellungen wie den Modus und die Achsenzuordnung teilen müssen.

              Diese Version lade ich demnächst noch hoch. Darin sieht man dann auch, wie man mit den einzelnen Parametern umgehen muss, denn teilweise kommen die defaults heute aus dem Widget und teilweise aus Highcharts. Auf der Basis kann dann die ganz komfortable Lösung aufsetzen.

              Zitat von AndreK Beitrag anzeigen
              P.S.: im letzen Stand funktioniert alles wunderbar mit zwei items, sobald ich drei Items habe wird der Plot für das dritte Item unterschlagen.
              Das fixe ich mit der nächsten Version.

              Gruß
              Wolfram
              Zuletzt geändert von wvhn; 08.04.2024, 15:52.

              Kommentar


                #8
                Moin AndreK Andre,

                so sieht die angekündigte Version jetzt aus. Sie ist auf smartvisu-newstuff aktualisiert und kommt (ohne die Kompatibilitätsanpassung für v3.4) so auch in den develop branch.

                grafik.png

                Leider ist die Seite wegen der vielen Optionen sehr voll und es passt nicht mehr alles auf eine Bildschirmseite (hier schon im Vollbildmodus mit 90% Skalierung). Sicherlich hast Du da noch Ideen, wenn Du die angesprochenen Erweiterungen einbaust. Lass Dir Zeit, denn mit dieser Version hier kann man erstmal arbeiten - wenn auch textbasiert und deshalb nicht so komfortabel.

                Bei den ChartOptions muss man leider anders als in den Widget-Parametern die Eigenschaften in Anführungszeichen setzen, also z.B.
                Code:
                {"rangeSelector": {"selected": "2"}}​
                Ohne Anführungszeichen konnte ich die Texteingabe nicht in ein Objekt wandeln und in die bestehenden Optionen integrieren. Fehler werden abgefangen und es erscheint eine Meldung in der Fehlerecke, wenn JSON.parse() kein gültiges Format findet.

                Gruß
                Wolfram
                Zuletzt geändert von wvhn; 11.04.2024, 18:41.

                Kommentar


                  #9
                  Cool, das probiere ich mal aus. Habt Ihr in der Ideen-Pipeline den generierten Plot auch als Code für die direkte Verwendung auf Seiten in der SmartVISU zu speichern bzw. optional ein neues Makro zu generieren damit man z.B. einmal die Zusammenstellung eines Plots für eine Situation auf andere Situationen einfach zu übertragen?

                  Gruß,
                  Bernd

                  Kommentar


                    #10
                    Moin bmx Bernd,

                    die App verwendet das Widget plot.period und ermöglicht lediglich dessen Live-Parametrierung. Das ist durch die Erweiterungen der Treiber von shNG und ioBroker möglich geworden, mit denen man einzelne Plot's beim Backend abonnieren und wieder stoppen kann.

                    Die Idee, mit den eingegebenen Parametern einen kompletten Aufruf des Widgets als kopierbaren Code zur Verfügung zu stellen, hatte ich erstmal zurückgestellt. Das ist eigentlich Aufgabe des Widgetassistenten. Es sollte aber kein großer Aufwand sein, das nachzurüsten.

                    Gruß
                    Wolfram

                    Kommentar


                      #11
                      Die Anzeige des Widget-Codes ist jetzt umgesetzt. Aktuelle Version auf smartvisu-newstuff und im develop branch.

                      Gruß
                      Wolfram

                      Kommentar


                        #12
                        Hallo wvhn Wolfram,

                        ich habe versucht den Plot-Analyzer noch ein wenig "smarter" zu gestalten, zurück zur Roadmap :

                        Folgendes habe ich bearbeitet :
                        • Wir bleiben bei der App-Lösung
                        • Die TAB-Lösung habe ich aufgegriffen und übernommen ​​
                        • Ich stelle mir hier vor, dass man X Items als Auswahl hat, die Darstellung der Items kann in der VISU aktiviert/deaktiviert werden.
                        • Die Zuordnung zu rechter/linker Achse kann angegeben werden ( Direkt in der Visu).
                        • Die Darstellung als Line/Spline/Balken/Stairs kann über die Visu ausgewählt werden.
                        • Der Zeitraum von/bis des Plots kann über einen Datepicker gewählt werden​
                        • Erstellung einer json-Datei mit allen Series-Item aus shnG via Logik (wie beim der MasterItem.json)
                        • Ein wenig PHP-Zauber der die Datei an die App liefert
                        • Ein wenig PHP-Zauber um die Einstellungen in einer Datei im Ordner /pages/MeineSeiten zu speichern und wieder laden zu können
                        • Somit kein Plugin notwendig
                        • Sobald die Serien-Items in der App bekannt sind wird dynamisch eine "Tabelle" mit allen Items erstellt.​
                        • das Ende-Datum kann über Eingabefelder Datum/Uhrzeit oder über eine Checkbox für "NOW" als Ende gwählt werden
                        • das Start-Datum kann über Eingabefelder Datum/Uhrzeit oder über eine Checkbox für manuelle "Duration" oder eine Selectfeld mit Durations gewählt werden
                        • die Chartoptions können über ein Eingabefeld erfasst werden
                        • die Einstellungen der Y-Achsen können über zwei Eingabefelder in Kombination mit einer Checkbox erfasst werden​ ​​
                        Zusätzliche Features die hinzugekommen sind :
                        • Erstellung des Widget-Codes für den erstellten Plot (by wvhn)
                        • Definition von Stacks und deren Zuordnung zu den Items
                        • automatiche Übernahme des Stack-Exposures zu den Items
                        • Wenn ein Stack geändert wird, werden die zugeordneten Items (die Exposures automatisch aktualisiert)
                        • diverse Plausibilitätsprüfungen beim löschen von Y-Achsen und Stacks und eine entsprechende Warnung
                        • kopieren des erstellten Widget-Codes in die Zwischenablage ​​
                        Es gibt ein Script welches die DB und List-Items in eine Datei schreibt. Diese wird von der App gelesen und stellt die List/DB-items zur Verfügung.

                        Hier muss lediglich der Name der smarvisu-plugin-Instanz angepasst werden.
                        Update : Das Script ermittelt den plugin-Instanz-Namen selbst

                        Ausgeführt im Executor-Plugin oder als Logik getriggert wird eine Datei "series_items.json" im konfigurierten "pages"-Ordner der Visu erstellt.

                        Der erste Stand kann hier gefunden werden. Einen kurzen Spoiler gibt es hier. (leider zu groß für einen Upload)

                        Screen-Shot :
                        Plot-Analyzer-Screenshot.jpg


                        Viel Spass beim Testen, gerne höre ich von Euch

                        Viele Grüße
                        Andre
                        Zuletzt geändert von AndreK; 28.04.2024, 18:19. Grund: Update für Logik

                        Kommentar


                          #13
                          Moin AndreK Andre,

                          das sieht sehr gut aus. Werde dies weiter testen.

                          Auf Anhieb ist mir nur aufgefallen, dass ich gerne bei der Endzeit zusätzlich zum "Now"-Button eine einstellbare Duration wie bei der Startzeit hätte. Ggfls auch einfach einen Button "Duration" mit zusätzlicher Option "now" im Select in Kombination mit dem Eingabefeld.

                          Du hast die App ja schon als Komfort-Version benannt. Möglicherweise ist es sinnvoll diese zusätzlich zur Version 1 aufnehmen. Dann haben wir eine schlanke Version für den Soforteinsatz und eine komfortable, die als Vorbereitung die Liste der Serien-Items mit dem Python-Skript benötigt.

                          Danke und Gruß
                          Wolfram

                          Kommentar


                            #14
                            Hi wvhn Wolfram,

                            da stehe ich gerade auf dem Schlauch ?

                            Zitat von wvhn Beitrag anzeigen
                            Auf Anhieb ist mir nur aufgefallen, dass ich gerne bei der Endzeit zusätzlich zum "Now"-Button eine einstellbare Duration wie bei der Startzeit hätte. Ggfls auch einfach einen Button "Duration" mit zusätzlicher Option "now" im Select in Kombination mit dem Eingabefeld.
                            Aus meiner Sicht gibt es nur "eine" Duration. Diese wird im Moment nur einmal ( jetzt bei der Startzeit) benötigt, siehst Du die Position des Feldes anders oder benötigen wir ein zusätzliches Eingabefeld -> hier kann ich nicht ganz folgen

                            Viele Grüße
                            Andre

                            Kommentar


                              #15
                              Moin AndreK Andre,

                              Start- und Endzeit werden beide üblicherweise im duration-Format angegeben und sind damit immer relativ zur aktuellen Zeit. Um die letzten 24 Stunden darzustellen gibt man '24h', 'now' an und mit '48h', '24h'erhält man den Vortages-Zeitraum. Dieses Format ist der Standard in smartVISU und bietet den Vorteil, dass item updates im Plot kontinuierlich nachgetragen werden und die Zeitachse mitwandert..

                              Für Systeme mit smarthomeNG als Backend unterstützt smartVISU zusätzlich feste Zeitstempel als Start- und Endzeiten. Die Zeitachse bleibt dann bei item updates fest. Ich kann aber nicht garantieren, dass dies mit allen anderen Backend-Systemen auch funktioniert.

                              Langer Rede, kurzer Sinn: man braucht für beide Zeiten eine Eingabe für durations und 'now' ist ein möglicher Wert darin.

                              Gruß
                              Wolfram
                              Zuletzt geändert von wvhn; 29.04.2024, 12:14.

                              Kommentar

                              Lädt...
                              X