Ankündigung

Einklappen
Keine Ankündigung bisher.

SSE | Server-Sent-Events

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

    SSE | Server-Sent-Events

    Hallo zusammen,

    ist es möglich mit Edomi/Lbs Events via SSE zu empfangen ?
    Wenn ja, was wäre dazu nötig (a red-line) ?

    Zuletzt geändert von coliflower; 17.01.2017, 14:38.
    Danke und LG, Dariusz
    GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

    #2
    gaert Hallo Christian,

    Ich weiß du hast wichtigeres zu tun aber...

    Ein JA, mit Edomi kann man den Empfang von Events realisieren oder ein NEIN wäre nett um mich in diese Materie weiter einzulesen oder damit aufzuhören
    DANKE.

    PS: mit cURL im Terminal funktioniert es ...

    Code:
    curl -X GET --header 'Accept: text/event-stream' --header 'Authorization: Bearer [ACCESS-token]' 'https://api.home-connect.com/api/homeappliances/SIEMENS-SX578S06TE-68A40E0021F0/events'

    Eine mögliche Antwort:
    Code:
    event:STATUS
    
    data:{"items":[{"timestamp":1484033177,"handling":"none","key":"BSH.Common.Status.RemoteControlStartAllowed","value":false,"level":"hint"},{"timestamp":1484033177,"handling":"none","key":"BSH.Common.Status.RemoteControlActive","value":true,"level":"hint"},{"timestamp":1484033177,"handling":"none","key":"BSH.Common.Status.DoorState","value":"BSH.Common.EnumType.DoorState.Open","level":"hint"},{"timestamp":1484033177,"handling":"none","key":"BSH.Common.Status.OperationState","value":"BSH.Common.EnumType.OperationState.Ready","level":"hint"}]}
    
    id:SIEMENS-SX578S06TE-68A40E0021F0
    
    
    
    
    event:EVENT
    
    data:{"items":[{"timestamp":1484033177,"handling":"none","key":"BSH.Common.Event.ProgramFinished","value":"BSH.Common.EnumType.EventPresentState.Off","level":"hint"},{"timestamp":1484033177,"handling":"acknowledge","key":"BSH.Common.Event.ProgramAborted","value":"BSH.Common.EnumType.EventPresentState.Off","level":"hint"}]}
    
    id:SIEMENS-SX578S06TE-68A40E0021F0
    
    
    
    
    event:NOTIFY
    
    data:{"items":[{"timestamp":1484033177,"handling":"none","key":"BSH.Common.Root.ActiveProgram","value":null,"level":"hint"},{"timestamp":1484033177,"handling":"none","key":"BSH.Common.Root.SelectedProgram","value":"Dishcare.Dishwasher.Program.Auto2","level":"hint"},{"timestamp":1484033177,"handling":"none","key":"BSH.Common.Setting.PowerState","value":"BSH.Common.EnumType.PowerState.On","level":"hint"},{"timestamp":1484033177,"handling":"none","key":"BSH.Common.Option.ProgramProgress","unit":"%","value":0,"level":"hint"},{"timestamp":1484033177,"handling":"none","key":"BSH.Common.Option.RemainingProgramTime","unit":"seconds","value":10800,"level":"hint"}]}
    
    id:SIEMENS-SX578S06TE-68A40E0021F0
    
    
    
    
    event:NOTIFY
    
    data:{"items":[{"timestamp":1484033178,"handling":"none","key":"BSH.Common.Option.StartInRelative","unit":"seconds","value":0,"level":"hint"}]}
    
    id:SIEMENS-SX578S06TE-68A40E0021F0
    Danke und LG, Dariusz
    GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

    Kommentar


      #3
      Warum sollte es dann mit curl in php nicht funktionieren?
      Pack das doch in ein kleines php Skript und teste es. Wenn das geht, dann bau einen LBS drum herum.

      Kommentar


        #4
        Das war meine Frage ob es geht oder nicht um nicht noch mehr Zeit damit zu verbringen wenn es nicht geht … nun weiß ich dass es geht - danke !

        Mit Skript meinst du ein PHP Datei dich in im Terminal ausführe ?

        Der cURL „Bereich“ sieht derzeit so aus … Leider weiß ich nicht nach welchen Stichworten ich googeln muss um weitere Infos zu sammeln - bin aber auch für bereitgestellten Code nicht böse ;-)

        PHP-Code:
                $header[] = 'Accept: text/event-stream,application/vnd.bsh.sdk.v1+json';
                
        $header[] = 'Cache-Control: no-cache';
                
        $header[] = 'Authorization: Bearer [access_token]';
                
        $dari 'https://api.home-connect.com/api/homeappliances/SIEMENS-SX578S06TE-68A40E0021F0/events';
                
        $ch curl_init();
                
        curl_setopt($chCURLOPT_URL            $dari);
                
        curl_setopt($chCURLOPT_CONNECTTIMEOUT 10);
                
        curl_setopt($chCURLOPT_RETURNTRANSFER true);
                
        curl_setopt($chCURLOPT_HEADER         true);
                
        curl_setopt($chCURLOPT_TIMEOUT        80);
                
        curl_setopt($chCURLOPT_USERAGENT      'edomi');
                
        curl_setopt($chCURLOPT_SSL_VERIFYPEER true);
                
        curl_setopt($chCURLOPT_HTTPHEADER     $header);
                
        $result curl_exec($ch);
                    
        LB_LBSID_Debug($id'$result ................ '.$result6$UserLogLevelfalse);
                
        curl_close($ch); 
        Danke und LG, Dariusz
        GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

        Kommentar


          #5
          Ich würde es mal identisch zum Kommandozeilen CURL machen. Dort hast du nur 2 Header, hier jedoch 3 und dazu noch etwas anders.

          PHP-Code:
          curl_setopt($chCURLOPT_HTTPHEADER, array(  'Accept: text/event-stream',    'Authorization: Bearer [ACCESS-token]' )); 
          Und die SSL Verífication solltest du mal abschalten:

          PHP-Code:
          curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
          curl_setopt($chCURLOPT_SSL_VERIFYHOST0); 

          In Summe würde ich es mal so probieren:

          PHP-Code:
          $url 'https://api.home-connect.com/api/homeappliances/SIEMENS-SX578S06TE-68A40E0021F0/events';
          $header = array('Accept: text/event-stream','Authorization: Bearer [ACCESS-token]'));
          $ch curl_init();
          curl_setopt($chCURLOPT_URL            $url);
          curl_setopt($chCURLOPT_CONNECTTIMEOUT 10);
          curl_setopt($chCURLOPT_RETURNTRANSFER true);
          curl_setopt($chCURLOPT_HEADER         true);
          curl_setopt($chCURLOPT_TIMEOUT        80);
          curl_setopt($chCURLOPT_HTTPHEADER     $header);
          curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
          curl_setopt($chCURLOPT_SSL_VERIFYHOST0);
          $result curl_exec($ch);
          print_r($ch);
          print_r($result);
          curl_close($ch); 

          Kommentar


            #6
            Danke André,

            leider tut sich nichts wenn ich im Terminal den Befehl: php sse.php mit dem Code oben starte … Nach dem Timeout (?) kehrt der Terminal zurück zur Eingabe ...

            Danke und LG, Dariusz
            GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

            Kommentar


              #7
              und das obige CURL Statement in der Konsole funktioniert einfach so ohne dass du irgendetwas anderes vorher machst?
              Keine Authentisierung, Login, etc.?
              Ist das eine öffentlich Adresse: https://api.home-connect.com ???

              Kommentar


                #8
                Richtig, in der Konsole funktioniert es - und anstatt [ACCESS-token] steht da tatsächlich ein sehr langer TOKEN (954-Zeichen) …
                Dieser Token wird dem CLIENT bereitgestellt (vorher wird ein CODE + REFRESH-token bereitgestellt = OAuth2) , wenn der OWNER der Daten, dies mit dem Id + Passwort seines Kontos vorher bestätigen.
                Somit ist dieser ACCESS-token eine Art Schlüssel mit dem jeder auf die Daten des Owner zugreifen kann - ähnlich wenn du zB Twitter oder Facebook oder Synology erlaubst auf deine Daten zuzugreifen ...

                Die Adresse - vermute ich - kann nicht öffentlich sein, weil diese die base_uri des API und der dahinter liegenden Daten ist.

                Hier scheint irgendetwas anders zu sein … Konsolen Befehl/Setup vs. sse.php mit den cURL-Einstellungen :-(

                Danke und LG, Dariusz
                GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                Kommentar


                  #9
                  Du verwendest aber denselben Access Token im PHP Skript, richtig?
                  Enthält der ggf. seltsame Zeichen

                  Dass gar nichts zurück kommt, finde ich seltsam, denn selbst wenn ich die URL in meinem Browser kopiere, dann kommt ein json File zurück, welches sagt, dass ich nicht authentifiziert bin.

                  Habe das gerade mal bei mir getestet. Zumindest kommt hier sofort eine Rückmeldung:

                  2017-01-10 17_29_05-root@edomi-development_~_lbs_Scripts.png

                  Klar, dass es eine Fehlermeldung ist, da ich ja kein Access Token habe.

                  Kommentar


                    #10
                    Die Zeichen sind Buchstaben + Ziffern + „Punkte“ + „Bindestrich“ + „Underline“ …
                    Das was zurück kommen sollte ist - denke ich - kein echter JSON sondern Text-lines (siehe erste Post) auch deutet das „Accept“ text/event-stream darauf hin, oder ?

                    Ich schicke dir den Inhalt der sse.php mit den Token zu (der ist eh nur 24h gültig) ...

                    Danke !
                    Danke und LG, Dariusz
                    GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                    Kommentar


                      #11
                      und das aus dem ersten Post ist wirklich das was an der Kommandozeile zurückkommt? Oder das was du erwarten würdest?

                      Kommentar


                        #12
                        Das was tatsächlich zurück kommt, wenn mein Geschirrspüler Aktiv ist ...
                        Danke und LG, Dariusz
                        GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                        Kommentar


                          #13
                          Also bei mir zeigt die Kommandozeile dasselbe Verhalten wie das PHP Skript. Es wartet .... Vermutlich darauf, dass etwas mit deinem Geschirrspüler passiert
                          Das Skript empfängt vermutlich nur etwas wenn auch ein Event kommt, daher auch Server Sent Events. Und wenn kein Event anliegt, dann passiert auch nichts.

                          Kommentar


                            #14
                            OK, wenn der GS ausgeschaltet ist, dann kommt ca. all 50 Sekunden nur - in etwa:

                            event: …
                            data: …
                            Id: ...



                            Ich habe jetzt den GS ein- und ausgeschaltet, dass sah so aus - jetzt geht es nicht (wahrscheinlich weil du dran hängst ;-)
                            Code:
                            event:NOTIFY
                            
                            data:{"items":[{"timestamp":1484033205,"handling":"none","key":"BSH.Common.Setting.PowerState","value":"BSH.Common.EnumType.PowerState.Off","level":"hint"}]}
                            
                            id:SIEMENS-SX578S06TE-68A40E0021F0
                            Danke und LG, Dariusz
                            GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                            Kommentar


                              #15
                              stimmt ... diese Meldungen habe ich jetzt auf der Command Line bekommen.
                              versuche es jetzt noch mal per php ...

                              Kommentar

                              Lädt...
                              X