Squeezebox / Squeezeserver Skript

Hallo

ich habe leider ein kleines Problem: Und zwar, wenn ich einen einfachen Test ausführe um zu prüfen ob die Daten richtig an den Sqzeezbox Server gesendet werden:

<?

$box = '00:04:20:29:e5:5e';

$squeeze_clientsocket = 43362  /*[SqueezeServer]*/;
$cmd = 'listen 1';
CSCK_SendText($squeeze_clientsocket, $box." ".$cmd.chr(13));


squeeze_clientsocket = 43362  /*[SqueezeServer]*/;

CSCK_SendText($squeeze_clientsocket, $box.' playlist play '.rawurlencode('http://streams.br-online.de/bayern3_2.asx').chr(13));

?>

Sehe ich in den Debug des Server Sockets folgendes:

18.11.2012 17:06:15.00 | TRANSMITTED | 00:04:20:29:e5:5e listen 1

18.11.2012 17:06:15.00 | TRANSMITTED | 00:04:20:29:e5:5e playlist play http%3A%2F%2Fstreams.br-online.de%2Fbayern3_2.asx

18.11.2012 17:07:24.00 | TRANSMITTED | 00:04:20:29:e5:5e listen 1

18.11.2012 17:07:24.00 | TRANSMITTED | 00:04:20:29:e5:5e playlist play http%3A%2F%2Fstreams.br-online.de%2Fbayern3_2.asx

18.11.2012 17:07:53.00 | TRANSMITTED | 00:04:20:29:e5:5e listen 1

18.11.2012 17:07:53.00 | TRANSMITTED | 00:04:20:29:e5:5e playlist play http%3A%2F%2Fstreams.br-online.de%2Fbayern3_2.asx

Er sendet zwar richtig, jedoch kommt keine Received Meldung. In den Debug Logs von Registervariable und Cutter steht gar nichts. MAC Adresse ist auch korrekt (groß und klein schreibung) Habt ihr noch eine Idee was falsch sein könnte?

Server Sockets

  1. Verstehe ich nicht, Du brauchst ein Client Socket.
  2. SQB Media Server mal neu gestartet?
  3. Firewall mal zu testen ausschalten

Meinte ClientSocket :wink:

Firewall aus -> keine Änderung
SQB Server neugestartet -> leine Änderung

Aber: Sobald ich den Port von 9000-> 9090 umgestellt habe, erhalte ich nun auch ein Receive :slight_smile:
Komisch wieso er diesen Port nimmt. Die Squeezebox rufe ich doch über http://192.168.1.2:9000/ auf, wieso und wo kann ich den Pot 9090 verwenden?

Mhh naja auf jeden Fall klappt es nun…

Nennt sich CLI.

Sind aber schon manche darüber gestolpert.

Sent from my iPhone using Tapatalk

Hallo Zusammen,

habe mich nun auch dem Thema IPS zugewandt :loveips: und versuche mit diesem Thread bzw. Skripen (Tolle Arbeit Werner) meine Ersten Erfahrungen in der „Konfiguration“ von IPS zu sammeln.

Leider bin ich bei der Konfiguration der Skripte (Ich bin noch bei der Einrichtung zum 1. Beitrag) auf zwei Probleme gestossen:

Trotz mehrfachem studium dieses und weiterer Threads ist mir nicht klar, welche Profile ich für die Variablen „Wiederholung“ und „Zufallswiedergabe“ einrichten muß bzw. wie diese aussehen müssen!? Hat da einer von Euch einen Tip für mich?
Sind die Profilnamen frei definierbar und / oder woher kann ich die Ableiten? Ich habe die Skripte schon rauf und runter studiert, komme aber einfach nicht dahinter… Schäm!

Dann habe ich das Problem, dass die angesteuerte Squeezebox (ist synchronisiert mit weiteren Boxen - und eingerichtet, dass sie beim wiedereinschalten nicht sofort losspielt) nach dem wieder einschalten in der Anzeige „Aktueller Titel“ startet und die Wiedergabe in dieser Ansicht mit druck auf Play im Webfrontend nicht gestartet werden kann.
Woran könnte das liegen?

Könnte dies evtl. mit der Funktion „SqueezePlayFav“ aus dem Funktionssammlungsskript zusammen hängen? Dort ist ja ein FavDir angegeben > $favDir=‚c55b6425‘… Oder wozu ist das da bzw. horauf zeigt dies?

Ich hoffe ihr könnt mir hier weiterhelfen, ich wills ja einfach nur verstehen.

Danke und Gruß

MWSascha

Hallo,

