Ankündigung

Einklappen
Keine Ankündigung bisher.

SSE | Server-Sent-Events

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

    #16
    Das Skript empfängt vermutlich nur etwas wenn auch ein Event kommt
    Ich vermute das Skript empfängt nichts, es startet, öffnet den „Kanal“ und hält es offen für ankommende Nachrichten (push / uni-directional) …
    Anscheinend kann das das Terminal und cURL nicht ?
    Danke und LG, Dariusz
    GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

    Kommentar


      #17
      Ich vermute fast, dass das php Skript die Daten auch erhält, aber nicht ausgibt, d.h. sie nicht auf STDOUT flushed. Und wenn man das Skript mit ctrl-c abbricht, dann sind die Daten weg.

      Kommentar


        #18
        gibt es eine Möglichkeit das erhaltene in eine „Text-Datei zu speichern, ohne gleich an eine Datenbank zu denken ?
        Wenn es Text-Zeilen sind, dann könnte man diese vielleicht wieder aus was auch immer herausholen ?
        Danke und LG, Dariusz
        GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

        Kommentar


          #19
          2017-01-10 20_17_15-root@edomi-development_~_lbs_Scripts.png

          Kommentar


            #20
            gehts ?
            Wie sieht der Inhalt der test.php aus ?
            Danke und LG, Dariusz
            GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

            Kommentar


              #21
              wie wild ...

              Kommentar


                #22
                und zwar so ...

                PHP-Code:
                <?php
                $header 
                = array (
                        
                'Accept: text/event-stream',
                        
                'Authorization: Bearer ##########'
                );

                $url 'https://api.home-connect.com/api/homeappliances/SIEMENS-SX578S06TE-68A40E0021F0/events';

                $opts = array (
                        
                'http' => array (
                                
                'method' => "GET",
                                
                'header' => $header
                        
                )
                );

                $context stream_context_create $opts );

                $fp fopen $url"rb"false$context );

                while ( 
                ) {
                    
                $line stream_get_line $fp4096 );
                    echo 
                $line "\n";
                }

                ?>
                Viel Spaß

                Kommentar


                  #23
                  Also geht cUrl nicht ?
                  Danke und LG, Dariusz
                  GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                  Kommentar


                    #24
                    ich weiss zumindest nicht wie. Da ein stream geöffnet wird, der offen gehalten wird. Ich habe sowas mit curl noch nie gemacht.
                    Ist aber auch egal, ob curl oder stream. Stream ist da sicher geeigneter, da genau für sowas gemacht.
                    Und am Ende bekommst du in der while Schleife jede einzelne Zeile und kannst diese auswerten.
                    Damit sollte doch eigentlich alles möglich sein.

                    BTW: Was für ein GS ist das eigentlich? Da unsere weiße Ware auch schon >10 Jahre alt ist, steht bestimmt auch irgendwann ein Austausch an...

                    Kommentar


                      #25
                      Vielen DANK, ich werde weiter basteln

                      Ich habe hier noch etwas beim googeln gefunden - ist für mich aber zu hoch :-(
                      Vielleicht ist das eine Möglichkeit …?
                      https://github.com/obsh/sse-client/b...src/Client.php
                      https://github.com/guzzle/guzzle

                      Folgendes Gerät habe ich zuhause (war damals einer der ersten GS mit Home-Connect, musst die alte nach 10 Jahren „entsorgen“ - war ein Gerät aus der Rückrufaktion):
                      Code:
                      a:1:{s:4:"data";a:1:{s:14:"homeappliances";a:1:{i:0;a:7:{s:4:"name";s:15:"Geschirrspüler";s:5:"brand";s:7:"SIEMENS";s:3:"vib";s:10:"SX578S06TE";s:9:"connected";b:1;s:4:"type";s:10:"Dishwasher";s:7:"enumber";s:13:"SX578S06TE/01";s:4:"haId";s:31:"SIEMENS-SX578S06TE-68A40E0021F0";}}}}
                      Es ist Siemens, das Model ist die enumber ...
                      http://www.siemens-home.bsh-group.co...ste/SX578S06TE
                      Danke und LG, Dariusz
                      GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                      Kommentar


                        #26
                        Zitat von coliflower Beitrag anzeigen
                        Ich habe hier noch etwas beim googeln gefunden - ist für mich aber zu hoch :-(
                        Vielleicht ist das eine Möglichkeit …?
                        https://github.com/obsh/sse-client/b...src/Client.php
                        https://github.com/guzzle/guzzle
                        Aber warum komplizierter machen als notwendig, wenn o.g. Code dir alle Daten liefert, die du brauchst?

                        Kommentar


                          #27
                          Ich dachte ich kann es gleich hier rein nehmen:

                          PHP-Code:
                              public function makeRequest($path$method 'GET'$params = array(), $put_body NULL
                              {  
                          //    $params = URL-args/-parameter für den Zugriff
                                  
                          $ch curl_init();
                                  
                          $options self::$CURL_OPTS

                                  if (
                          $params) {
                                      if (isset(
                          $params['access_token'])) {
                                          
                          $options[CURLOPT_HTTPHEADER][] = 'Accept: application/vnd.bsh.sdk.v1+json,text/event-stream';
                                          
                          $options[CURLOPT_HTTPHEADER][] = 'Authorization: Bearer '.$params['access_token'];
                                          unset(
                          $params['access_token']);
                                      }
                                      switch (
                          $method)
                                      {
                                          case 
                          'GET':                                                        //    API-call via GET + AUTHENTIFICATION beim Endpoint
                                              
                          $path .= '?'.http_build_query($paramsnull'&');
                                              
                          $this->logKlasse('make/get/url ................... '.$path);
                                              
                          $this->logKlasse('make/get/par ................... '.serialize($params));
                                          break;
                                          case 
                          'EVENT':                                                    //    API-call via GET / EVENT ...
                                              
                          $options[CURLOPT_HTTPHEADER][] = 'Accept: text/event-stream';
                                              
                          $options[CURLOPT_HTTPHEADER][] = 'Cache-Control: no-cache';
                                              
                          $this->logKlasse('make/event/par ................. '.serialize($params));
                                          break;
                                          case 
                          'POST':                                                    //    API-call via POST ...    Access-Token aus Code + Refresh
                                              
                          $options[CURLOPT_HTTPHEADER][] = 'Content-Type: application/x-www-form-urlencoded';
                                              
                          $options[CURLOPT_POSTFIELDS] = http_build_query($paramsnull'&');
                                              
                          $this->logKlasse('make/post/par1 ................. '.serialize($params));
                                              
                          $this->logKlasse('make/post/par2 ................. '.$options[CURLOPT_POSTFIELDS]);
                                          break;
                                          case 
                          'PUT':                                                        //    API-call via PUT ... Settings + Progams
                                              
                          $options[CURLOPT_URL] = $path;
                                              
                          $options[CURLOPT_HTTPHEADER][] = 'Content-Type: application/vnd.bsh.sdk.v1+json';
                                              
                          $options[CURLOPT_HTTPHEADER][] = 'Content-Length: '.strlen($put_body);
                                              
                          $options[CURLOPT_CUSTOMREQUEST] = 'PUT';
                                              
                          $options[CURLOPT_POSTFIELDS] = $put_body;
                                              
                          $this->logKlasse('make/put/url ................... '.$path);
                                          break;
                                          case 
                          'DELETE':                                                    //    API-call via DELETE ... Programm beenden
                                              
                          $options[CURLOPT_URL] = $path;
                                              
                          $options[CURLOPT_CUSTOMREQUEST] = 'DELETE';
                                          break;                    
                                      }
                                  } 

                          Aber mit while() muss ich eh in den EXEC-Teil, am Ende …
                          Somit kann die Schleife solange laufen bis der Befehl kommt, dass der GS fertig ist und den EXEC theoretisch beenden kann, falls keine weiteren Aktionen benötigt werden ...
                          Danke und LG, Dariusz
                          GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                          Kommentar


                            #28
                            Das musst du ohnehin. Warum machst du nicht einfach eine WHILE Schleife wie oben beschrieben und liest alle Events und meldest die relevanten auf entsprechende Ausgänge. Dann läuft der LBS dauerhaft und bekommt immer alle Events mit.

                            Kommentar


                              #29
                              Für die EVENTS möchte ich es eh, wenn ein Programm gestartet wurde, da hast mich schon längst überzeug :-)
                              Den EXEC-Teil 24/7 laufen zu lassen, und das vielleicht für alle Geräte, davon bin ich noch nicht überzeugt … Um zu sehen dass jemand am GS etwas „umstellt“ ?
                              Denn Start bekomme ich so auch mit weil dann eine Meldung abgesetzt wird und die EVENTS „starten“.

                              Denn wenn ich zB die Steckdosen abschalten möchte, dann möchte ich vorher prüfen ob der zB GS noch läuft oder ob er den Status auf inaktiv gesetzt hat .. Da geht mit EVENTS und auch ohne (mit STAUTS).

                              Ich habe aber noch viel zu testen :-)

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

                              Kommentar


                                #30
                                Gerne. Die while Schleife verbraucht keine Ressourcen, da das stream_get_line() blocking ist. Das heißt die while-Schleife läuft nur einmal kurz wenn eine Zeile empfangen wurde.

                                Ähnlich funktionieren meine HUE Client LBS. Ich habe ca. 15 HUE Devices, jedes hat einen eigenen LBS, der eine while() Schleife hat und auf Nachrichten von der Bridge wartet. Der Bridge LBS ist hingegen nur einmal vorhanden und der pollt regelmäßig die HUE Bridge. Keinerlei Performance Probleme.

                                Kommentar

                                Lädt...
                                X