Ankündigung

Einklappen
Keine Ankündigung bisher.

openHAB REST-API Server-Push im Client auslesen

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

    openHAB REST-API Server-Push im Client auslesen

    Ich versuche derzeit die openHAB Demo auf der Client-Seite zu verstehen und eine eigene Client App zu bauen.
    ich verwende die jquery.atmosphere.js library und mein Request Code sieht so aus:

    var request = {
    url: "http://localhost:8080/rest/items/Light_FF_Bed_Ceiling/state",
    contentType : "application/xml",
    headers : { Accept: "application/xml" },
    logLevel : "debug",
    transport : "websocket",
    enableProtocol: false,
    fallbackTransport: "long-polling"};

    Das funktioniert soweit wunderbar, nur muss ich so für jedes einzelne Item einen Request subscriben:
    z.B.:
    url: "http://localhost:8080/rest/items/Temperature_FF_Bed/state" oder
    url: "http://localhost:8080/rest/items/Weather_Temperature/state"

    Wenn ich jetzt aber versuche über die Sitemaps eine Response zu bekommen erhalte ich keine Events
    z.B.:
    Einmalig unvollständiges XML --> url: "http://localhost:8080/rest/sitemaps/demo"
    Keine Antwort --> url: "http://localhost:8080/rest/sitemaps/demo/demo"

    Es kann ja nicht sein, dass ich für jedes einzelne Item einen Atmosphere Subscribe durchführen muss, oder?

    Was habe ich übersehen???

    Vielen vielen Dank im Voraus für Hilfe...

    Grüsse
    Chris

    #2
    Ich kann da zwar nicht direkt weiterhelfen - aber evtl. einen WorkAround anbieten:
    openHAB kann auch als Backend für die CometVisu funktionieren.

    Wenn Du nun eine eigene Oberfläche schreiben willst (warum auch immer, Du könnstest ja auch bestehende erweitern...) dann brauchst Du nur den CometVisu Client (eine JavaScript Bibliothek) einbinden und kannst ab da mit komplett eigenem Code weiter machen.
    => Alles was für eine zuverlässige Kommunikation notwendig ist, ist vorhanden. Du musst dich dann nur noch um die Inhalte kümmern (ist eh genug Arbeit...)
    TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

    Kommentar


      #3
      Hallo Chris,

      vielen Dank mal für die Antwort - ich werde mir das anschauen

      Grüsse
      Chris

      Kommentar


        #4
        CometVisu Client JS - EventBus

        [QUOTE=Chris M.;414331] ...dann brauchst Du nur den CometVisu Client (eine JavaScript Bibliothek) einbinden...

        Grüss Dich Chris,

        gibt es ein Tutorial wie ich die Funktionen für den EventBus verwende?

        Grüsse
        Chris

        Kommentar


          #5
          Die Frage verstehe ich jetzt nicht ganz - liegt aber evtl. daran, dass ich openHAB nicht wirklich kenne (die Anbindung ist nicht von mir).

          Am einfachsten kannst Du aber erst mal mit der CometVisu direkt ausprobieren - da siehst Du auch ob die Verbindung schon läuft, per JS Debugger die Internas am lebenden Objekt, etc. pp.

          Wenn Du dann eine eigene Visu bauen möchtest und nur den CometVisu-Client (also die reine Kommunikations-Lib, die mit der Darstellung noch nichts zu tun hat) bekommen wir das schon hin. Das ist nicht wirklich schwer.
          TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

          Kommentar


            #6
            Hallo Chris,

            ich bin eigentlich nur am Auslesen des Event-Bus interessiert und wie das funktioniert bzw. wie du das mit CometVisu realisiert hast. Mit Atmosphere (Rest-API) und WebSockets?

            Grüsse
            Chris

            Kommentar


              #7
              Zitat von ChrisBeyer Beitrag anzeigen
              ich bin eigentlich nur am Auslesen des Event-Bus interessiert und wie das funktioniert bzw. wie du das mit CometVisu realisiert hast. Mit Atmosphere (Rest-API) und WebSockets?
              Für die Verbindung CometVisu<->openHAB gibt es ein eigenes Binding, dass das Cometvisu Protokoll implementiert. Das Binding nutzt Atmosphere und die CometVisu als Client greift darauf per Long-Polling zu.

              Dein Client müsste dann folgerdermaßen auf das Cometvisu-Binding zugreifen

              1. Eine neue Session starten, um eine Atmosphere Tracking ID zu bekommen per:
              http://openhab:8080/services/cv/l?user=xxx

              2. Initiale Statusabfrage aller Items die dich interessieren:
              http://openhab:8080/services/cv/r?s=...TEM_NAME_2&t=0

              3. Lausche auf Statusänderungen:
              http://openhab:8080/services/cv/r?s=..._2&i=TIMESTAMP

              die dritte Abfrage liefert eine Antwort sobald sich der Status von einem oder mehreren der abgefragten Items ändert und enthält die neuen Statis. Dein Client muss danach einen neuen Long-Polling Request senden.

              Ich hoffe das hilft Dir weiter, ich habe das jetzt mal so aus dem Gedächtnis runtergeschreiben, sollte aber im Wesentlichen stimmen.

              Und wie Chris schon bemerkt hat kannst Du Dir das meiste aus der CometVisu abgucken (Datei lib/cometvisu-client.js), bzw. komplett übernehmen.
              Gruß
              Tobias

              Kommentar


                #8
                Noch was vergessen: Statusänderungen von Items gehen über folgende URL:
                http://openhab:8080/services/cv/w?a=...F&ts=TIMESTAMP
                Gruß
                Tobias

                Kommentar


                  #9
                  Hallo Tobias,

                  Danke mal für die Antwort - ich werde es ausprobieren und gebe Feedback. Ich frage mich trotzdem immer noch was ich falsch mache, wenn ich den Bus direkt über die Atmosphere JS ansteuere...
                  Hmmm... Session starten und Atmosphere Tracking ID erhalten, vielleicht ist das der Schlüssel...

                  Grüsse
                  Chris

                  Kommentar

                  Lädt...
                  X