Sonos Steuerung über Homematic und alle Einzelschritte

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

flotom
Beiträge: 7
Registriert: 14.06.2011, 09:00

Re: Sonos Steuerung über Homematic und alle Einzelschritte

Beitrag von flotom » 28.12.2012, 16:38

Hallo Ralf,

danke für deine Antwort.
Ich habe jetzt quasi noch einmal von vorne begonnen.
- USB Stick mit andrem Tool gemountet
- Name aber mit "Disk" auf dem Standardwert belassen
- phppro.tar auf den Stick kopiert und entpackt.
- php Server gestartet
- die sonos.php auf das www Verzeichnis kopiert
- skript ausgeführt und sieh da, es hat funktioniert...

Frag mich jetzt nicht warum ???

Beim ersten Mal hatte ich die Dateien mit Filezilla schon im entpackten Zustand auf den Stick kopiert -
vielleicht war das Schuld...

Was in der Log Datei jetzt anders ist - nach der 200 steht jetzt ein Wert, also nicht mehr 0...
Weiß du was der zweite Wert bedeutet ?

Möchte ganz gerne der Ursache auf den Grund gehen um im Fehlerfalle zu wissen, was zu tun ist :-)

Lg Thomas

looxer01
Beiträge: 442
Registriert: 06.05.2012, 13:17

Re: Sonos Steuerung über Homematic und alle Einzelschritte

Beitrag von looxer01 » 29.12.2012, 11:10

Hallo Thomas,

ich glaube es hängt mit dem Start des PHP-Servers zusammen.
In meiner obigen Anleitung fehlt ein Schritt, und zwar die Anpassung der Datei /var/datadisk/bin/myserver.
Hier muß auch noch das Verzeichnis angpaßt werden, also in meinem Fall auf datadisk geändert werden
"export LD_LIBRARY_PATH=/var/datadisk/lib/
lighttpd -f /var/datadisk/etc/mylighttpd.conf "
im Original steht dort /var/disk/lib/
Insofern hat dein geänderter Mount auf disk geholfen.

Also zusammenfassend und abweichend von meiner Anleitung:
1. für den USB stick ist das tool von Goglo empfehlenswert: viewtopic.php?f=31&t=9701&hilit=usb+stick+starten
Die Version 0.2 funktionierte bei mir

2. Die Datei /var/datadisk/myserver ist noch anzupassen von Verzeichnis /var/disk auf /var/datadisk zu ändern

Dann ein Troubleshoot, falls mal was nicht funktioniert:

- hat sich die Adresse der Homematic geändert ?
falls ja: müssen die Homematic Scripte angepaßt werden und der Router so eingestellt werden, dass immer dieselbe Adresse vergeben wird

- Haben sich die IP-Adressen der Sonos-Geräte geändert ?
falls ja: müssen PHP-Scripte angepaßt werden und der Router so eingestellt werden, dass immer dieselbe Adresse vergeben wird
die IP-Adressen von Sonos lassen sich über Sonos Desktop (PC) unter Hilfe "über mein Sonos System" -nachlesen

- ist der PHP-Server gestartet ?:
überprüfen auf Telnet Ebene: Befehl: PS.
es sollten zwei Prozesse am ende der Liste zu sehen sein: lightfpd.....etc

- ist richtige Verzeichnis in in datei /var/datadisk/etc/Mylighttpd.conf eingetragen ?
(Die Mylighttpd.conf im Original geht von /var/disk aus. also einfach /var/disk z.B. mit /var/datadisk ersetzen)

