Ankündigung

Einklappen
Keine Ankündigung bisher.

Sonos | edomi

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

    #16
    @ pfischi

    den Server hätte ich mal laufen.
    Könnte man über http GET oder POST von Edomi mal Play und Stop senden? Komm da irgendwie nicht weiter...

    Kommentar


      #17
      HTTP-GET ist kein Problem - POST habe ich noch nicht implementiert (weil selten notwendig).
      EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

      Kommentar


        #18
        Zitat von timberland Beitrag anzeigen
        @ pfischi

        den Server hätte ich mal laufen.
        Könnte man über http GET oder POST von Edomi mal Play und Stop senden? Komm da irgendwie nicht weiter...
        Leider brauchen wir hier tatsächlich POST-Methoden. Für Rückmeldungen von den Lautsprechern zusätzlich UDP (integriert als Listener).

        Aber als Trockenübung kannst du zum Testen mal die sonos_cmd starten (liegt im gleichen Verzeichnis wo auch der Broker auf dem Server liegt). Dort kannst du mit der Kommandozeile deine Speaker steuern. Hilfe gibt's bei Github oder einem beherzten Druck auf Taste h (oder help) während sonos_cmd läuft.

        Gruss,

        Stefan
        Sonos

        Kommentar


          #19
          POST zu implementieren ist nun wahrlich kein Hexenwerk - ich hatte es schlicht noch nie benötigt... Werde ich demnächst mal einbauen.

          Der "Rückkanal" per UDP ist prinzipiell auch kein Problem, allerdings habe ich jetzt keine Zeit für sowas (und ich habe kein Sonos zum Testen). Das ist doch eine nette Aufgabe für einen "Logikbaustein" - Doku ist in Arbeit.
          EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

          Kommentar


            #20
            Hallo,

            hat das vielleicht jemand laufen und könnte mich hier unterstützen, gerne über PN.
            Bekomm das irgendwie nicht zum laufen.

            http://duncan3dc.github.io/sonos/


            Kommentar


              #21
              Christian

              ...würde da etwas grob fahrlässig dagegen sprechen wenn man das so löst im EXEC Bereich?
              Funktionieren würde das mal alles.


              PHP-Code:
              while(getSysInfo(1)>=1) {    //Hauptschleife (wird beim Beenden oder Neustart von EDOMI verlassen)
                  
                  
              if ($E=getLogicEingangDataAll($id)) {
                  
              $IP_Addr $E[2]['value'];
              $sonos = new PHPSonos($IP_Addr);


                      if (
              $E[4]['value']==1){
                          
              $sonos->Stop();
                      }
                      
                      if (
              $E[3]['value']==1){
                          
              $sonos->Play();
                      }


              $positionInfo=$sonos->GetPositionInfo();
              $mediaInfo=$sonos->GetMediaInfo();
              $transportInfo=$sonos->GetTransportInfo();
              $volume=$sonos-> GetVolume();
              $radioInfo=$sonos->RadiotimeGetNowPlaying();

                  if (
              array_key_exists('title'$mediaInfo)) {

                      
              setLogicLinkAusgang($id,4,$positionInfo["streamContent"]);
                      
              setLogicLinkAusgang($id,3,$mediaInfo["title"]);
                      
              setLogicLinkAusgang($id,5,'');
                      
              setLogicLinkAusgang($id,6,$radioInfo["logo"]);
                  }
                  else{
                      
              setLogicLinkAusgang($id,3,'');
                      
              setLogicLinkAusgang($id,4,$positionInfo["title"]);
                      
              setLogicLinkAusgang($id,5,$positionInfo["artist"]);
                      
              setLogicLinkAusgang($id,6,'');
                  }
              setLogicLinkAusgang($id,1,$transportInfo);
              setLogicLinkAusgang($id,2,$volume);
                  if (
              $transportInfo == 3) {
                      
              setLogicLinkAusgang($id,3,'');
                      
              setLogicLinkAusgang($id,4,'');
                      
              setLogicLinkAusgang($id,5,'');
                      
              setLogicLinkAusgang($id,6,'');
                  }

              }
                  
              usleep(1000000*4);        //CPU-Last verteilen (die Länge der Pause sollte je nach Bedarf angepasst werden - je länger, desto ressourcenschonender)
              }

              //-------------------------------
              //Dämon wurde beendet (EDOMI wurde beendet oder neugestartet)
              //Achtung: Nach ca. 3 Sekunden wird der Prozess vom Betriebssystem hart beendet!
              //-------------------------------
              //eigener Code, z.B. Aufräumen, Verbindungen trennen, etc.
              //setLogicElementStatus($id,0);

              sql_disconnect();
              ?> 

              Kommentar


                #22
                Im Prinzip ok. Bedenke aber, dass z.B. E3 immer wieder den Play-Befehl ausführen wird, solange E3 = 1 ist... Also mit jedem schleifendurchlauf
                EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                Kommentar


                  #23
                  Ja, darum habe ich an den Eingängen davor den Impuls LBS geschalten. Sonst hätte er z.B. immer ausgeschalten wenn ich wo anders einschalten würde.
                  So kann ich Schalten von wo ich möchte und der LBS bekommt das mit.

                  Kommentar


                    #24
                    Das ist aber ein bisschen "dreckig"... Eleganter wäre es, wenn Dein LBS die [refresh]-Eigenschaft auswerten würde - oder z.B. alterWert != neuerWert vergleichen würde (siehe Thread von coliflower "iTunes-LBS").
                    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                    Kommentar


                      #25
                      timberland und pfischi: Braucht Ihr noch eine funktionierende POST-Lösung für den EXEC-Teil oder macht das eine externe Lösung für Euch? Hätte bei Bedarf eine EXEC-Lösung mit https

                      Kommentar


                        #26
                        Zitat von saegefisch Beitrag anzeigen
                        timberland und pfischi: Braucht Ihr noch eine funktionierende POST-Lösung für den EXEC-Teil oder macht das eine externe Lösung für Euch? Hätte bei Bedarf eine EXEC-Lösung mit https
                        Immer her damit.. Was wir ham das ham wir..
                        www.knx-Hausblog.de

                        Kommentar


                          #27
                          Christian

                          Meinst jetzt ist es nicht mehr "dreckig"....

                          PHP-Code:
                          sql_connect();



                          //-------------------------------
                          //Dämon wurde gestartet
                          //-------------------------------
                          //eigener Code...

                          while(getSysInfo(1)>=1) {    //Hauptschleife (wird beim Beenden oder Neustart von EDOMI verlassen)
                              
                              
                          if ($E=getLogicEingangDataAll($id)) {
                              
                          $ip $E[2]['value'];
                          $sonos = new SonosAccess($ip);

                                  if (
                          getLogicElementVar($id,10)==1) { 
                                      
                          $sonos->SetAVTransportURI('x-rincon-queue:RINCON_B8E9378E827A01400#0',$MetaData="");
                                      
                          $sonos->Play();
                                      
                          setLogicElementVar($id,10,0);
                                  }
                                  if (
                          getLogicElementVar($id,9)==2) { 
                                      
                          $sonos->SetRadio('x-rincon-mp3radio://arabella.stream.kapper.net:8000/arabellavie'$radio_name "Radio Arabella" );
                                      
                          $sonos->Play();
                                      
                          setLogicLinkAusgang($id,7,2);
                                      
                          setLogicElementVar($id,9,0);
                                  }

                                  if (
                          getLogicElementVar($id,9)==1) { 
                                      
                          $sonos->SetRadio('x-rincon-mp3radio://mp3stream7.apasf.apa.at:8000'$radio_name "OE3 Hitradio" );
                                      
                          $sonos->Play();
                                      
                          setLogicLinkAusgang($id,7,1);
                                      
                          setLogicElementVar($id,9,0);
                                  }
                                  
                                  if (
                          getLogicElementVar($id,8)==1) { 
                                      
                          $sonos->SetMute(0);
                                      
                          setLogicElementVar($id,8,0);
                                  }
                                  
                                  if (
                          getLogicElementVar($id,8)==2) { 
                                      
                          $sonos->SetMute(1);
                                      
                          setLogicElementVar($id,8,0);
                                  }

                                  if (
                          getLogicElementVar($id,7)==1) { 
                                      
                          $sonos->SetVolume($volume-=2);
                                      
                          setLogicElementVar($id,7,0);
                                  }
                                  
                                  if (
                          getLogicElementVar($id,6)==1) { 
                                      
                          $sonos->SetVolume($volume+=2);
                                      
                          setLogicElementVar($id,6,0);
                                  }
                                  
                                  if (
                          getLogicElementVar($id,5)==1) { 
                                      
                          $sonos->Pause();
                                      
                          setLogicElementVar($id,5,0);
                                  }

                                  if (
                          getLogicElementVar($id,4)==1) { 
                                      
                          $sonos->Stop();
                                      
                          setLogicElementVar($id,4,0);
                                  }
                                  
                                  if (
                          getLogicElementVar($id,3)==1) { 
                                      
                          $sonos->Play();
                                      
                          setLogicElementVar($id,3,0);
                                  }


                          $positionInfo=$sonos->GetPositionInfo();
                          $mediaInfo=$sonos->GetMediaInfo();
                          $transportInfo=$sonos->GetTransportInfo();
                          $volume=$sonos-> GetVolume();
                          $mute $sonos->GetMute();

                          //    if (array_key_exists('title', $mediaInfo)) {
                              
                          if (empty($mediaInfo['title']) !== true) {

                                  
                          setLogicLinkAusgang($id,3,$mediaInfo["title"]);
                                  
                          setLogicLinkAusgang($id,4,$positionInfo["streamContent"]);
                                  
                          setLogicLinkAusgang($id,5,'');
                                  
                          setLogicLinkAusgang($id,6,'');
                                  
                          setLogicLinkAusgang($id,8,'');
                                  
                          setLogicLinkAusgang($id,9,'');
                              }
                              else{
                                  
                          setLogicLinkAusgang($id,3,'');
                                  
                          setLogicLinkAusgang($id,4,$positionInfo['title']);
                                  
                          setLogicLinkAusgang($id,5,$positionInfo['artist']);
                                  
                          setLogicLinkAusgang($id,6,$positionInfo["album"]);
                                  
                          setLogicLinkAusgang($id,7,$positionInfo["albumArtURI"]);
                                  
                          setLogicLinkAusgang($id,8,$positionInfo["TrackDuration"]);
                                  
                          setLogicLinkAusgang($id,9,$positionInfo["RelTime"]);
                              }

                          setLogicLinkAusgang($id,1,$transportInfo);
                          setLogicLinkAusgang($id,2,$volume);
                          setLogicLinkAusgang($id,14,$mute);
                              if (
                          $transportInfo == 3) {
                                  
                          setLogicLinkAusgang($id,3,'');
                                  
                          setLogicLinkAusgang($id,4,'');
                                  
                          setLogicLinkAusgang($id,5,'');
                                  
                          setLogicLinkAusgang($id,7,'');
                                  
                          setLogicLinkAusgang($id,8,'');
                                  
                          setLogicLinkAusgang($id,9,'');
                              }

                          }
                              
                          usleep(1000000*1);        //CPU-Last verteilen (die Länge der Pause sollte je nach Bedarf angepasst werden - je länger, desto ressourcenschonender)
                          }

                          //-------------------------------
                          //Dämon wurde beendet (EDOMI wurde beendet oder neugestartet)
                          //Achtung: Nach ca. 3 Sekunden wird der Prozess vom Betriebssystem hart beendet!
                          //-------------------------------
                          //eigener Code, z.B. Aufräumen, Verbindungen trennen, etc.
                          //setLogicElementStatus($id,0);

                          sql_disconnect();
                          ?> 

                          Kommentar


                            #28
                            Fehlt nur mehr das Visuelement für das Cover...

                            Sonos.png

                            Kommentar


                              #29
                              Zum Thema POST-Methode: Siehe LBS "SMA SunnyPortal auslesen" im Download und Threat im Forum dazu. Viel Spaß damit.

                              Kommentar


                                #30
                                Würdest du den Baustein später im Download Forum anbieten?

                                Kommentar

                                Lädt...
                                X