ich habe das Script soweit am Laufen bei einer Squeezebox. Beim Hinzufügen der Zweiten habe ich jetzt ein Problem
mit dem Auswertescript.

Wenn ich ich es richtig verstanden haben, wird aufgrund $array[0]= Wohnzimmer eine Squeezebox ausgewertet. Ich abe
also den Block kopiert, Abfrage auf $array[0]= Schlafzimmer und es funktioniert soweit alles. Erste Box ist $array[0]= Kino
Was aber mit den Wiedergabelisten ? Diese werden auch über $array[0] == ‚playlists‘) abgefragt, also gueltig fuer alle Squeezeboxen. Wenn ich eine eine auswähle wird diese auch pro Squeezebox abgespielt aber die Anzeige der Einzeltracks funktioniert nicht (kann nicht funktionierien ??) weil

f($array[0] == ‚playlists‘ and $array[1] == ‚tracks‘ and $array[2] == 0) {
SetValue(48913 /[Squeeze\Musik-Kino\Wiedergabelisten\Wiedergabeliste Rohdaten]/, $antwort);
}

auch global ist und an der Stelle nicht zwischen den Playern unterschieden wird.

Oder muss die Playlisterweiterung innerhalb des $array[0]= Ort Blocks ??

Es gab die Frage von Tomas Beitrag #7 schon einmal, ich habe aber keine Antwort gesehen.

Oder anders : Kann nochmal jemand die Vorgangsweise zur Einbindungung mehrer Squeeze Clients posten ?

Ciao

Frank

Also bei mir läuft die Variante hier
http://www.ip-symcon.de/forum/threads/19720-Squeezeboxen-einpflegen-ohne-GRO%C3%9FEN-AUFWAND

und dann noch die Wiedergabelisten hinzufügen.
Hier mal ein Auszug aus meinem Wiedergabeliste starten Script.
hoffe ich kann dir damit helfen.

