Ankündigung

Einklappen
Keine Ankündigung bisher.

Pluginidee: Wertänderung von Items auf Basis einer "Sollwertkurve"

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

    #16
    Danke für die vielen Rückmeldungen, tut sich ja noch was hier.. Hab mich mal ein bisschen mit scipy und numpy gespielt..
    Mit diesem Code hier sieht der Plot sehr ähnlich zum Highchart aus, was schon mal gut wäre..

    highcharts.png

    Und hier mit Python Code:

    scipy.png
    https://repl.it/@onkelandy/SciPyPlot
    Zum Ausführen einfach einen Wert in x oder y ändern (x = Zeit, y=%-Wert) und auf Run klicken.

    Hier der Pythoncode ohne Plot:
    https://repl.it/@onkelandy/SciPygetbackValue

    Wenn man bei dieser Python Funktion hier eine Uhrzeit als Float beim print(f(8.5)) eingibt, erhält man den Wert für den entsprechenden Zeitpunkt. Wär also so ziemlich das, was es in punkto Interpolation bräuchte.

    Wie das jetzt in die UZSU eingebunden werden kann, ist mir leider nicht ganz klar.. man müsste ja va. auch ein Intervall angeben können, in dem ein Wert von der UZSU zurück kommt, oder?
    Zuletzt geändert von Onkelandy; 23.08.2018, 22:33.

    Kommentar


      #17
      Zitat von Onkelandy Beitrag anzeigen
      Wie das jetzt in die UZSU eingebunden werden kann, ist mir leider nicht ganz klar.. man müsste ja va. auch ein Intervall angeben können, in dem ein Wert von der UZSU zurück kommt, oder?
      Das Intervall bzw. den nächsten Updatezeitpunkt würde ich ebenfalls in der genannten _next_time() setzen. Entweder fix z.B. alle 5 Minuten oder sogar abhängig von der Steilheit der Kurve am aktuellen Punkt oder nach einer Mindeständerung.

      Schwieriger dürfte es sein, die Zeitpunkte zu evaluieren. Aktuell findet die UZSU ja immer nur den nächsten. Wenn ich es richtig verstanden habe, braucht man für einen Spline mindestens 4 Punkte (2 vor und 2 nach dem gesuchten Zeitpunkt).

      Wenn man schon dran ist, würde ich neben dem Spline noch eine lineare Interpolation implementieren, das wäre ja nur 1 Zeile. Welche Methode zur Anwendung kommt, würde ich dann im dict im UZSU-Item hinterlegen, z.B. mit den Werten 'linear', 'spline' und None für normales, bisheriges Verhalten.

      Kommentar


        #18
        scipy ist gut. Man könnte auch ca 100 Zeilen aus der Engeln-Müllges Formelsammlung abtippen ...

        Kommentar


          #19
          So, Plugin funzt nun ziemlich so, wie ich mir das vorgestellt habe - abgesehen noch von der Implementierung der grafischen Darstellung. Vielleicht kann mir da wer helfen?

          Es müssen scipy und numpy installiert sein. Auf'm Raspi mit Python 3.5.3 brauchte ich außerdem apt-get install libatlas-base-dev

          Files im Anhang:
          uzsu_interpol3: Update des Plugins. Es ist pro Item möglich Interpolation und Intervall zu definieren. Außerdem kann man festlegen, ob beim Starten der letzte gesetzte Wert geladen werden soll bzw. wie alt dieser Wert in Minuten sein darf. Hab das derzeit "back in time" in der Visu genannt. Bräucht man noch n kurzen, prägnanten Begriff.

          visu_uzsu: Überschreibt device.js im widgets Ordner und de.ini sowie en.ini im lang Ordner der smartVISU2.9

          Freue mich über Rückmeldungen und Hilfe. PR mach ich dann wenn's sonst auch wer getestet hat.
          Angehängte Dateien
          Zuletzt geändert von Onkelandy; 26.08.2018, 11:48. Grund: Plugin v3

          Kommentar


            #20
            Zur Info:
            Ich versuche mich an der grafischen Umsetzung, sieht bislang ganz gut aus.
            Anzeigen und verschieben funktioniert schon mal, nun fehlt noch Einfügen und Speichern.

            Kommentar


              #21
              Onkelandy Das SHNG-Plugin habe ich zwar nicht getestet, aber das sV-Widget scheint in Ordnung.
              Magst du dafür bereits einen PR machen? Dann könnte ich danach das neue Grafik-Widget committen (es sind zu viele Dateien betroffen, um dieses hier hochzuladen und von Hand einzubinden).

              Kommentar


                #22
                Hab das Widget noch optimiert, damit es keine Probleme gibt, falls man das "alte" Plugin nutzt. PR ist gerade erstellt:
                https://github.com/Martin-Gleiss/smartvisu/pull/210

                Plugin ist auch nochmals aktualisiert bezüglich Fehlerhandling: https://github.com/onkelandy/plugins/tree/uzsu/uzsu

                Freu mich schon auf die grafische Anpassung Bitte um Meldung, sobald man's testen kann, danke.

                Kommentar


                  #23
                  So, das grafische Widget ist im develop branch committed. Es heisst device.uzsugraph und es gibt auch bereits eine Doku-Seite dazu.

                  Man kann Schaltpunkte per Drag & Drop verschieben (sowohl Zeitpunkt wie auch Wert), neue Einfügen per Klick auf den Hintergrund, Ändern und Löschen durch anklicken eines Punktes.
                  Es beherrscht auch Sonnenauf- und -untergang mit Offset, den Zeitpunkt für Auf- und Untergang kann man ebenfalls per Drag & Drop verschieben.
                  Die Interpolation kann ausgewählt werden. Mit Auswahl von "keine" kann auch eine herkömmliche UZSU kontrolliert werden.
                  Wenn es einen Eintrag gibt, welcher nicht für jeden Wochentag gilt, wird eine Woche angezeigt - andernfalls nur 24 Stunden.
                  Deaktivierte Einträge werden ebenfalls angezeigt, aber nicht mit einer Linie verbunden.

                  Ich bin gespannt auf euer Feedback, wahrscheinlich fehlt noch etwas Errorhandling.

                  Das sieht dann z.B. so aus:
                  screenshot-uzsugraph.png
                  Zuletzt geändert von smai; 31.08.2018, 22:38.

                  Kommentar


                    #24
                    Hier in dem Fall auch noch meine Beobachtungen:
                    • keine Interpolation hab ich in der neueren Version von no auf none umbenannt, sorry
                    • Ich kann über die Icons zwar die Interpolation tatsächlich updaten, die Grafik ändert sich aber erst, wenn ich im klassischen uzsu widget auf OK gedrückt hab
                    • Refresh der Grafik fehlt auch, wenn man einen Punkt von active auf inactive oder umgekehrt stellt
                    • Refresh der Grafik fehlt weiters, wenn man über das Popup einen Punkt entfernt. (Wenn man vielfräßig sein darf: löschen eines Punkts durch "Rausziehen aus der Grafik" wie bei Adobe-Tools?)
                    • Cool wäre, wenn in der Grafik ersichtlich wäre, dass ds uzsu Item komplett inaktiv ist (graue Grafik?)
                    • Zeitzeiger mit der aktuellen Zeit wär der Burner (jede Minute aktualisiert oder so?)
                    • on mouse over wäre zum einfacheren Erstellen eines Punkts fein, man würde die Zeit als Popup sehen, so wie bei den bestehenden Punkten. Und zwar nur dann, wenn man direkt über der Kurve ist. Erstellen eines neuen Punkts dann auch durch Klick auf die Kurve statt Hintergrund "logischer"?
                    • Beim Erstellen eines Sonnenaufgangs ist bei mir auch ein Sonnenuntergang erstellt worden?
                    • Wenn mans mit dem sunrise/sunset auf die Spitze treiben will, wäre die Anzeige des "frühestens bis spätestens" in Form einer hinterlegten Fläche hilfreich
                    Vielen Dank!

                    Beim Plugin gab es übrigens ein Problem, wenn keine Tage ausgewählt waren (als keine rrule). Das sollte nun behoben sein:
                    https://github.com/onkelandy/plugins/tree/uzsu/uzsu
                    Zuletzt geändert von Onkelandy; 01.09.2018, 01:41.

                    Kommentar


                      #25
                      Danke für das Feedback.

                      1. Werde ich ändern, spielt aber wahrscheinlich gar keine Rolle, weil dies der Fallback ist.
                      2./3./4. Refresh dürfte alles dieselbe Ursache haben. Ich vermute, dass der Wert nicht zurückgeschickt wird, evtl. weil es ein dict ist (entweder in SHNG visu_websocket oder dann im sV Treiber). Ich habe es ehrlich gesagt nicht mit SHNG getestet, ich muss mir die Kommunikation anschauen.
                      4. Rausziehen werde ich versuchen, ich bin aber nicht sehr zuversichtlich, dass dies mit Highcharts möglich ist.
                      5. Das dürfte einfach sein.
                      6. Auch der Zeitzeiger sollte einfach sein.
                      7. Ich weiss nicht, ob ein solches Tooltip möglich ist. Der Klick nur auf der Kurve wäre es wahrscheinlich, aber ist das wirklich besser? Einen neuen Punkt will ich ja normalerweise nicht auf der bestehenden Kurve einfügen sondern irgendwo abweichend im Wert.
                      8. Sobald etwas mit Sonne drin ist, werden Auf- und Untergang angezeigt. War bewusst so, ich kann das aber auch ändern.
                      Zu beachten dabei ist, dass die Linien nur den Zeitpunkt von Auf- und Untergang symbolisieren, der tatsächliche Schaltpunkt wird separat als Marker angezeigt und kann mit Offset und frühestens/spätestens auch von den Linien abweichen.
                      9. Das ist eine gute Idee, werde ich prüfen. Es wird aber sicher keine Fläche sein, sondern nur Indikatorlinien beim Punkt (siehe vorigen Absatz).

                      Kommentar


                        #26
                        Danke für die rasche Rückmeldung.
                        2.-4.: Bei smarthomeNG war grad Thema, dass ein Auslesen eines Dicts von einem Item über copy.deepcopy passieren muss, damit es als "update" akzeptiert wird. Keine Ahnung, ob hier ein Zusammenhang besteht.
                        7.: Klick auf Kurve ist halt schon klassisch bei Grafikprogrammen und Co. Ich klicke auf die Kurve, bekomme dort einen Punkt und zieh den dann auf den gewünschten Wert. Würde das als "Standard" beschreiben.
                        8.: Sonnenaufgang: graue Linie symbolisiert Auf- bzw. Untergang. Ein Sonnen-Symbölchen wäre cool für die Datenpunkte, die auf Grund der Sonnen-Regel drin sind, damit man hier den Zusammenhang sieht. Oder farblich mit der Linie abstimmen (dunkles gelb/orange als Standard?). Wenn ich's richtig verstehe, sollten die Linien selbst nicht verschiebbar sein, oder? Aber das frühestens/spätestens könnte man als verschiebbare Indikatoren anlegen? Letzteres ist in der Wochenübersicht vielleicht etwas too much, keine Ahnung.

                        Kommentar


                          #27
                          Jetzt wo du von grauen Linien sprichst, merke ich, dass etwas css in meinem Commit gefehlt hat. Werde ich nachholen.
                          In meinem Screenshot oben sieht man, wie es sein sollte: Linie und Punkte bei Aufgang sind weiss, bei Untergang rot.
                          Die Linien selbst und damit auch der Zeitpunkt für die Anzeige lassen sich mit den Markern auf der x-Achse verschieben. Dies wird aber nirgends gespeichert, weil es ja nur für die Anzeige ist und über das Jahr ändert.
                          Anzeige für frühestens und spätestens sollte möglich sein, verschieben per drag wahrscheinlich leider nicht.

                          Kommentar


                            #28
                            Hab noch n Problem im device.js entdeckt. Man kann keine neuen Einträge mehr hinzufügen. Liegt daran, dass nun die Funktion _uzsuSaveTable mit (1, response,..) aufgerufen wird, die Funktion aber den ersten Wert (also 1) als response übernimmt. Im Übrigen wird ein Mal die SaveTable ohne 1 aufgerufen, was auch zu Problemen führt.

                            Kommentar


                              #29
                              Noch kurz zum Thema CSS: wärs möglich, noch eine Farbe für die Linie anzugeben (bzw. evtl. sogar für alle Elemente wie aktive und inaktive Punkte?)?

                              Gibts noch ne Möglichkeit, die Doku dazu interaktiv zu machen? Habs mit meinem io.write Script versucht, das ich in der quad docu nutze, geht aber nicht.

                              Kommentar


                                #30
                                Zitat von Onkelandy Beitrag anzeigen
                                keine Interpolation hab ich in der neueren Version von no auf none umbenannt, sorry
                                Geändert.

                                Zitat von Onkelandy Beitrag anzeigen
                                Refresh der Grafik
                                Gefunden (und behoben)

                                Zitat von Onkelandy Beitrag anzeigen
                                Cool wäre, wenn in der Grafik ersichtlich wäre, dass ds uzsu Item komplett inaktiv ist (graue Grafik?)
                                Gemacht.

                                Zitat von Onkelandy Beitrag anzeigen
                                Zeitzeiger mit der aktuellen Zeit wär der Burner
                                Geburnt :-)

                                Zitat von Onkelandy Beitrag anzeigen
                                Hab noch n Problem im device.js entdeckt. Man kann keine neuen Einträge mehr hinzufügen.
                                Geflickt.

                                Zitat von Onkelandy Beitrag anzeigen
                                wärs möglich, noch eine Farbe für die Linie anzugeben
                                Gestrichen. Damit würde IMHO der Widgetaufruf überladen. Die Farben stammen vom gewählten Design und da in 2.9 Highcharts im styled mode betrieben wird, kann man das per custom css überschreiben.

                                Zitat von Onkelandy Beitrag anzeigen
                                Gibts noch ne Möglichkeit, die Doku dazu interaktiv zu machen?
                                Geklärt - das hätte sie schon vorher sein sollen, es gab nur eine Exception wegen der im Item fehlenden Interpolation.

                                Kommentar

                                Lädt...
                                X