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

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

    Wäre es mit den aktuellen Mitteln der Webinterfaces und Plugins möglich, selbst eine Art Sollwertkurve zu definieren, die dann den Wert eines Items bestimmt? In der x-Achse wäre zB Stunde 0 bis 24 des Tages, in der y-Achse die Intensität einer Leuchte oder der Tempereaturschwellwert für die Heizung, ...

    Könnte mir vorstellen, dass man die Linie nicht unbedingt selbst malt, sondern pro Stunde einen Wert eingibt und dann ein Spline errechnet wird: https://canvasjs.com/jquery-charts/spline-chart/

    Der Clou wäre jetzt aber eben, die Zwischenstufen zwischen zwei vollen Stunden zB im Minutentakt die interpolierten Werte aus der Grafik einzulesen. Man könnte so zB mit warm/kaltweißen Leuchtmitteln oder RGB LEDs den Tagesverlauf bezüglich Kelvin simulieren. Aber es gäbe sicher noch andere brauchbare Szenarien auf dieser Basis.
    Zuletzt geändert von Onkelandy; 07.10.2018, 17:06.

    #2
    Das hört sich wie eine stinknormale Logik an. Werte pro h. definieren. Anhand der Zeit rauskriegen, in welchem Intervall man ist, aktuellen Sollwert als Zwischenwert berechnen und dann item setzen. Was übersehe ich?

    Kommentar


      #3
      Die Kurvengrafik. Am besten änderbar durch Ziehen und Setzen der Punkte

      Kommentar


        #4
        Das wäre für mich dann eher ein Thema für die smartVISU
        Viele Grüße
        Martin

        Kommentar


          #5
          Das wäre toll. Ich löse es bislang mittels UZSU um "Stützpunkte" zu definieren. Generell wäre das eine Erweiterung für USZU (festes Zeitraster) und Autotimer (Ereignis gesteuertes Abspielen einer Signalfolge)

          Kommentar


            #6
            Also angenommen, man würde das über eine Logik machen, die zB jede Minute triggert...
            Ich würde dann also zB pro Stunde für ein spezifisches Item die Wunschwerte hinterlegen, zB als Dictionary mit Uhrzeit (in Stunden): Wert (in Prozent). {8: 100, 9: 80, 10: 60, etc.}
            Die Logik berechnet dann anhand von Stunde und Minuten, zwischen welchen 2 Werte wir uns befinden. Beispielsweise 9.15 Uhr -> zwischen Wert 80 und 60.

            Über eine kubische Interpolation würde die Logik nun den Wert für das erste Viertel zwischen diesen beiden Werten errechnen und als Sollwert zB an den Bewegungsmelder weiterleiten. Jetzt wäre hier die Frage, ob das irgendwie mit "Hausmitteln" geht oder ob man tatsächlich die 100MB für scipy und numpy (und offenbar atlas?) in Kauf nehmen müsste.

            Für die SmartVISU bräuchte man dann ein Widget, das das Dictionary ausliest und in einen Graphen mit der gleichen Interpolation darstellt. Das i-Tüpfelchen wäre dann, wenn man die Punkte pro Stunde zumindest in der y-Achse verschieben könnte und dadurch das dict updated.

            Wäre das der "richtige" Ansatz?

            Kommentar


              #7
              Zitat von Onkelandy Beitrag anzeigen
              Jetzt wäre hier die Frage, ob das irgendwie mit "Hausmitteln" geht oder ob man tatsächlich die 100MB für scipy und numpy (und offenbar atlas?) in Kauf nehmen müsste.
              Ich habe es nicht geprüft, aber schau dir das an: https://www.python-forum.de/viewtopi...=36071#p275597
              Ich habe erst jetzt gesehen, dass in diesem Beitrag ja numpy eingesetzt wird. Zuvor wollte er es ebenfalls ohne numpy machen, was wohl aber wirklich nicht so einfach ist.

              Zitat von Onkelandy Beitrag anzeigen
              Für die SmartVISU bräuchte man dann ein Widget, das das Dictionary ausliest und in einen Graphen mit der gleichen Interpolation darstellt. Das i-Tüpfelchen wäre dann, wenn man die Punkte pro Stunde zumindest in der y-Achse verschieben könnte und dadurch das dict updated.
              Wäre anscheinend mit Highcharts prinzipiell möglich.
              Beispiel mit verschiebbaren Punkten: https://jsfiddle.net/highcharts/AyUbx/
              Und spline gibts auch: https://www.highcharts.com/stock/demo/spline. Der Algorithmus stimmt vielleicht nicht ganz überein - aber muss es denn auf das Pixel exakt sein?
              Zuletzt geändert von smai; 23.08.2018, 12:05.

              Kommentar


                #8
                Schöne Idee. Ob man nun wegen 100MB Quellcode angesichts GB großer Datenbanken sich Gedanken machen muß, weiß ich nicht.
                Ich gebe jedoch zu bedenken, das es noch nicht einmal jemand geschafft hat beim plot.period dynamische Auswahl von Zeitreihen (series) und Auswahl eines Zeitbereichs zu realisieren....

                Kommentar


                  #9
                  Ich hätte noch ein Feature Request: Die Zeit nicht auf 24h limitieren, sondern eher die Anzahl der Stützpunkte. Ich glaube es gibt einige Anwendungen z.B. am Wochenende andere Daten benötigen als werktags.

                  Kommentar


                    #10
                    Zitat von bmx Beitrag anzeigen
                    das es noch nicht einmal jemand geschafft hat beim plot.period dynamische Auswahl von Zeitreihen (series) und Auswahl eines Zeitbereichs zu realisieren....
                    Es hat es noch niemand versucht.
                    Wie ich andernorts bereits geschrieben hatte, wäre das wahrscheinlich keine grosse Sache. Es braucht aber eine Anpassung in visu_websocket, damit Daten einmalig abgerufen anstatt abonniert werden können. Auch das dürfte wahrscheinlich eine Kleinigkeit sein.
                    Nachdem ich mich nun etwas mit SHNG-Pluginentwicklung beschäftigt habe, werde ich das vielleicht bei Gelegenheit selbst einbauen.

                    Für den Request hier dürfte hingegen keine Änderung des Websocket-Protokolls notwendig sein. Ein dict-Item kann bereits heute als JSON übertragen werden.


                    Zitat von gama Beitrag anzeigen
                    Ich hätte noch ein Feature Request: Die Zeit nicht auf 24h limitieren, sondern eher die Anzahl der Stützpunkte. Ich glaube es gibt einige Anwendungen z.B. am Wochenende andere Daten benötigen als werktags.
                    Man könnte ja zwei Varianten machen:
                    Ein Wochenplan und ein Tagesplan. Beim Wochenplan wäre dann der Key im Dictionary z.B. die Stunde seit Montag 00:00.

                    Jetzt wo ich Wochenplan schreibe, frage ich mich, ob man das sogar irgendwie mir der UZSU kombinieren könnte.

                    Kommentar


                      #11
                      Es gibt viele Ansätze, aber wenig universelle. Hatte schon einmal daran gedacht die ical Schnittstelle aufzubohren: Das Zeitraster wäre geregelt und anstatt Termin als bool, müsste dann noch der Wert hinterlegt werden. Frontends zur Pflege gibt es auch genügend, wenn auch nicht so schön wie Highcharts...

                      Kommentar


                        #12
                        Eigentlich sind es ja zwei Themen:
                        Das eine wäre das Plugin oder die Logic, um die Daten in SHNG zu interpolieren und verarbeiten. Das andere ist die Erfassung der Daten.
                        Diese beiden Sachen können weitgehend unabhängig voneinander betrachtet und entwickelt werden.
                        Die Erfassung könnte wahrscheinlich sogar über das bestehende UZSU-Widget erfolgen, wenn man im neuen Plugin dieselbe Datenstruktur verwendet.

                        Nachtrag: Oder man erweitert sogar einfach das bestehende UZSU-Plugin um die Interpolation.
                        Dort hat man ja auch Werte und Zeiten, inklusive der recurrence rules, wie man sie auch in ical hat.
                        Zuletzt geändert von smai; 23.08.2018, 10:30.

                        Kommentar


                          #13
                          Wahrscheinlich ist eine Erweiterung des UZSU Plugins der effizienteste Weg...

                          Kommentar


                            #14
                            Ich habe kurz den Code des UZSU-Plugins angeschaut und glaube, dass dies tatsächlich möglich wäre.
                            Man müsste wohl "nur" in _next_time() etwa vor Zeile 239 die Interpolation einbauen.

                            Kommentar


                              #15
                              gama: Entschuldige, ich habe erst jetzt gesehen, dass du die UZSU schon vorher ins Spiel gebracht hattest. Und ich wollte das schon als meine Idee verkaufen.

                              Onkelandy beim Interpolationsalgorithmus bin ich mir noch nicht so sicher.
                              Gemäss https://forum.highcharts.com/highcha...lation-t27627/ verwendet highcharts
                              Highcharts uses bezier curves with control points midway between points.'.
                              Interpolation ist nicht mein Fachgebiet, aber rein von der Kurve her finde ich diesen recht sinnvoll.
                              Das sieht dann so aus:
                              chart.png
                              (Code in https://jsfiddle.net/v4du5q13/1/)


                              Dieselben Daten sehen in CanvasJS so aus:
                              screenshot-jsfiddle.net-2018.08.23-15-50-28.png
                              (Code https://jsfiddle.net/fxe9urpL/1/)

                              Der Hauptunterschied ist zwischen April und Mai zu sehen.
                              Beim Algorithmus von CanvasJS steigt die Kurve deutlich über den höchsten angegebenen Punkt hinaus, bei Highcharts nicht.
                              Für die meisten Anwendungen im Haus würde ich den von Highcharts vorziehen, auch wenn der andere etwas "rundere Kurven" hat.
                              Wenn ich z.B. zwei Wert für das Licht angebe, erwarte ich eher nicht, dass dieser dann dazwischen deutlich überschritten wird.

                              Kommentar

                              Lädt...
                              X