<?
if($IPS_SENDER == "WebFront")
{
  	SetValue($IPS_VARIABLE, $IPS_VALUE);

	include "45838.ips.php";      // Squeezefunktions-Sammlung

	// Auswahl welche Squeezebox bedient werden soll
	switch($IPS_VARIABLE) {
	  	   case 18285:
			$box = SQArbeitszimmer;
			$boxname = "Arbeitszimmer";



			$ausgabe_id = 37418 /*[Media\Squeezebox\Wiedergabeliste Inhal\Wiedergabeliste Arbeitszimmerr (final)]*/;
			$einlese_id = 36197 /*[Media\Squeezebox\Wiedergabeliste Inhal\Wiedergabeliste (Rohdaten)]*/;
		break;
		case 29227:
		   $box = SQSchlafzimmer;
			$boxname = "Schlafzimmer";

			$ausgabe_id = 20992 /*[Media\Squeezebox\Wiedergabeliste Inhal\Wiedergabeliste Schlafzimmer (final)]*/;
			$einlese_id = 36197 /*[Media\Squeezebox\Wiedergabeliste Inhal\Wiedergabeliste (Rohdaten)]*/;
		break;
		case 31654:
		   $box = SQWohnzimmer;
			$boxname = "Wohnzimmer";

			$ausgabe_id = 13430 /*[Media\Squeezebox\Wiedergabeliste Inhal\Wiedergabeliste Wohnzimmer (final)]*/;
			$einlese_id = 36197 /*[Media\Squeezebox\Wiedergabeliste Inhal\Wiedergabeliste (Rohdaten)]*/;
		break;
		case 12205:
		   $box = SQIPad;
			$boxname = "IPad";

			$ausgabe_id = 19911 /*[Media\Squeezebox\Wiedergabeliste Inhal\Wiedergabeliste IPad (final)]*/;
			$einlese_id = 36197 /*[Media\Squeezebox\Wiedergabeliste Inhal\Wiedergabeliste (Rohdaten)]*/;
		break;
		case 37466:
		   $box = SQIPhone;
			$boxname = "IPhone";

			$ausgabe_id = 29527 /*[Media\Squeezebox\Wiedergabeliste Inhal\Wiedergabeliste IPhone (final)]*/;
			$einlese_id = 36197 /*[Media\Squeezebox\Wiedergabeliste Inhal\Wiedergabeliste (Rohdaten)]*/;
		break;
		
	}

	// ==========================================================
	// Wiedergabeliste starten und Meldung an Webfront
	// ==========================================================

	$cmd = "playlist loadtracks playlist.id=";
	$SQ_Playlist = IPS_GetVariableProfile(".SQ_Playlist");                       // Variablenprofil in Array schreiben
	$SQ_Playlist_ID = $SQ_Playlist['Associations'][$IPS_VALUE-1]['Icon'];        // Playlist.ID aus der Spalte Icon holen


   CSCK_SendText(SqueezeServer, $box. " ". $cmd . $SQ_Playlist_ID . chr(13));
	WFC_SendNotification(23542 /*[WebFront Configurator]*/, "Playlist", $SQ_Playlist['Associations'][$IPS_VALUE-1]['Name']." wird im $boxname gestartet.", "Speaker", 5);

	// ==========================================================
	// Wiedergabelisteninhalt mit $id auslesen
	// ==========================================================

	$cmd = "playlists tracks 0 50 playlist_id:$SQ_Playlist_ID";
	CSCK_SendText(SqueezeServer, $cmd.chr(13));

	IPS_Sleep(2000);

	$playlist_raw = GetValue($einlese_id);

	$playlist_array_raw =  explode ( ' ', $playlist_raw );

	// Ersten 4 Einträge aus Array löschen
	for($x=1; $x < 5; $x++) {
		array_shift( $playlist_array_raw );
	}

	// letzten Eintrag aus Array löschen
	array_pop( $playlist_array_raw );

	$playlist_array_final = Array();
	foreach($playlist_array_raw as $item)
	{
	    $item = utf8_decode(urldecode($item));
	    $chunks = explode(":", $item);
	    if($chunks[0] == "playlist index")
	    {
	       $aitem = &$playlist_array_final[];
	    }
	    $aitem[$chunks[0]] = $chunks[1];
	}

	$ausgabe_html = "<table width='100%'>";
	$ausgabe_html = $ausgabe_html . "<tr><td width='5%' class='ipsSelectionBarBlock ipsSelectionBarBlockActive'>Nr.</td><td width='20%' class='ipsSelectionBarBlock ipsSelectionBarBlockActive'>Interpret</td><td width='30%' class='ipsSelectionBarBlock ipsSelectionBarBlockActive'>Titel</td><td width='35%' class='ipsSelectionBarBlock ipsSelectionBarBlockActive'>Album</td><td width='10%' class='ipsSelectionBarBlock ipsSelectionBarBlockActive'>Länge</td></tr>";

	for($x=0; $x < count($playlist_array_final); $x++) {
		$ausgabe_html = $ausgabe_html . "<tr><td class='ipsSelectionBarBlock'>".$playlist_array_final[$x]['playlist index'] ."</td><td class='ipsSelectionBarBlock'>".$playlist_array_final[$x]['artist']."</td><td class='ipsSelectionBarBlock'>".$playlist_array_final[$x]['title']."</td><td class='ipsSelectionBarBlock'>".$playlist_array_final[$x]['album']."</td><td class='ipsSelectionBarBlock'>".gmstrftime('%M:%S', $playlist_array_final[$x]['duration'])."</td></tr>";
	}
	if($x == 0) {
		$ausgabe_html = $ausgabe_html . "<tr><td colspan='5' class='ipsSelectionBarBlock'>Radiosender oder keine Wiedergabeliste vorhanden.</td></tr>";
	}

	$ausgabe_html = $ausgabe_html . "</table>";

	SetValue($ausgabe_id, $ausgabe_html);

}


?>

Hallo,

danke für den Hinweis.

Grundsätzlich funktioniert das auch soweit, ich dachte nur, es könnte Probleme geben, weil die Rohdaten
Variable bei allen Playern gleich ist.

Bei Deinem code: die 36197

$ausgabe_id = 37418 /*[Media\Squeezebox\Wiedergabeliste Inhal\Wiedergabeliste Arbeitszimmerr (final)]*/;
            $einlese_id = 36197 /*[Media\Squeezebox\Wiedergabeliste Inhal\Wiedergabeliste (Rohdaten)]*/;
        break;
        case 29227:
           $box = SQSchlafzimmer;
            $boxname = "Schlafzimmer";

            $ausgabe_id = 20992 /*[Media\Squeezebox\Wiedergabeliste Inhal\Wiedergabeliste Schlafzimmer (final)]*/;
            $einlese_id = 36197 /*[Media\Squeezebox\Wiedergabeliste Inhal\Wiedergabeliste (Rohdaten)]*/;
        break; 

Wenn nun hier die Abfrage an dem Squeezeserver gestartet wird, kommt bei dem Auswertescript nicht an, von welchem
Player die Anfrage kommt, das Ergebnis wird in die gleiche Rohdatenvariable geschrieben und ich hatte die Befürchtung, dass man je nach Abarbeitung bzw. der Reihenfolge, das Ergebnis eines anderen Players bekommt.

