Ankündigung

Einklappen
Keine Ankündigung bisher.

Last call für Flug sV 2.9

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Es freut mich, dass du mithelfen willst, Gerald.

    Leider gibt es keine Entwickler-Doku und das Gesamtsystem ist wirklich nicht leicht zu durchschauen.
    Unterdessen bin ich soweit, dass ich wohl jede Stelle im Code kenne und damit eine solche Doku erstellen könnte. Allerdings sollte zuerst 2.9 released werden (ich hatte die letzten Tage nicht so viel Zeit).

    In der nächsten Version möchte ich auch den Datenfluss überarbeiten, weil es da zu viele Redundanzen hat und die Zuständigkeit der einzelnen Module IMHO nicht klar ist.

    Zusammengefasst funktioniert es aktuell so (am Beispiel mit SmartHomeNG als Backend):
    1. Beim allerersten Aufruf wird in /pages/base/root.html auf Zeile 156 der Backend-Treiber als io initialisiert (also z.B. /driver/io_smarthome.py.js).
    2. Beim erstmaligen Aufruf jeder Seite werden die JavaScript-Objekte der Widgets erzeugt. Für die aktuell integrierten Widgets sind dies jQuery Mobile Widgets, welche in /widgets/*.js definiert sind und durch jQuery Mobile automatisch initialisiert werden. Früher oder bei selbst eingebauten wurden in /widgets/widget.js bei onpagebeforeshow Events an die DOM-Objekte gebunden (mehr Details zum Unterschied unter Punkt 6).
    3. Bei jedem Wechsel zwischen Seiten (also erstmalig oder späteres zurückkehren) wird io.run() aufgerufen (/pages/base/root.html Zeile 177).
    4. In io.run() von /driver/io_smarthome.py.js Zeilen 78 - 84 geschehen zwei Aufrufe:
      1. widget.refresh() von /lib/base/base.js 1212 bis 1229, welches die Widgets auf der Seite mit bereits früher erhaltenen Werten aus dem Backend befüllt (wie das genau geschieht steht in Schritt 6).
      2. io.monitor() von /driver/io_smarthome.py.js 238-269, welches in SmartHomeNG alle Items abonniert, welche auf der aktuellen Seite vorkommen (auch bereits vorhandene - dass diese nicht doppelt abonniert werden, muss das Backend sicherstellen).
        Die Plots werden hier separat behandelt, weil diese anders abonniert werden müssen.
    5. SmartHomeNG sendet dann asynchron die abonnierten Daten, welche in io.socket.onmessage von /driver/io_smarthome.py.js 143-212 empfangen werden und an widget.update() in /lib/base/base.js 1150-1192 übergeben werden.
    6. widget.update() unterscheiden zwischen den aktuellen Widgets (welche ich u.A. aus Performancegründen umgebaut hatte) und veralteten aus externen Quellen:
      1. Für aktuelle Widgets wird die update-Methode des Basis-Widgets aufgerufen, welche in /base/base.js 1686-1692 implementiert ist.
        Diese ruft dann wiederum die Implementation _update() jedes einzelnen Widgets mit den für dieses Widget benötigten Item-Werten auf.
      2. Ältere Widgets müssen für jedes Item einzeln im DOM gesucht werden und dann das per jQuery angebundene update-Event mit den benötigten Item-Werten aufgerufen werden.
    Bei den Plots kommt noch etwas hinzu: Beim ersten Datenempfang wird bei diesen erst Highcharts initialisiert und mit den vollständig beladen. Bei späteren Updates kommen werden nur einzelne Datenpunkte angefügt. Für veraltete Widgets geschieht diese Unterscheidung in /lib/base/base.js 1164, für die aktuellen in /lib/base/base.js 1633-1636.

    Für dein Vorhaben ist noch wichtig zu wissen, dass bei den Plots der Zeitabschnitt quasi Teil des Items wird. Am Beispiel von plot.period wird in /widgets/plot.html 84-89 an das eigentliche Item die Aggregatsfunktion, tmin, tmax und count angefügt. Wenn das Item also z.B. 'mein.item' heisst, wird daraus etwa 'mein.item.min.1h.now.100'. Dies wird dann in /driver/io_smarthome.py.js 250-261 wieder auseinandergebröselt.

    Um die Zeitspanne zu ändern, müsste als sicher mindestens folgendes gemacht werden:
    • die Items im HTML-Dom ändern
    • das Highcharts-Objekt verwerfen
    • die neuen Items abonnieren
    • Evtl. muss das jQuery Mobile Widget noch neu gebildet werden, weil dieses nämlich die Attribute aus dem DOM-Einliesst (ich bin mir grad nicht sicher, zu welchem Zeitpunkt das geschieht).
    Ein Problem sehe ich dabei noch:
    Das Abonnement der nicht mehr benötigten Items würde dabei nie gekündigt und bleibt bestehen, bis du die Webseite schliesst oder F5 drückst. Wenn du also vielleicht 10 Mal die Zeitspanne änderst, wird ab dann im Hintergrund jeder Datenpunkt 10 mal gesendet.
    Hast du nun z.B. ein Tablet an der Wand für die Visu, bei dem du eigentlich nie neu lädst, kann das auf Dauer zu massivem Datentransfer führen.

    Kommentar


      Hallo,

      ich meine, ich hätte den Wunsch schonmal geäußert. Aber ich bin nicht sicher:
      Was ich sehr unangenehm beim Konfigurieren von Widget finde ist, dass die Parameter in einer gegebenen Reihenfolge und nicht als Name=Wert angegeben werden.
      Bei Plots z.B. gibt es dann mehrere '','','', als Platzhalter für die Parameter, die den Default haben sollen
      Code:
                  {{plot.period('og_1.Elternbad.heisdfzung',
                  ['og.Elternbad.heizung.ist','og.Elternbad.heizung.soll','og.Elternbad.heizung.estrich'],
                  'avg','48h','','','','',
                  ['Ist','Soll','Estrich'],
                  ['#FF9900','#66FF66','#6633FF'],'','','48h')}}
      Und ein zweiter Wunsch:
      Wenn eines der Items keine Werte zurück liefert, dann wird nicht nur die eine Kurve nicht angezeigt, sondern garkeine.

      Gruß,
      Hendrik

      Kommentar


        Bei Twig gibt es named arguments. Wäre natürlich cool und einiges könnte man optimieren. Aber ich glaube für die 2.9 wird das nix mehr...

        Kommentar


          Ja, das würde ich auch ganz toll finden.

          Zitat von bmx Beitrag anzeigen
          Bei Twig gibt es named arguments.
          Aber nicht für Macros, sonst würde es in smartVISU ja auch funktionieren. Oder habe ich etwas verpasst?

          Deshalb kann ich meines Wissens da nichts machen.

          Man könnte höchstes alle Makros so umbauen, dass sie einen einzelnen JSON-Parameter entgegen nehmen, aber so wäre nichts mehr kompatibel.

          Kommentar


            Ja, ich fürchte Du hast Recht. Ich hatte mir was über named arguments angeschaut und auch die Implementation requests von 2012/2013 gesehen und leider daraus geschlossen, das es für macros auch implementiert sei. Dem ist Stand Anfang 2018 leider nicht so.

            Kommentar


              smai : Der "Aktiv" Button in dem Device.uzsu ist noch nach unten verschoben. Hast Du das noch im Kopf? Oder sollte das schon erledigt sein, mit der Rückstellung einer Änderung (Weiß nicht mehr welche das war, aber da war was;-))

              Kommentar


                In der Doku bei Plot.period fehlt in der Beschreibung zu "MODE" noch "raw".

                Kommentar


                  smai

                  Hier haben wir bei der UZSU über die Möglichkeit des Offset zum Sonnenauf- bzw. Untergang in Grad und Minuten diskutiert. Du hattest diese Option auch schon in 2.9 eingebaut.

                  Irgendwie scheint es aber wieder weg zu sein, zumindest nach dem Update auf den neuesten Stand des develop gibt es diese Option in der UZSU nicht mehr.
                  Würdest Du bitte nochmal nachschauen?

                  Beste DANK!
                  Michael

                  Kommentar


                    Zitat von schuma Beitrag anzeigen
                    Der "Aktiv" Button in dem Device.uzsu ist noch nach unten verschoben.
                    Zitat von schuma Beitrag anzeigen
                    In der Doku bei Plot.period fehlt in der Beschreibung zu "MODE" noch "raw".
                    Ist beider bei mir lokal erledigt und werde ich noch committen.


                    Zitat von Sisamiwe Beitrag anzeigen
                    Irgendwie scheint es aber wieder weg zu sein
                    In der Tat, ich finde es auch nicht mehr. Ich muss nochmal danach suchen.

                    Kommentar


                      smai

                      Danke. Vielleicht kannst Du kurz Bescheid geben, wenn Du es wieder gefunden hast.

                      Kommentar


                        Ich bin grad am suchen, kommt in wenigen Minuten.

                        Kommentar


                          So, Korrektur ist committed.
                          Es war immer da, aber wurde nicht angezeigt, weil die Steuerung des Backend-Typs (SHNG oder FHEM) fehlerhaft war.

                          Kommentar


                            smai Eine Sache noch.....
                            Könnte man beim basic.symbol noch etwas ändern?

                            Die Farbe (Color) in dem Widget bezieht sich ja auf das Icon. Wenn jetzt kein Icon im Widget angegeben ist und NUR Text vorhanden ist, könnte man dann die Farbangabe für den Text verwenden. Kann man das noch evtl. einbauen?

                            Kommentar


                              Zitat von Morg Beitrag anzeigen
                              der Templatechecker kennt bei multimedia.image den Parameter "fill" nicht

                              'fill' war auch nicht in der Doku, deshalb hatte ich es dem Template Checker nicht beigebracht.



                              Zitat von pfischi Beitrag anzeigen
                              Das Problem ist, das während des Verschiebens des Sliders ein neuer Wert von außen in das Item geschrieben wird, und zwar der Wert, der kurz vorher über den Slider während des Verschiebens gesetzt wurde
                              Zitat von schuma Beitrag anzeigen
                              Ich habe von dem Sliderproblem hier mal ein kurzes Video gemacht:
                              https://youtu.be/SL74CyPaC8Q

                              Das war nicht ganz einfach nachzubauen. Bitte prüft, ob meine Änderung zum erwünschten Ergebnis führt.



                              Zitat von schuma Beitrag anzeigen
                              Der "Aktiv" Button in dem Device.uzsu ist noch nach unten verschoben.
                              Zitat von schuma Beitrag anzeigen
                              In der Doku bei Plot.period fehlt in der Beschreibung zu "MODE" noch "raw".
                              Ist nun committed.

                              Kommentar


                                Zitat von Sandman60 Beitrag anzeigen
                                in der V2.7 hatte ich mir ein Widget gebaut das mir einfach ein basic.symbol zwischen ein <div> </div> gepackt hat damit die Icons im Wahrheitsfall untereinander und nicht nebeneinander angezeigt wurden.
                                Gibt es eine solche Möglichkeit im neuen basic.symbol oder portiere ich besser mein Widget?
                                Dafür ein Widget zu machen scheint mir fast etwas übertrieben, schreib doch einfach die <div> jeweils in den Code deiner Pages.

                                Kommentar

                                Lädt...
                                X