+ Antworten
Seite 1 von 46 1 2 3 11 ... LetzteLetzte
Ergebnis 1 bis 10 von 457
  1. #1
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    14,377

    Standard PHP Sonos (Klasse zum Ansteuern einzelner Player)

    Die aktuellste Version ist im Wiki zu finden:
    http://www.ip-symcon.de/wiki/PHPSonos


    Eine Version des Sonos Skriptes von hier: http://www.ip-symcon.de/forum/f7/ein...nsteuern-3541/

    Diesmal als PHP Klasse, die ihr vorher in euren 'scripts' Ordner kopieren müsst. Dann die IP-Adresse angeben und ihr könnt die einzelnen Befehle nutzen.

    PHP-Code:
    include("PHPSonos.inc.php");

    $sonos = new PHPSonos("192.168.3.183"); //Sonos ZP IPAdresse

    //Grundfunktionen
    //$sonos->Pause();
    //$sonos->Play();
    //$sonos->Next();
    //$sonos->Previous();
    //$sonos->Rewind();
    //$sonos->SetVolume(25); //0-100 in %
    //$sonos->SetPlayMode("NORMAL"); //REPEAT_ALL, SHUFFLE, NORMAL
    //$sonos->SetMute(false); //True = MUTE, False = KEIN MUTE

    //Klassik Radio abspielen
    //$sonos->SetRadio("x-rincon-mp3radio://players.creacast.com/creacast/klassik/playlist.pls");
    //$sonos->Play();

    //Neue MP3 abspielen
    $sonos->ClearQueue(); //Playlist löschen
    $sonos->AddToQueue("x-file-cifs://ipsserver/Public/test.mp3"); //Datei hinzufügen
    $sonos->SetQueue("x-rincon-queue:RINCON_"."HIER DIE MAC DES PLAYERS ZB: FFEEDDCCBBAA"."01400#0"); //Playlist auswählen (Nötig, wenn Radio vorher ausgewählt war)
    $sonos->Play();

    //$sonos->SetTrack(1); //1-n
    //$sonos->RemoveFromQueue(1); //1-n 
    paresy
    Angehängte Dateien Angehängte Dateien
    Geändert von paresy (06.05.11 um 23:06 Uhr)

  2. #2
    Registriert seit
    May 2006
    Ort
    Munich
    Beiträge
    149

    Hi,

    man kann sich bei dem Beispiel

    $sonos->SetQueue("x-rincon-queue:RINCON_"."HIER DIE MAC DES PLAYERS ZB: FFEEDDCCBBAA"."01400#0")

    noch etwas Recherche und Tipparbeit einsparen, in dem man sich die Mac-Adresse vom Sonos-System geben lässt.
    Ruft man folgende URL auf:
    http://<Ip-Adresse ZonePlayer>:1400/status/zp
    bekommt man eine XML-Antwort mit Infos zum ZonePlayer. Hierbei ist dann auch die Mac-Adresse enthalten.
    Die XML-Antwort schaut z.B. so aus:

    <?xml version="1.0" ?>
    <?xml-stylesheet type="text/xsl" href="/xml/review.xsl"?><ZPSupportInfo><ZPInfo><ZoneName>Küch e</ZoneName><ZoneIcon>x-rincon-roomicon:kitchen</ZoneIcon><LocalUID>RINCON_000E582665FE01400</LocalUID><SerialNumber>00-0E-58-26-65-FE:5</SerialNumber><SoftwareVersion>13.7-29120</SoftwareVersion><MinCompatibleVersion>12.0-00000</MinCompatibleVersion><HardwareVersion>1.1.16.4-2</HardwareVersion><IPAddress>192.168.178.91</IPAddress><MACAddress>00:0E:58:26:65:FE</MACAddress><Copyright>© 2004-2007 Sonos, Inc. All Rights Reserved.</Copyright><ExtraInfo>r8: 16.0-7</ExtraInfo><IdxTrk></IdxTrk></ZPInfo></ZPSupportInfo>

    Unter LocalUID findet sich der String, den man im $sonos->SetQueue Befehl braucht.
    Den String kann man z.B. über folgendes Codeschnipsel bekommen:
    $url = "http://".<ipAdresse des ZonePlayers>.":1400/status/zp";
    $xml = simpleXML_load_file($url);
    $result = $xml->ZPInfo->LocalUID;

    HTH Johannes
    __________________
    FHZ 1000PC, FHT80b, HMS100RM, FS10 Temp-/Feuchtesensor, FS20, HM Dimmer, HM Lan-Adapter, USB IR Toy, APC USV, Mac Mini mit Parallels.

  3. #3
    Registriert seit
    Jun 2009
    Beiträge
    53

    Standard Erweiterung

    Hallo,

    erst einmal Danke für das Bereitstellen der PHP Klasse!

    Mir fehlte jedoch das Abfragen des aktuellen Status des Sonos-Players.
    Daher habe ich die Klasse etwas erweitert:

    PHP-Code:

    include("PHPSonos.inc.php");

    $sonos = new PHPSonos("192.168.3.183"); //Sonos ZP IPAdresse

    $sonos->Stop();
    $volume $sonos->GetVolume(); // gibt die Lautstärke als Integer zurück
    $mute $sonos->GetMute(); // gibt ein bool zurück: TRUE -> MUTE an, FALSE -> MUTE aus
    $shuffleRepeat $sonos->GetTransportSettings(); // gibt ein Array zurück mit den keys "shuffle" und "repeat", welche jewils bool-Werte enthalten
    $status $sonos->GetTransportInfo(); // gibt den aktuellen Status des Sonos-Players als Integer zurück, 1: PLAYING, 2: PAUSED, 3: STOPPED
    $posInfo $sonos->GetPositionInfo(); // gibt ein Array mit den Informationen zum aktuellen Titel zurück (Keys: position, duration, artist, title, album, albumArtist, albumTrackNumber)

    SetValueInteger($volumeID$volume);
    SetValueBoolean($muteID$mute);
    SetValueInteger($statusID$status);
    SetValueBoolean($repeatID$shuffleRepeat["repeat"]);
    SetValueBoolean($shuffleID$shuffleRepeat["shuffle"]);
    SetValueString($titleID$posInfo["title"]);
    SetValueString($artistID$posInfo["artist"]);
    SetValueString($albumID$posInfo["album"]);
    SetValueString($positionID$posInfo["position"] . "/" $posInfo["duration"]); 

    Gruß,

    André

    Edit:

    - PHP-Klasse angepasst:

    - AlbumArt hinzugefügt:
    GetPositionInfo() gibt im Array mit dem Key "albumArtURI" den URI zum Abruf des Covers vom Sonos zurück
    - Fehler abgefangen, wenn ein Track kein Album, etc. hat

    Edit (25.07.2010):

    - Name vom Radiosender kann abgerufen werden: GetMediaInfo() gibt ein Array mit dem Key "title" zurück, welches den Sendernamen enthält.

    - URI und Senderbeschreibung hinzugefügt: GetPositionInfo() gibt nun mit den zusätzlichen keys "URI" und "streamContent" die entsprechenden Informationen zurück.

    - Problem mit Sonderzeichen behoben (Text wird nun in ISO-8859-1 zurückgegeben)
    Angehängte Dateien Angehängte Dateien
    Geändert von andre (25.07.10 um 16:32 Uhr)

  4. #4
    Registriert seit
    May 2010
    Ort
    Eppstein/Taunus
    Beiträge
    111

    Hi,

    euch beiden erstmal Danke für die Arbeit.
    Ich komme aber mit der Einbindung nicht ganz klar bzgl.der Variablen.

    Andre,erstmal Willkommen
    Wäre es möglich,als PHP-Anfänger ein Screenshoot oder eine
    Erklärung der zu erstellenden Variablen zu bekommen?

    Hab gerade 1h selbst probiert,aber komme nicht wirklich weiter.

    Vielen Dank und Grüße
    Robert
    Homematic CFG-LAN mit

  5. #5
    Registriert seit
    Feb 2009
    Ort
    Hamburg
    Beiträge
    1,854

    Moin....

    hab das Script gerade mal ausprobiert und hab das Problem das die "Wiedergabe" stoppt sobald ich das Script ausführe!! Woran kann das liegen!?

    Im IPS wird folgendes an Fehlern angezeigt!

    Notice: Undefined index: R:ALBUMARTIST in C:\IP-Symcon\scripts\PHPSonos.inc.php on line 273

    Notice: Undefined index: in C:\IP-Symcon\scripts\PHPSonos.inc.php on line 273

    Notice: Undefined index: UPNP:ORIGINALTRACKNUMBER in C:\IP-Symcon\scripts\PHPSonos.inc.php on line 274

    Notice: Undefined index: in C:\IP-Symcon\scripts\PHPSonos.inc.php on line 274

    Danke und Grüße aus Hamburg,

    Peter

    War schon spät...ähm ne ist spät!! Hab den FEHLER gefunden! Hab immer die STOP-Aktion mit ausgeführt!! tzzzz..... :-)


    @RAVENOUS:

    Ich hab mir einfach Variablen angelegt und diese ins Script eingefügt!!

    Siehe Screenshots!!!

    Gute Nacht,

    Peter
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Script_SONOS.JPG 
Hits:	1162 
Größe:	103.5 KB 
ID:	8653   Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Variablen_SONOS.JPG 
Hits:	748 
Größe:	38.7 KB 
ID:	8654  
    Geändert von Ferengi-Master (20.07.10 um 20:29 Uhr) Grund: multipost
    -MacMini(2011) =>Parallels 9=>Win7, FB7390, EIB-KNX, DMX-ArtNet, 2x EM24 DIN, SONOS ZP100/120/Play:1/Play:5/Sub, 1Wire=>Wiregate, xbee=>ROOMBA, Dreambox, DENON 2313, 8x Philips HUE -

  6. #6
    Registriert seit
    Feb 2009
    Ort
    Hamburg
    Beiträge
    1,854

    Standard Cover url abfragen?!

    Gibt es eigentlich ne Möglichkeit auch die Cover-URL abzufragen!? Das wäre ja nochmal was!!! :-)
    -MacMini(2011) =>Parallels 9=>Win7, FB7390, EIB-KNX, DMX-ArtNet, 2x EM24 DIN, SONOS ZP100/120/Play:1/Play:5/Sub, 1Wire=>Wiregate, xbee=>ROOMBA, Dreambox, DENON 2313, 8x Philips HUE -

  7. #7
    Registriert seit
    Dec 2005
    Ort
    Hamburg
    Beiträge
    2,254

    So langsam wird das ja richtig chique....

    Es fehlt halt irgendeine Möglichkeit des Dateien / Napster browsens....

  8. #8
    Registriert seit
    May 2010
    Ort
    Eppstein/Taunus
    Beiträge
    111

    Hallo Peter,

    hat super funktioniert.Er schreibt jetzt in die Variablen.Danke.
    Jetzt gehts noch an die Visualisierung

    Lässt du das Script jede Sekunde laufen oder hats du ein ausgelöstes Ereignis?

    Über den Status würde sich das ja ganz gut machen,aber wie bekommt er den aktuellen Status ohne das Script zeitlich laufen zu lassen?

    Oder fange ich da falsch an und denk zu kompliziert?

    Gruß Robert
    Homematic CFG-LAN mit

  9. #9
    Registriert seit
    Jun 2009
    Beiträge
    53

    @PeterChrisben:
    Deine Fehlermeldungen sollten in meiner angepassten Datei nicht mehr vorkommen. Ich hatte nicht abgefangen, was passiert, wenn ein Track kein Album, keinen Album-Artist, etc. besitzt.

    Außerdem habe ich den URI für das Cover hinzugefügt. Hier wird in etwa folgender String zurückgegeben:

    Code:
    http://<sonos-ip>:1400/getaa?u=x-file-cifs://<pfad-zur-mp3-datei>....
    Ich bin mir nur noch nicht ganz sicher, wie ich damit am besten weitermache. Zur Zeit habe ich es so gelöst, dass ich ein Medien-Objekt erstellt habe, welches auf die Datei "C:\IP-Symcon\media\AlbumArt.jpg" zeigt. Außerdem speichere ich in einer String-Variable die URI zum Cover. Beim Ausführen meines Scripts zum Aktualisieren, überprüfe ich zunächst, ob sich das Cover geändert hat. Wenn ja, dann lade ich dies mit der Funktion changeAlbumArt.

    Leider gibt es u.a. noch Probleme, wenn kein Cover vorhanden ist.

    Habt ihr da noch Verbesserungsvorschläge?

    PHP-Code:
    function changeAlbumArt ($albumArtURI$localFile$mediaID) {

        
    $readHandle fopen($albumArtURI"r");
        
    $writeHandle fopen($localFile"w");

        while (!
    feof($readHandle)) {
            
    fputs($writeHandlefgets($readHandle4096), 4096);
        }

        
    fclose($writeHandle);
        
    fclose($readHandle);
        
        
    IPS_SendMediaEvent($mediaID);

    }

    if (
    strcmp(GetValueString($albumArtUriID), $posInfo["albumArtURI"]) != 0) {
        
    changeAlbumArt($posInfo["albumArtURI"], "C:\\IP-Symcon\\media\\AlbumArt.jpg"$albumArtMedia);
        
    SetValueString($albumArtUriID$posInfo["albumArtURI"]);


  10. #10
    Registriert seit
    Sep 2008
    Ort
    Braunschweig
    Beiträge
    61

    Hi andre,

    die neue Sonos Klasse ist ja super.
    Gibt es auch die Möglichkeit im Radio-Modus des Players den Sendernamen, die kurze Programmbeschreibung, die URI des Senders und vielleicht weiter Infos abfragen?

    Gruß
    Schorsch
    IPS 4.x beta auf Raspberry, KNX, 1-Wire, Sonos

Ähnliche Themen

  1. Einzelne Sonos Player ansteuern
    Von paresy im Forum Audio & Video, TK-Anlagen, ISDN
    Antworten: 43
    Letzter Beitrag: 25.04.16, 19:25
  2. UIO 88 über PHP in V2.0 ansteuern
    Von Schneider im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 7
    Letzter Beitrag: 21.09.08, 21:40

Stichworte