Noch ein Squeezeboxskript

Hallo Werner und die anderen Squeezbox Besitzer

Danke für das Skript, da kann man wieder ein paar neue Ideen aufschnappen und es muss nicht jeder wieder bei Null anfangen.
Soweit wie Du bin ich noch lange nicht, ich kann nur die Standartsachen an/aus lauter/leise play/stop vor/zurück. Dafür hab ich es so gelöst(da ich zu faul war jeder Squeezebox für jede Taste die IDs in nem Skript einzutragen) das sich IPS selber die IDs raussucht. Also für jede SB hab ich einen Ordner und in dem gibt es immer die gleichen Variablennamen(Power, Steuerung,Lautstärke usw) und alle haben das gleiche Schaltscript.
Wenn ich jetzt im Webfront z.B. Stop drücke schaut IPS mit

$befehl = IPS_GETNAME($IPS_VARIABLE);

nach wie die Variable heißt, also hier z.b. Steuerung dann schaut es nach in welchem Ordner die Variable ist mit

$player = IPS_GetParent($IPS_VARIABLE);

und damit kann ich jetzt die mac adresse des Players rausfinden mit

	switch ($player)
		   {
		   case 45071:
			 	{
		   //	echo "SCHHLAF";
		      $mac="00:04:20:27:82:8b";

				}
			 break;
			
			 case 59064:
		   	{
		   	//echo "Router";
		      $mac="00:1a:92:21:0f:e4";

				}
			 break;
			 case 38029:
			   {
			   //echo "BOOM";
			   $mac="00:04:20:1f:6d:7d";
			   }
			}

und nachdem ich den Befehl und die mac adresse kenne kann ich die Befehle an die richtige Box schicken.

  switch ($befehl)
  {
    case "Power":
    {
     	if (getvalue($IPS_VARIABLE))
			    $if = ' power 0';
			else
			    $if = ' power 1';

		 CSCK_SendText(34493 /*[Client Socket Squeeze]*/, $mac.$if.chr(13));
    }
    break;


   case "Lautstärke":
    {
		// echo "Lautstärke".$mac;
		 
		 	 CSCK_SendText(34493 /*[Client Socket Squeeze]*/, $mac." mixer volume ".$IPS_VALUE.chr(13));
    }
    break;
      case "Steuerung":
    {
		// echo "Steuerung".$IPS_VALUE;
		switch ($IPS_VALUE)
     {
			case 0:
			  { $cmd = " stop";
			break;}
			case 1:
			  { $cmd = " pause";
			break;}
			case 2:
			  { $cmd = " play";
			break;}
			case 3:
			  { $cmd = " button jump_fwd";
			break;}
			case 4:
			  { $cmd = " playlist jump -1";
			break;}
   }
		 	 CSCK_SendText(34493 /*[Client Socket Squeeze]*/, $mac.$cmd.chr(13));

    }
    break;

    
    
	}

Ist halt noch nicht so umfangreich mit Playlisten und Favoriten aber vielleicht eine Anregung wie man sich die Neuanlage einer Squeezebox vereinfachen kann.
Ich muss nur einen Ordner und die Variablen anlegen (wollte ich eigentlich mit nem Skript machen aber noch keine Zeit dafür gefunden) und dann im switch ($player) die ID des Orders und die mac adresse im Schaltskript eintragen und schon kann man die Box steueren.

Zum auslesen/mithören hab ich es auch so gelöst aber das Skript muss ich erst noch überarbeiten damit man versteht was da gemacht wird.

Aber jetzt muss ich erstmal dein Skript bei mir mit einfließen lassen. Also nochmal Danke dafür.

Gruß Jannis

Skripte sind weiter unten.

Hallo Jannis,

sei mir bitte nicht böse aber ich habe für dein Skript einen neuen Thread aufgemacht. In meinem sollte nur mein Skript diskutiert werden ansonsten wird es unüberschaubar.

Ich hoffe Du verstehst es.

Hallo Jannis,

genau so habe ich auch angefangen. Nur steuern aus IPS Richtung Squeeze, da ich aber meine Squeezeboxen mit anderen Sachen steuere, sei es iPeng, SqueezePad oder auch mal nur mit dem Squeezeserver selbst, habe ich das Monsterauswerteskript geschrieben.

IPS bekommt immer den Status der einzelnen Boxen mit, das letzte Projekt war die Timeline eines Titels, sprich in IPS wird der aktuelle Zeitstand eines Titels angezeigt, Ausnahme wenn es eine Radiosender ist, dort gibt es keine Endekennung des Titels.

Der Slider wir evtl. heute noch dazu umgebaut um auch im Titel zeitlich springen zu können.

Hallo Werner

ist doch kein Thema mit dem neuen Thema. :wink:

Hab jetzt endlich mein Skript zum automatischen anlegen der Variablen fertig gestellt und auch mein Mitleseskript soweit umgeschriben das man es auch anderen zeigen kann und man versteht was es macht.

Das mit der Wiedergabeliste muss ich mir bei Dir nochmal anschauen und auch die Timeleiste finde ich super.

