Hat es schon jemand geschafft, die Wiedergabe von irgendwelchen Audiofiles (mp3 etc.) von IPS aus zu inszenieren? Die Textmeldungsausgabe funktioniert prima, aber wie ist das mit Soundfiles?
Ich habe mir schon die CommandLine-Instructions von Squeezecenter ausgedruckt, komme damit aber auch nicht weiter.
Hat jemand Erfahrung damit und eventuell ein paar Script-Schnipsel anzubieten, oder sonst einen heißen Tipp?
P.S. Ich schreibe das mal ins Forum für V1, obwohl ich V2 einsetze. Das dürfte vermutlich egal sein.
Also mit Telnet funktioniert das einwandfrei.
Wenn ich nun die selben Telnet-Anweisungen über den Server-Socket von IPS bekommen könnte, würde ich sicher weiter kommen, nur weiss ich momentan nicht wie.
Für die echten PHP-Profis von euch sicher kein Problem.
Ich habe da auch schon fsockopen, psockopen und fputs rumexperimentiert, komme aber nicht zum Erfolg. Momentan kein Plan mehr, wie ich das anstellen soll, nur die eine Variable $buffer über den Squeezeserver an die Squeezebox zu schicken.:o
Der angegebene Player sollte dann auf Pause gehen.
Du musst natürlich die InstanzenID und die MAC-Adresse von dem jeweiligen Player anpassen, bei der MAC-Adresse müssen Buchstaben kleingeschrieben werden.
Die Ausgabe der Register Variablen kannst Du dann mit rawurldecode wieder „hübsch“ machen.
Ich wollte mir so eigentlich den aktuell gespielten Titel in IPS anzeigen lassen, leider gibt das CLI an dieser Stelle aber nur den Titelnamen aus, kein Album oder Interpret. Das muss man sich dann mit „album ?“ und „artist ?“ noch holen. Ein schönes Script dazu muss man/ich noch dafür schreiben.
Meine PHP-Kentnisse sind aber (noch) sehr eingeschränkt.
auswerte. Zählt bis Stelle 34 und übergibt den Wert, der an 35ster Stelle steht.
In dem Fall eine 1 oder 0, für an oder aus.
Ob ich das mit ‚rawurldecode‘ vorher wieder „schön“ mache oder nicht, ist dabei egal. Mich interessiert nur der letzte Wert und der verändert sich dadurch nicht.
Ich musste nur die Wartezeiten noch etwas erhöhen von 1 auf 5 Millisekunden, sonst lief das nicht immer zuverlässig und es stand schon der nächste/folgende Wert drin, der mit ‚CSCK_SendText‘ abgefragt wird. Es kommt dabei auch immer darauf an, wie der Squeezecenter-Server gerade beschäftigt ist und sich dementsprechend die Ausführung der Befehle bzw. die Antworten verzögern. Deshalb lieber die Wartezeit etwas höher.
Im Gegensatz zu dem, wie ich es vorher gemacht habe, hat sich die Ausführungszeit doch dramatisch verringert. Das läuft so alle in Bruchteilen der Zeit ab, wie mit PHPtelnet.
Allerdings bekomme ich immer die Fehlermeldung, dass die Variable 36168 nicht existiert. Das ist allerdings meine Registervariabel. Kann man die nicht mehr abfragen? Siehst Du einen Fehler?
…hab heute meine Squeezebox Radio bekommen und wurde diese gerne von IPS steuern. Das scheint hier ja auch irgendwie zu funktionieren nur steige ich hier nicht ganz durch.
Könnte hier mal einer ne Schritt für Schritt Anleitung geben was man unter IPS machen muss damit man die Box steuern kann. Vielleicht auch gleich paar PHP Zeilen zum z.B. Einschalten, nächster Track etc.
Ich habe noch das alte System zur Abfrage der Registervariable in Benutzung und noch nicht auf die neue Abfrage umgestellt. Bei mir direkt vom Cutter in eine Stringvariable geschrieben und nicht an ein Skript übergeben. Deshalb funktioniert bei dir scheinbar der Code nicht.
Mal ein einfaches Beispiel, wie ich die Boxen früh einschalten lasse… im Kinderzimmer und Küche, bevor es zur Schule geht.
Lautstärke der Boxen einstelle, ein paar Titel aus der Musikbibliothek und Internetradio streamen lasse, Boxen wieder ausschalte…
if ( !$freier_tag and !$meldung_aktiv ){}
…kannst du dabei erstmal weglassen.
$freier_tag wird errechnet, wenn Wochenende, Feiertag oder schulfrei ist (aus anderem Script) und $meldung_aktiv wird gesetzt, wenn gerade eine andere Meldung (Alarm, Warnung, Hinweis zum Wetter oder etc.) wiedergegeben wird.
Als erstes musst du aber erstmal den Squeezebox-Server an IPS über Clientsocket anmelden, Registervariablen usw., fallsdu das noch nicht gemacht hast. Das ist eine andere Geschichte…
<?
/*
************************************************************
Weckzeiten an Squeezeboxen
************************************************************
*/
// Steuerdaten
$sqc = 46204 /*[SqueezeCenter - BIGFRIEND [Akustisch] ]*/ ; // Squeezecenter - Client Socket
$freier_tag = GetValueBoolean(39649 /*[.Steuerung\Freier Tag]*/ ); // Freier Tag
$meldung_aktiv = GetValueBoolean(10268 /*[2. Etage\.Squeezebox\Squeezebox Meldung aktiv]*/ ); // Wird bereits eine Meldung wiedergegeben?
$zeit = date("Hi"); // Uhrzeit
$tag = date("d"); // Tag des Monats
$monat = date("m"); // Monat
$jahr = date("Y"); // Jahr
$datum = date ("Ymd"); // Datum (Format: JJJJMMTT)
// MAC-Adressen (Player-IDs) der Boxen
$no1box = "00:04:20:1e:22:11"; // Box 1 MAC-Adresse (Squeezebox-Flur)
$no2box = "00:04:20:1e:57:11"; // Box 2 MAC-Adresse (Squeezebox-Küche)
$no3box = "00:04:20:1e:5b:11"; // Box 3 MAC-Adresse (Squeezebox-Boom3)
$no4box = "00:04:20:26:1b:11"; // Box 3 MAC-Adresse (Squeezebox-Radio 1)
$no5box = "00:04:20:26:1b:11"; // Box 3 MAC-Adresse (Squeezebox-Radio-Kinderzimmer)
// ************************************************WECKZEITEN*********************************************
// -----------------------------------------------------------------------------
// Name: ****** SCHULE (Küche) ******
// Zyklus: täglich
// Tage: Mo-Fr
// Ausnahmen: Ferien und freie Tage
// Sperrzeiten: wenn eine Meldung aktiv ist
// Beginn: 06:20
// Ende: 06:48
// Box: Küche
if ( !$freier_tag and !$meldung_aktiv ){ // Ausnahmen: Freier Tag oder Meldung aktiv
if ($zeit == "0620"){ // Uhrzeit: Weckthema 1 AN
CSCK_SendText($sqc, $no2box.' mixer volume 19'.chr(13)); // Lautstärke einstellen
//CSCK_SendText($sqc, $no2box.' playlist play '.rawurlencode('http://streams.br-online.de/bayern3_2.asx').chr(13)); // Bayern3
CSCK_SendText($sqc, $no2box.' playlist play '.rawurlencode('http://opml.radiotime.com/Tune.ashx?id=s25774&username=sampletime&PartnerId=16').chr(13)); // Antenne Thüringen
}
if ($zeit == "0646"){ // Uhrzeit: Weckthema 2 AN
CSCK_SendText($sqc, $no2box.' playlist play '.rawurlencode('M:\AUDIO\Rolf Zuckowski und seine Freunde\Rolfs Top 100\18- Schulbus.mp3').chr(13) ); // Titel aus Musikbibliothek
CSCK_SendText($sqc, $no2box.' mixer volume 30'.chr(13)); // Lautstärke einstellen
}
if ($zeit == "0648"){ // Uhrzeit: Wecker AUS
CSCK_SendText($sqc, $no2box.' playlist clear'.chr(13)); // Wiedergabeliste leeren
CSCK_SendText($sqc, $no2box.' power 0'.chr(13)); // Ausschalten
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// Name: ****** SCHULE (Kinderzimmer) ******
// Zyklus: täglich
// Tage: Mo-Fr
// Ausnahmen: Ferien und freie Tage
// Sperrzeiten: wenn eine Meldung aktiv ist
// Beginn: 06:15
// Ende: 06:30
// Box: Küche
if ( !$freier_tag and !$meldung_aktiv ){ // Ausnahmen: Freier Tag oder Meldung aktiv
if ($zeit == "0615"){ // Uhrzeit: Weckthema 1 AN
CSCK_SendText($sqc, $no5box.' mixer volume 21'.chr(13)); // Lautstärke einstellen
CSCK_SendText($sqc, $no5box.' playlist play '.rawurlencode('M:\AUDIO\Diverse\Kinder singen mit großen und kleinen Freunden CD3\02- Wer hat an der Uhr gedreht (Rosaroter Panther)__Kinder und Freunde.mp3').chr(13) ); // Titel aus Musikbibliothek
}
if ($zeit == "0617"){ // Uhrzeit: Weckthema 2 AN
CSCK_SendText($sqc, $no5box.' playlist play '.rawurlencode('http://opml.radiotime.com/Tune.ashx?id=s25774&username=sampletime&PartnerId=16').chr(13)); // Antenne Thüringen
CSCK_SendText($sqc, $no5box.' mixer volume 25'.chr(13)); // Lautstärke einstellen
}
if ($zeit == "0630"){ // Uhrzeit: Wecker AUS
CSCK_SendText($sqc, $no5box.' playlist clear'.chr(13)); // Wiedergabeliste leeren
CSCK_SendText($sqc, $no5box.' power 0'.chr(13)); // Ausschalten
}
}
// -----------------------------------------------------------------------------
?>
<?
$paramline = rawurldecode($IPS_VALUE);
// Daten extrahieren
$params = explode(" ", $paramline, 3);
$player = $params[0];
$cmd = $params[1];
$cmdadd = "";
if (count($params) >=3) $cmdadd = trim($params[2]);
switch ($cmd)
{
case "power":
{
// StatusVariable des Players setzen
SetValue(1234, ($cmdadd != "0"));
}
break;
case "prefset":
{
// Daten extrahieren
$prefparams = explode(" ", $cmdadd, 3);
$who = "";
if (count($prefparams) >=1) $who = $prefparams[0];
$what = "";
if (count($prefparams) >=2) $what = $prefparams[1];
$val = "";
if (count($prefparams) >=3) $val = trim($prefparams[2]);
if ($who == "server" && $what == "volume") // Volume-Info vom Server
{
$val = abs($val); // bei mute werden negative Werte gemeldet
// ...
}
}
break;
case "playlist":
{
// Daten extrahieren
$prefparams = explode(" ", $cmdadd, 2);
$what = "";
if (count($prefparams) >=1) $what = $prefparams[0];
$val = "";
if (count($prefparams) >=2) $val = trim($prefparams[1]);
if ($what == "stop")
{
SetValue(27911 /*[System\Scripts\DeviceFunctions\Squeeze\NowPlaying]*/, "--stopped--");
}
else if ($what == "newsong")
{
$val = utf8_encode($val);
$oldVal = GetValue(27911 /*[System\Scripts\DeviceFunctions\Squeeze\NowPlaying]*/);
if ($val != $oldVal) // nur bei Wechsel (alle Player melden newsong)
{
// hier schalte ich bei unbeliebten Interpreten mal weiter ;)
SetValue(27911 /*[System\Scripts\DeviceFunctions\Squeeze\NowPlaying]*/, $val);
}
}
}
break;
case "button":
{
if (substr($cmdadd, 0, 11) == "playPreset_")
{
SetValue(51779 /*[System\Scripts\DeviceFunctions\Squeeze\PlaylistItem]*/ , substr($cmdadd,11, 1));
}
}
break;
case "mixer":
{
// Daten extrahieren
$prefparams = explode(" ", $cmdadd, 2);
$what = "";
if (count($prefparams) >=1) $what = $prefparams[0];
$val = "";
if (count($prefparams) >=2) $val = trim($prefparams[1]);
if ($what == "volume")
{
}
}
break;
}
?>
Mal so als Beispiel, für Power bräuchtest du nur den oberen Teil.
Um die Statusvaiable zu aktualisieren:
a) Abfragen mit „power ?“
b) Beim Aufstarten von IPS „listen 1“ an den Server schicken, es werden dann alle Meldungen automatisch vom Squeeze geschickt.
ich bin nun auch im Besitz einer Squeezebox und wollte mich jetzt mal an die Integration in IPS heranwagen.
Ich habe mal das Script von tinu ausprobiert.
Funktioniert soweit, allerdings würde ich das gerne ein wenig weiter ausbauen und bin auch gleich auf einen Schönheitsfehler gestoßen, den zu eleminieren mir noch der passende Befehl oder Denkanstoß fehlt.
Wie kann ich aus einem String alles nach dem letzten Leerzeichen entfernen?
Grund ist das das SqueezeCenter bei dem Song immer die Tracknummer hinten mit anstellt?
z.B. bla bla bla 13
Wie kann mal bei einer variablen Anzahl an Leerzeichen z.B. diese 13 entfernen, bzw. zur weiteren Verwendung abschneiden?
Weiter würde mich auch mal interessieren, ob es schonmal jemand umgesetzt hat, die Text2Speech Ansagen von IPS auf die Squeezebox umzuleiten, entweder über einer File oder Stream, wenn das überhabt geht.