$cmd = "playlists tracks 0 50 playlist_id:$SQ_Playlist_ID";
    CSCK_SendText(SqueezeServer, $cmd.chr(13));
    IPS_Sleep(2000); 

In der Praxis wird das wohl bei 2 bis 3 aktiven Playern keine Rolle spielen.

Beste Grüße

Frank

Sorry das ich erst jetzt antworte, muss mich aber selber erst wieder in die Skripte und deren katastrophalen Logik einarbeiten :smiley:

Bin mir jetzt nicht sicher welches Feature Du ansprichst.

[ol]
[li]Die Integer-Variable Wiedergabeliste wo deine Wiedergabelisten aus dem LMS angezeigt werden und diese durch einen Klick darauf auf dem entsprechenden Player gestartet werden[/li][li]Oder die String-Variable Wiedergabeliste wo der Inhalt der entsprechenden Wiedergabeliste angezeigt werden.[/li][/ol]

Ich denke es geht um Punkt 1.

Da die Wiedergabelisten aus dem LMS allen Playern zur Verfügung steht sollte klar sein. Die Wiedergabelisten aus dem LMS wird ja in das Variablenprofil .SQ_Playlist geschrieben.

Gestartet wird eine Wiedergabeliste effektiv über die entsprechende Player-Variable Wiedergabelisten (1.). Diese startet dann wie von Heinzzuhaus angemerkt über das Skript „Wiedergabeliste starten“ (2.)

Die in den Cases befindlichen IDs $ausgabe_id & $einlese_id sind für das eigentliche Starten der Playliste nicht verantwortlich, diese sind nur für das befüllen der String-Variable „Wiedergabelisten Inhalt“ nützlich und kannst Du ggf. hier einmal ausblenden.

Dann zur eigentlichen Frage. Hast Du für den neuen Player eine Integer-Variable angelegt und ihr das bestehende Profil „.SQ_Playlist“ gegeben. Ebenso muss das bestehende Skript (bei mir als als Wiedergabeliste starten (2.) markiert) als „Eigene Aktion“ der Variable eingestellt werden. (Siehe Screenshot).

Das ganze Projekt ist wirklich schlimm zu beschreiben, werde es aber in dieser Form sicherlich nicht mehr umschreiben da viel zu Aufwendig. Evtl. Gibt es einmal ein komplett neues Projekt. Habe da schon meine Gedanken. z.b. automatisches Anlegen sobald ein neuer Player im LMS erkannt wurde. Aber wie immer scheitert es an der Zeit. Es gibt aber auch schon einen sehr guten Ansatz wie von Heinzzuhaus vermerkt.

Wiedergabelisten_Variable.png

Hallo Werner,

danke fuer die Antwort, hat sich wohl mit meinem Eintrag überschnitten - es ging um Punkt 2 und die gemeinsame Nutzung von einer Rohdatenvariable fuer alle Player.
Siehe 1 Post vorher.

Gruss

Frank

Hallo Leute,

ich bin hier langsam am Verzweifeln.

Ich bekomme immer noch keine kontinuierlichen Daten vom Sqeezeserver. Wenn ich den „Listen 1“ Befehle sende bekomme ich ein freundliches „RECEIVED“ zurück. Aber keinerlei Daten zum laufenden „Programm“. MAC-Adresse habe ich mit kleinen Buchstaben geschrieben. Ich habe auch den LMS mal neu gestartet. Im LMS ist der CLI-Port mit 9090 angegeben und hat den Status „OK“.
Fernbedienung über die iPhoneApp und die Weboberfläche laufen problemlos…

Woran kann es denn noch liegen? LMS und IPS sind beide auf einem gemeinsamen WHS 2011 installiert…

Joachim

Nachtrag:
Eines ist mir eben aufgefallen. Im LMS-Konfigurationsmenü wird der erkannte Player so gezeigt:

RaspberryPi_1 
Player-Modell: SqueezeLite 
IP-Adresse des Players: 192.168.178.31 
MAC-Adresse des Players: 00:00:00:00:00:01   

Die MAC-Adresse ist ja irgendwie nicht korrekt dargestellt. Wenn ich aber versuche den „Listen 1“-Befehl an diese Adresse zu senden hat das leider auch keine Auswirkung…

Nachtrag 2: Jetzt tut sich etwas! Die MAC-Adresse aus dem LMS - und schon funktionierts…

Hallo Leute,

inzwischen ist es mir gelungen die Grundfunktionen im IPS zu integrieren. Die Modus-Visualisierung (Play, Pause usw.) im IPS klappt auch soweit. Lediglich die Steuerung Richtung Squeezebox funktioniert aus irgendeinem Grund noch nicht…
Im Steuerungs-Skript sieht der Part ja so aus:

