Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie wird der Buffer mit den Items des SmarthomeNG-Servers gefüllt?

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

    Wie wird der Buffer mit den Items des SmarthomeNG-Servers gefüllt?

    Hallo liebe Profis,

    ich bin Anfänger und kämpfe mich gerade durch das System, welches hinter der SmartVISU steckt.
    Leider scheitere ich immer wieder an einer Frage:
    Wie wird der Buffer mit den Items des SmarthomeNG-Servers gefüllt? die io Funktion read: ist doch komplett leer?
    Wie frage ich die aktuellen Werte der Items ab?

    Wäre schön, wenn mir jemand helfen könnte.
    Schon mal vielen Dank!

    #2
    Damit ich dies verständlich erläutern kann, möchte ich etwas mehr über deinen Background wissen, bevor ich auf die Frage eingehe.

    Was hast du genau vor, anscheinend nutzt du ja nicht die Widgets.
    Und wie gut kennst du dich mit JavaScript und HTML aus?

    P.S.: Da dies definitiv keine kurze Frage mit kurzer Antwort ist, habe ich ein eigenes Thema daraus gemacht.

    Kommentar


      #3
      Jetzt bin ich mal gespannt. Hab mir zwar im Laufe der Jahre die meisten Dinge durch heiteres Coderaten zusammengereimt und aus Threads hier lernen dürfen, aber so eine Grundlagenbesohlung hätte ich mir damals auch gewünscht.

      @SpowiM: Um Dich noch mehr zu verwirren: io.write geht übrigens prima, und ja: io.read ist leer.

      /tom

      Kommentar


        #4
        Hi,

        vielen Dak für die schellen Antworten und die Übernahme in ein eigenes Thema.

        Ich war schon immer technik begeistert, da mich aber im Mai eine schwere Knieverletzung aus dem Rennen geommen hat, nutze ich jetzt die Zeit (bin seit dem Arbeitsunfähig und konnte lange Zeit nur sitzen und liegen) mich intensiv mit den Themen HTML, JavaScript, JQuery und PHP zu beschäftigen.
        Ich bin also definitiv Anfänger traue mir aber zu, das Meiste vom geschriebenen Code zu verstehen.

        Wir haben in den letzten beiden Jahren ein altes Forsthaus saniert und mit KNX-Technik versehen. Dazu habe ich nun auf einen Raspberry Pi einen SmarthomeNG Server mit SmartVISU installiert.

        Da ich gern selbst widgets erstellen möchte, bzw. bestehende individuell anpassen, möchte ich die Funktionsweise verstehen.
        Das gelingt mir glaube ich recht gut, io.write (Danke Tom!) habe ich auch schon erfolgreich getestet, ich finde nur eben die Stelle nicht, an der der Puffer befüllt wird.

        Kommentar


          #5
          Ich hatte vergessen zu fragen, welche Version der smartVISU du nutzt. Wenn du eigene Widgets machen willst, würde ich dir zu develop (auch bereits oft 2.9 genannt) raten. Da ist die Entwicklung von Widgets deutlich übersichtlicher.
          Im Readme der Dropins gibt es eine Anleitung, wie eigene Widgets ab dieser Version erstellt werden können.

          Allerdings merke ich eben, dass genau die Nutzung von Items dort nicht beschrieben ist. Es ist aber recht einfach:
          Das HTML-Tag muss ein Attribut namens data-item haben, welches den Namen des Items enthält. Wenn mehrere Items verwendet werden, sollten diese per Twig-Funktion {{ implode(itemliste) }} eingefügt werden.
          Der Wert der Items wird dann an die update-Methode des Widgets übergeben und kann dort verarbeitet werden.

          Anstelle io.write() sollte in Widgets übrigens this._write(value, itemindex) implementiert in lib/base/base.js:2054 verwendet werden.
          Der Parameter itemindex bezieht sich dabei auf die Nummer des items aus dem HTML-Attribut data-item. Wenn es nur ein Item in diesem Widget gibt, kann er ganz weggelassen werden.


          Obwohl der interne Datenfluss für die Entwicklung von Widgets nicht relevant ist, hier die Erläuterung fürs Interesse.
          Achtung: Keine dieser Methoden sollte direkt aufgerufen werden, weil ich das nicht als externes API ansehe und dies damit jederzeit ändern kann.

          In pages/base/root.html:196 wird bei jedem Seitenwechsel io.run() ausgeführt, welches wiederum io.monitor() aufruft. Diese fragt dann per widget.listeners() in lib/base/base.js:L1594-L1609 die auf der aktuellen Seite benötigten Items ab und sendet den monitor Befehl per Websocket an SmartHomeNG.
          Dies bewirkt, dass SmartHomeNG die Werte dieser Items - wie auch jede spätere Wertänderung - auf dem Websocket zurücksendet.
          Die empfangenen Daten werden in io.socket.onmessage verarbeitet und per widget.update() in den Buffer geschrieben. Dort wird auch die update-Methode der betroffenen Widgets aufgerufen.
          Weil im Fall von SmartHomeNG die Änderungen automatisch gesendet wird (= push), ist io.read() leer. Diese wird nur bei Backends benötigt, welche dies nicht unterstützen und deshalb regelmässig abgefragt werden müssen (= pull).

          Wie man sieht, ist das ganze mMn unnötig kompliziert, weshalb ich das in einer späteren Version umbauen möchte. Genau deshalb sollte nichts davon direkt verwendet werden.
          Wenn man unbedingt etwas aus dem Buffer lesen will, sollte dies per widget.get() abgefragt werden. Ich sehe aber aktuell keinen vernünftigen Anwendungsfall dafür.

          Kommentar


            #6
            Super! Vielen Dank!

            aktuell verwende ich noch die 2.8
            Dann werde ich mal auf die 2.9 umstellen und mich erst anschließend weiter um die Entwicklung kümmern.
            Vielen Dank für das Erläutern des internen Datenflusses. Damit kann ich nun sicher gehen,
            dass der Puffer immer aktuell ist und brauche ja nur auf die Items darin zugreifen.

            Da ich gern Dinge verstehe und nicht nur nutze, hat mir deine Antwort sehr weiter geholfen! Danke!

            Kommentar

            Lädt...
            X