So jetzt aber zum Thema zurück wie man die Squeezebox mit IPS zusammenführen kann.

Am besten als erstes einen Ordner z.B. Squeezeboxen anlegen und dahinein drei Skripte einfügen.
Bei mir sind es die Skripte „SB mitlesen“, „SB schalten universal“ und „SB installieren“ und mit den Skripten aus der ZIP-Datei füllen.
Ausserdem kommt in den Ordner noch für jede eurer Boxen/Player ein Ordner.

Falls Ihr den Squeezeserver noch nicht mit IPS verbunden habt, müsst Ihr eine RegisterVariable Instanz anlegen und als Zielskript „SB mitlesen“ auswählen.
Als übergeordnete Instanz wählt Ihr einen neuen Cutter aus, in den Ihr als rechtes Trennzeichen „0D“ angebt. Für den Cutter wählt Ihr als übergeornete Instanz einen ClientSocket aus, mit der Adresse eures Squeezeservers. Bei mir „localhost“ und als Port den 9090.

Ausserdem müsst Ihr dem SBServer mitteilen das er immer senden. Das macht Ihr am mit dem Befehl

CSCK_SendText(34493 /*[Client Socket Squeeze]*/, ' listen 1'.chr(13));

welchen Ihr z.B. in euer IPSStartskript reinschreibt, da muss der SBServer aber dann schon laufen, oder in ein extra Skript das Ihr immerwieder mal laufen lasst, denn wenn der SBServer mal neu startet weiß er nicht das er senden soll.

Falls Ihr schon eine Registervariable habt, einfach als Zielskript das SB mitlesen Skript auswählen.

Nun im „SB installieren“ Skript die ID eueres „SB schalten universal“ Skriptes eintragen. Dann das Skript ausführen und kurz warten bis alles Variablen angelegt worden sind.

Als letztes müsst ihr noch die MAC Adressen und Ordnerids eurer Squeezboxen in die zwei Skripte „SB mitlesen“ und „SB schalten universal“ eintragen und im letzten Skript zusätzlich noch die ID des Clientsockets anpassen.

So, wenn ich nichts vergessen habe dann solltet Ihr jetzt im Webfront eure Boxen schalten können und auch sehen wenn Ihr sie von wo anderst bedient.

Wenn Ihr dann irgenwann eine neue Squeezbox einbinden wollt einfach einen neuen Ordner im Squeezeboxen Ordner anlegen und das Installationsskript laufen lasse.

Gruß Jannis

SB schalten universal.zip (2.67 KB)

@Jannis

Habs grad probiert… Einwandfrei. Was mir noch fehlen würde:

  • Ein Sleeptimer

  • Ein paar Stationstasten für Radiosender

Sonst würde mir die Funktionalität völlig reichen…

Danke für die bequeme Umsetzung…

Gruß epogo

Hallo Stephan

Wegen dem Sleeptimer:

Bei mir startete das SB mitlesen Skript sobald ich im Schlafzimmer Sleep drücke ein Skript das die Lautstärke langsam runterreglt. Logitech regelt ja erst in der letzten Minute runter. Es gibt zwar auch plugins aber wozu haben wir IPS? :smiley:

Damit IPS mitbekommt das ein Sleepbefehl kam musst Du in das Mitlese Skript einen case einfügen