If ($_IPS['VARIABLE'] == $modusID)
	{
   switch($_IPS['VALUE'])
    	{
      case 0:
         SqueezeButton($boxmac, 'stop');
      break;
      case 1:
         SqueezeButton($boxmac, 'pause');
      break;
      case 2:
         SqueezeButton($boxmac, 'play');
      break;
      case 3:
         SqueezeButton($boxmac, 'jump_fwd');
      break;
      case 4:
         SqueezeButton($boxmac, 'jump_rew');
      break;
    	}
	}

Aufgerufen wird ja dabei diese Funktion:

//------------------------------------------------------------------------------
function SqueezeButton($box , $bt)
{
  $cmd = "button ".$bt;
  return CSCK_SendText(SqueezeServer, $box." ".$cmd.chr(13));
}

Im Log des Client-Socket ist auch etwas zu sehen:
04.03.2013 21:16:31.00 | RECEIVED | 00%3A00%3A00%3A00%3A00%3A01 listen 1
04.03.2013 21:16:31.00 | TRANSMITTED | 00:00:00:00:00:01 listen 1
04.03.2013 21:16:31.00 | TRANSMITTED | 00:00:00:00:00:01 button pause
04.03.2013 21:16:31.00 | RECEIVED | 00%3A00%3A00%3A00%3A00%3A01 button pause
04.03.2013 21:16:31.00 | RECEIVED | 00%3A00%3A00%3A00%3A00%3A01 status - 1 subscribe%3A2 player_name%3ARaspberryPi_1 player_connected%3A1 player_ip%3A192.168.178.31%3A61000 power%3A1 signalstrength%3A0 mode%3Aplay remote%3A1 current_title%3ANDR%202 time%3A922.514998060226 rate%3A1 mixer%20volume%3A30 playlist%20repeat%3A0 playlist%20shuffle%3A0 playlist%20mode%3Aoff seq_no%3A0 playlist_cur_index%3A0 playlist_timestamp%3A1362427267.69104 playlist_tracks%3A1 remoteMeta%3AHASH(0xa4436f4) playlist%20index%3A0 id%3A-167099980 title%3ADer%20NDR%202%20Abend artist%3ANDR%202%2087.6 duration%3A0
04.03.2013 21:16:32.00 | TRANSMITTED | 00:00:00:00:00:01 listen 1
04.03.2013 21:16:32.00 | TRANSMITTED | 00:00:00:00:00:01 button play
04.03.2013 21:16:32.00 | RECEIVED | 00%3A00%3A00%3A00%3A00%3A01 listen 1
04.03.2013 21:16:32.00 | RECEIVED | 00%3A00%3A00%3A00%3A00%3A01 button play

Habe ich noch etwas übersehen??

Joachim

Hallo zusammen,
ich hab erfolgreich meine Squeezebox mit dem Script aud post1 eingebunden. Es gibt noch Probleme bei den Variablen Position, akt. Position, Länge (Float und String). Ich bekomme keine Werte bzw. es kann nicht gesteuert werden. Ich bin mir sicher, es liegt an den genauen Einstellungen in den Variablen. Gibt es da eine Doku drüber oder könnte mir jemand ein paar Screenshotz zu den Einstellungen schicken? Es geht um die Profile der Var.
Vielen Dank
Heuser

Hallo Heuser,

in den zip-Dateien im ersten und zweiten Posting sind ja schon einige Screenshots dabei. Schreibe doch mal, was Dir darüber hinaus noch fehlt…

Joachim

Hallo Joachim,
ich bekomme im Bereich Länge und Position nicht ausser einer 0 angezeigt. Die Variablen brauche ich etwas genauer definiert. Mir gehr es da um die Profileinstellungen.

Grüße
Heuser

Hallo Heuser,

die beiden Variablen sind bei mir vom Typ String, als Profil ist „~String“ eingestellt.

Joachim

Hallo Joachim,
was muß ich im Profil unter „Eigene Aktion“ eintragen?

Hallo Heuser,

ich habe dort keines stehen - die Dauer und die aktuelle Position sind ja (zumindest bei mir) nicht veränderbar, sondern „gegeben“…

Joachim

Hallo Joachim,
trotz deiner Einstellungen hab ich bei den Strings nur eine 0 stehen

…dann wird die Variable aus irgendeinem Grund wohl nicht mit den Daten „beliefert“.
Prüfe doch mal, ob die Objekt ID in Deinem Skript und die der Variablen übereinstimmen.
Ansonsten poste mal Dein Skript und mach einen Screenshot von Deinen Variablen…

Joachim