- Sind die Sonos spezifischen Steuerdateien Dateien in /var/datadisk/www abgelegt ?
z.B. heisst eine Datei bei mir: sonosBad .php. Die Datei sonosBad .php.txt ist angehängt im ersten Beitrag.
Die angepaßte Version (angepaßte IP-Adresse muß in /var/datadisk/www abgelegt werden.

Auch eine Überprüfung der Logs kann helfen:
- was steht im error log /var/log lighttpd.error.log
- was steht im Access log /var/log lighttpd.access.log
- was steht in der datei httpRequest im Verzeichnis /var/tmp ?
- und ggf auch die CCU Messages könnten helfen: /var/tmp/messages

Ich glaube das waren die wichtigsten checks.
Zusammen mit den Korrekturen der Anleitung sollte es möglich sein die Installation hinzubekommen und auch einen ersten Troubleshoot zu machen

flotom
Beiträge: 7
Registriert: 14.06.2011, 09:00

Re: Sonos Steuerung über Homematic und alle Einzelschritte

Beitrag von flotom » 29.12.2012, 14:26

Hallo Ralf,

ja so ist es betimmt hin zu bekommen.

Ich hätte noch eine andere Frage:
Hast du auch ein Skript bzw. eine PHP Erweiterung wo ein Get Befehl möglich ist.
z.B. Auslesen der aktuellen Lautstärke um diese dann mit dem Wandtaster immer um
eins zu erhöhen.

Lg Thomas

looxer01
Beiträge: 442
Registriert: 06.05.2012, 13:17

Re: Sonos Steuerung über Homematic und alle Einzelschritte

Beitrag von looxer01 » 29.12.2012, 15:18

leider nein. Ich glaube, dass das mit den Scripts aus dem IP-Symcon Forum geht.
Wie ich aber schon weiter oben schrieb, habe ich es nicht hingekriegt die Scripts zu nutzen, da die CCU PHP Version einige Befehle nicht unterstützt. Das ist sicher hinzubekommen, allerdings müßte sich jemand mit PHP gut auskennen.

Ich arbeite in meinem Fall mit festen Lautstärken. Auf dem Taster verändere ich bei langem Druck die Lautstärke.
Oben: Laut - unten Leise. Insgesamt habe ich sechs feste Lautstärke Pegel, von denen ich wählen kann.
Das ist aber nur ein Workaround. Wenn jemand die PHP Klassen aus IP-Symcon portieren könnte, dann wäre das sicher die bessere Lösung.

flotom
Beiträge: 7
Registriert: 14.06.2011, 09:00

Re: Sonos Steuerung über Homematic und alle Einzelschritte

Beitrag von flotom » 29.12.2012, 17:34

dann werde ich das mal angehen. Kenne da ein paar wirkliche PHP Profis.
Gebe Bescheid, sobald es funktioniert !

Lg Thomas

DonGyros
Beiträge: 80
Registriert: 28.01.2008, 13:05

Re: Sonos Steuerung über Homematic und alle Einzelschritte

Beitrag von DonGyros » 29.12.2012, 22:29

Wenn ihr von der Klasse aus dem IP-Symcon Forum sprecht, meint ihr dann die PHPSonos.inc.php ?

looxer01
Beiträge: 442
Registriert: 06.05.2012, 13:17

Re: Sonos Steuerung über Homematic und alle Einzelschritte

Beitrag von looxer01 » 29.12.2012, 23:55

ja, genau.
siehe auch diesen Artikel hier:
http://www.trautner.net/313-sonos-mit-g ... er-steuern

DonGyros
Beiträge: 80
Registriert: 28.01.2008, 13:05

Re: Sonos Steuerung über Homematic und alle Einzelschritte

Beitrag von DonGyros » 30.12.2012, 00:26

Ja dann anbei mal ein Beispiel wie z.B. die Funktion Play aussehen muss damit die mit dem PHP Server auf der CCU kompatibel ist:

Original:

Code: Alles auswählen

	public function Play()
	{
           $content='POST /MediaRenderer/AVTransport/Control HTTP/1.1
           CONNECTION: close
           HOST: '.$this->address.':1400
           CONTENT-LENGTH: 266
           CONTENT-TYPE: text/xml; charset="utf-8"
           SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Play"

          <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:Play         xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope>';

	   $this->sendPacket($content);
	}
Angepasst:

Code: Alles auswählen

public function Play()
{		
	// Sonos Player device port. e.g. 1400 (default)
	$devicePort = 1400;
	$nl = '
';	
	$headerPart1 = 'POST /MediaRenderer/AVTransport/Control HTTP/1.1'.$nl;
	$headerPart2 = 'SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Play"'.$nl.$nl;
	$content = 	'<u:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1">'.
		'<InstanceID>0</InstanceID>'.
		'<Speed>1</Speed>'.
		'</u:Play>';
					
		
		
	// envelope strings
	$contentEnvelopeBegin = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>';
	$contentEnvelopeEnd = '</s:Body></s:Envelope>';
	// add envelope string legth to contentLength
	$contentLength = strlen($contentEnvelopeBegin.$content.$contentEnvelopeEnd);

		
	// build message header part 1
	$headerMainPart = 	'CONNECTION: close'.$nl.
							'HOST: '.$this->address.':'.$devicePort.$nl.
							'CONTENT-LENGTH: '.$contentLength.$nl.
							'CONTENT-TYPE: text/xml; charset="utf-8"'.$nl;
		
	// build complete UPnP-AV message for Sonos device
	$streamMessage = $headerPart1.$headerMainPart.$headerPart2.$contentEnvelopeBegin.$content.$contentEnvelopeEnd;
			
	$fileHandle = fsockopen ($this->address, $devicePort, $errorNumber, $errorString, 10);
		
	$streamAnswer = '';
		
	if (!$fileHandle)
	{
		// error output
		echo "$errorString ($errorNumber)<br />\n";
	}
	else 
	{
		fputs($fileHandle, $streamMessage); 
		$streamAnswer = "";
				
		// get lines
		while (!feof($fileHandle))
		{      
			$streamAnswer .= fgets($fileHandle);
		}
				
		// close socket connection
		fclose($fileHandle);
			
	}
}

looxer01
Beiträge: 442
Registriert: 06.05.2012, 13:17

Re: Sonos Steuerung über Homematic und alle Einzelschritte

Beitrag von looxer01 » 30.12.2012, 12:38

das kriegst du ja schnell hin :D

dieser Link: http://www.trautner.net/wp-content/uplo ... /Sonos.zip
enthält zwei Dateien. Die Originale Datei aus dem IP-Symcon Forum plus den add ons aus dem Beitrag.

Das Interessante sind nun die Addons aus der Datei index.php, weil diese die folgenden Funktionen bereitstellen:
index.php?zone=MeineZone&do=TogglePlayStop: schaltet um zwischen Play und Pause
index.php?zone=MeineZone&do=VolumeUp: Lautstärke wird pro Aufruf um 1 erhöht
index.php?zone=MeineZone&do=VolumeDown: Lautstärke wird pro Aufruf um 1 vermindert
index.php?zone=MeineZone&do=sendMessage&MesageId=1&Volume=30: Programm wird unterbrochen und Nachricht mit der ID 1 wird abgespielt.
Vielleicht ist es auch möglich, das CCU Script beizubehalten und einfach den Wrapper -also Datei index.php anzupassen ?
Ich kenne mich wirklich nicht gut genug aus um das einzuschätzen. Könntest du dir das mal ansehen ?

lG Ralf

DonGyros
Beiträge: 80
Registriert: 28.01.2008, 13:05

Re: Sonos Steuerung über Homematic und alle Einzelschritte

Beitrag von DonGyros » 30.12.2012, 13:51

Die index.php kannst du so behalten. Die nimmt ja letztendlich nur die HTTP Requests entgegen und wertet dann aus welche Parameter mitgeschickt wurden.
Basierend da drauf wird dann die entsprechende Funkion aus der PHPSonos.inc.php aufgerufen.

Letztendlich muss fast jede Funktion aus der PHPSonos.inc.php so angepasst werden wie ich es anhand der Funktion 'Play' weiter oben beispielhaft erklärt habe wenn man will das das ganze mit dem PHP Server funktioniert den man direkt auf der CCU installiert hat (das Problem ist einfach das bei der CCU Version diverse Packages/Libs/Module fehlen die von dem Originalskript aber vorrausgesetzt werden -> deshalb ist es nötig das anders zu implementieren damit das eben auch mit dem PHP Server auf der CCU läuft).

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“