switch ($cli[1])
	{
   case "power":
   	SetValue(IPS_GetObjectIDByName("Power",$idbox), $cli[2] );
   break;


case "sleep":     //Bei Snooze langsam die Lautstärke runterdrehen <--- Den hier einfügen
		$sec=$cli[2];
		if ($sec>0)     //Sekunden;
      	{
			echo "schlaf ".$sec/60;
			if ($player == $schlafzimmer)
				{
				SetValue(40364 /*[Squeezeboxen\Schlafzimmer\Snoozezeit]*/ ,time()+$sec);// Ausschaltzeit in Variable schreiben
				IPS_RunScript(47541 /*[Squeezeboxen\Snooze schlafzimmer]*/);
				}
 			}
   break;

Und dann ein neue Integervariable Snoozezeit und ein Skript anlegen mit dem hier

$box_mac = "00:04:20:27:82:8b";  //Radio SZ
	$laut=getvalue(29864 /*[Squeezeboxen\Schlafzimmer\Lautstärke]*/);
	$laut = $laut-1;
	
 CSCK_SendText(34493 /*[Client Socket Squeeze]*/, $box_mac.' mixer volume '.$laut.chr(13));
echo $sekundennoch = getvalue(40364 /*[Squeezeboxen\Schlafzimmer\Snoozezeit]*/)-time();

   IPS_SetScriptTimer(47541 /*[Squeezeboxen\Snooze schlafzimmer]*/,120);

if ($sekundennoch<0)
	IPS_SetScriptTimer(47541 /*[Squeezeboxen\Snooze schlafzimmer]*/,0);


Ich lasse einfach nur alle zwei Minuten die Lautstärke um eins reduzieren. Hat sich halt als praktisch erwiesen bei uns. Einfach an deine Wünsche anpassen.

Hoffe das hilft Dir weiter.

Gruß Jannis

@Jannis

Danke… Das hilft mir gut weiter…

Bedeutet, sobald du die Sleep Taste an der Fernbedienung gedrückt hast dann lässt du die Lautstärke langsam absinken… ?

Keine schlechte Idee. Möchte mir da was stricken um die RGB Beleuchtung langsam runterdimmen und am Schluss alles abzuschalten.

IPS ist halt einfach genial. Da hast Möglichkeiten ohne Ende…

Genau so ist es gedacht.

Und so wie Du es gerne machen würdest ist es bei uns. Erst wird die Musik gedimmt und danach dann innerhalb von 30min auch die RGB Hintergrundbeleuchtung.
Mit was steuerst Du denn die LEDs? Für DMX hätte ich was da.

Und die Sleeptaster versuche ich auch noch in das Installationsskript reinzuschreiben damit man auch mit IPS Snoozen kann.

Gruß Jannis

Oh Gut… DMX bin ich auch in der Planungsphase. Zwei RGB DMX LED Controller sind in China bestellt. Fehlt bloss noch der DMX4ALL. Bis jetzt hab ich mal testweise das RGB868 dran.

Denk das ich bis in 3-4 Wochen alles da hab… Dann geht’s an den DMX Step…

@Jannis

Was hast du den für Zahlen in der Snoozezeit Variablen drinstehen ? Bei mir sind da irgendwie nur utopisch hohe Zahlen und wenn ich den Snoozetimer auf 0 in der Squeezebox stelle bleibt immer noch die hohe Zahl drinstehen…

… EDIT

Vergiss es… Passt. Hat mich nur etwas verwirrt. Funktioniert so wie es soll…

Nabend

In der Variable steht die aktuelle Uhrzeit

time()

in Sekunden seit 1970 (ist bei PHP/UNIX halt so) plus die Snoozezeit auch in Sekunden drin.

Gruß Jannis

Tolle Arbeit, leider bekomm ichs nicht zum Laufen. Fehler:

SB mitlesen motzt:

Notice: Undefined variable: IPS_VALUE in C:\IP-Symcon\scripts\47915.ips.php on line 6
Array
(
[0] =>
)

Notice: Undefined offset: 1 in C:\IP-Symcon\scripts\47915.ips.php on line 23

und SB schalten meint:

Notice: Undefined variable: IPS_VARIABLE in C:\IP-Symcon\scripts\47129.ips.php on line 2

Notice: Undefined variable: IPS_VARIABLE in C:\IP-Symcon\scripts\47129.ips.php on line 3

Danke für ne Idee… :eek:

Du musst die ganzen Instanzen und Mac Adressen anpassen. Sonst geht es nicht… War bei mir genau so…

Hallo dj,

So wie es aussieht startest Du das Skript per AUSFÜHREN im Skripteditor. Zu diesem Zeitpunkt stehen die Variablen die dir angezeigt werden nicht zur Verfügung.

Die $IPS_ Variable stehen nur zur Verfügung wenn das Skript von extern getriggert wurde.

hab nicht geändert, vom webfront aus funzt das ganze.
trotz der fehler meldeungen.
sehe jetzt die instanzen und playernamen nochmal durch…

MAC Adressen hab ich alle meine drin…

@werner
jupp, dass wirds sein. webfront und ifront(bis auf die popups/seitenwechsel) ok.

WUNSCH: jetzt noch shortcuts für die radiostationen / favouriten, das wäre prima.

Achja: wie schalte ich jetzt aus dem EIB raus z.B. mit den Präsenzmeldern meine Hörzonen an/aus

Hi,

ich habe eine Frage zu dem Skript.

Bei mir werden die Variablen nicht aktualisiert, sprich sie ändern sich nicht bis auf die Power EIN/AUS. Mach ich was falsch?

Grüße
Franz

Morgen Franz

hast du den Variablen vielleicht neue Namen gegeben? Wenn ja dann musst die sie im SB auslesen Skript auch abändern.

 SetValue(IPS_GetObjectIDByName("Lautstärke",$idbox), $cli[4]);

Das Skript schaut einfach in dem von dir angegebenen Verzeichniss($idbox) nach der Variable die z.B. „Lautstärke“ heißt, benutzt die Variablenid und schreibt dann da z.B. die neue Lautstärke($cli[4]) rein.
Wenn Power bei dir geht sollte das Skript ja eigentlich funktionieren.
Wenn nicht dann schreib hier

 case "prefset":
	 	switch($cli[3])
			{
		   case "volume":
		   	SetValue(IPS_GetObjectIDByName("Lautstärke",$idbox), $cli[4]);
print "Lautstärke";   <-------------  einfügen
			break;

das print rein um zu schauen ob IPS überhaupt mitbekommt das sich die Lautstärke ändert.

Gruß Jannis

Hi,

ja die Variablen waren schuld.

Danke

Hallo Jannis, ich bekomm das mit dem Sleep nicht gebacken.

Könntst Du mir das nochmal auseinander setzen - danke !

p.s. soweit läuft das Script toll im täglichen Einsatz. !a & Danke !