Ankündigung

Einklappen
Keine Ankündigung bisher.

Sonos | edomi

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

  • SeatSLF
    antwortet
    Würdest du den Baustein später im Download Forum anbieten?

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • timberland
    antwortet
    Fehlt nur mehr das Visuelement für das Cover...

    Sonos.png

    Einen Kommentar schreiben:


  • timberland
    antwortet
    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();
    ?> 

    Einen Kommentar schreiben:


  • 2Fast4You78
    antwortet
    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..

    Einen Kommentar schreiben:


  • saegefisch
    antwortet
    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

    Einen Kommentar schreiben:


  • gaert
    antwortet
    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").

    Einen Kommentar schreiben:


  • timberland
    antwortet
    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.

    Einen Kommentar schreiben:


  • gaert
    antwortet
    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

    Einen Kommentar schreiben:


  • timberland
    antwortet
    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();
    ?> 

    Einen Kommentar schreiben:


  • timberland
    antwortet
    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/


    Einen Kommentar schreiben:


  • gaert
    antwortet
    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.

    Einen Kommentar schreiben:


  • pfischi
    antwortet
    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

    Einen Kommentar schreiben:


  • gaert
    antwortet
    HTTP-GET ist kein Problem - POST habe ich noch nicht implementiert (weil selten notwendig).

    Einen Kommentar schreiben:


  • timberland
    antwortet
    @ 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...

    Einen Kommentar schreiben:

Lädt...
X