Squeezebox / Squeezeserver Skript

Hier das Script und die Variablen:

<?
include "59739.ips.php";  // Squeezefunktions-Sammlung und Variablendefinitionen

$antwort = $IPS_VALUE;
$array = explode ( ' ', $antwort ); // Antwortstring in Array umwandeln
$array[0] =  urldecode ( $array[0] ); // MAC in lesbares Format umwandeln

// Variablen aus der RegVar in die entsprechenden Variablen von IPS eintragen


// =============================
// SqueezeBox Classic Wohnzimmer
// =============================

if($array[0] == Wohnzimmer) {          // Wohnzimmer

    // Powertaste bei Änderung aktualisieren
    if($array[1] == 'power') {
        if ($array[2] == 1) {
            SetValue(48681 /*[Sqeezebox\Power]*/, true);
        } else {
            SetValue(48681 /*[Sqeezebox\Power]*/, false);
        }
    SetValue(37372 /*[Sqeezebox\MAC]*/, $array[0]); //MAC in Variable
    }

    //Lautstärke bei Änderung aktualisieren
    if($array[1]=='prefset' and $array[3]=='volume') {
        SetValue(54790 /*[Sqeezebox\Volumen]*/, urldecode($array[4]));
        SetValue(37372 /*[Sqeezebox\MAC]*/, $array[0]); //MAC in Variable
    }

    // Repeat bei Änderung aktualisieren
    if($array[1]=='prefset' and $array[3]=='repeat') {
        SetValue(54155 /*[Sqeezebox\Wiederholung]*/, $array[4]);
    }

    // Shuffle bei Änderung aktualisieren
    if($array[1]=='prefset' and $array[3]=='shuffle') {
        SetValue(14620 /*[Sqeezebox\Zufallwiedergabe]*/, $array[4]);
    }

    //Titel-Tag aktualisieren
    if($array[1]=='playlist' and $array[2]=='newsong') {
        SetValue(54731 /*[Sqeezebox\Aktueller Titel]*/ , utf8_decode(urldecode($array[3])));
        SetValue(37372 /*[Sqeezebox\MAC]*/ , $array[0]); //MAC in Variable
        SetValue(59750 /*[Sqeezebox\Steuerung]*/, 2); // Button auf play
          cover(Wohnzimmer, 16410 /*[Sqeezebox\Cover]*/); // Cover anzeigen

        // Subscripe auf entsprechende Box für Anzeige des Laufzeitbalkens
        $box = Wohnzimmer;
        $cmd = "status - 1 subscribe:2";
        CSCK_SendText(SqueezeServer, $box." ".$cmd.chr(13));

    }

    // Steuerungstasten im Webfront aktualisieren
    if($array[1]=='play') {
       SetValue(59750 /*[Sqeezebox\Steuerung]*/, 2);
    }
    if($array[1]=='stop') {
       SetValue(59750 /*[Sqeezebox\Steuerung]*/, 0);

        // Subscribe ausschalten
        $box = Wohnzimmer;
        $cmd = "status - 1 subscribe:0";
        CSCK_SendText(SqueezeServer, $box." ".$cmd.chr(13));
    }
    if($array[1]=='pause' and $array[2]==1) {
       SetValue(59750 /*[Sqeezebox\Steuerung]*/, 1);

        // Subscribe ausschalten
        $box = Wohnzimmer;
        $cmd = "status - 1 subscribe:0";
        CSCK_SendText(SqueezeServer, $box." ".$cmd.chr(13));
    }

    if($array[1]=='pause' and $array[2]==0) {
       SetValue(59750 /*[Sqeezebox\Steuerung]*/, 2);
        $box = Wohnzimmer;
        $cmd = "status - 1 subscribe:2";
        CSCK_SendText(SqueezeServer, $box." ".$cmd.chr(13));
    }
    if($array[1]=='button' and $array[2]=='jump_rew') {
       SetValue(59750 /*[Sqeezebox\Steuerung]*/, 4);
    }
    if($array[1]=='button' and $array[2]=='jump_fwd') {
       SetValue(59750 /*[Sqeezebox\Steuerung]*/, 3);
    }
    if($array[1]=='status' and $array[4]=='subscribe%3A2') {
        foreach($array as $item)
        {
            $item = utf8_decode(urldecode($item));
            $chunks = explode(":", $item);
            if($chunks[0] == "time")
            {
                SetValue(32602 /*[Sqeezebox\akt. Position]*/, date('i:s', $chunks[1]));
                SetValue(15960 /*[Sqeezebox\akt. Position]*/, sprintf('%01.0f', $chunks[1]));
            }
            if($chunks[0] == "duration")
            {
                SetValue(15356 /*[Sqeezebox\Länge]*/, date('i:s', $chunks[1]));
                SetValue(32289 /*[Sqeezebox\Länge]*/, sprintf('%01.0f', $chunks[1]));
            }
            if(GetValue(15356 /*[Sqeezebox\Länge]*/) !== "00:00") {
                //slider(34996 /*[Objekt #34996 existiert nicht]*/, 100/GetValue(12610 /*[Objekt #12610 existiert nicht]*/)*GetValue(37989 /*[Objekt #37989 existiert nicht]*/), GetValue(40778 /*[Objekt #40778 existiert nicht]*/), GetValue(30117 /*[Objekt #30117 existiert nicht]*/));
                slider2(31940 /*[Sqeezebox\Position Neu]*/, 100/GetValue(32289 /*[Sqeezebox\Länge]*/)*GetValue(15960 /*[Sqeezebox\akt. Position]*/));
            }
        }

    }
}
//==============================================================
// Wiedergabelisten aus Squeezeserver nach IPS-Variable
//==============================================================

if($array[0] == 'playlists') {
    if($array[1] == '0') {

        // Associations löschen
        $Playlists = IPS_GetVariableProfile(".SQ_Playlist") ;                     // Variablenprofil in Array schreiben
        $CountPlaylists = count ($Playlists['Associations']);                     // Anzahl Assoziationen auslesen

        for($del = 1; $del < $CountPlaylists + 1; $del++) {
            IPS_SetVariableProfileAssociation(".SQ_Playlist", $del, "", "", -1);       // Rekursiv überschreiben
        }

        IPS_Sleep(500);                                                           // IPS zeit geben die Ass. zu löschen

        // Associations mit Wiedergabelisten aus Squeezeserver füllen
        // array besteht aus "playlist / startwert / endwert / playlistname / playlist_id / ..... / chr(13)
        // die ersten 3 Werte und das chr(13) wird entfernt
        // durch 2 geteilt und 1 dazu da array bei 1 beginnt, ergibt anzahl der Playlisten ((count($array)-4)/2)+1
        for($x=1; $x < ((count($array)-4)/2)+1; $x++ ) {
            $y = ($x*2)+2;
            $playlist = urldecode ( substr ($array[$y], 11) );
            $playlist_id = urldecode ( substr ($array[$y-1], 5 ) );
            IPS_SetVariableProfileAssociation(".SQ_Playlist", $x, $playlist, $playlist_id, -1);

        }

    }
}

//======================================================================
// Wiedergabelistenverarbeitung anstossen wenn eine neue Wiedergabeliste
// angelegt und benannte wurde
//======================================================================

if($array[0] == 'playlists') {
    if($array[1] == 'rename') {
      $cmd = "playlists 0 20";
        CSCK_SendText(SqueezeServer, $cmd.chr(13));                               // Playlists abrufen
    }
}


//===========================================================================
// Wiedergabelistenprofil aktualisieren wenn im Squeezeserver gelöscht wurde
//===========================================================================

if($array[0] == 'playlists') {
    if($array[1] == 'delete') {

        // alle Associations löschen da sonst die letzte stehen bleibt
        $Playlists = IPS_GetVariableProfile(".SQ_Playlist") ;                     // Profil in Array schreiben
        $CountPlaylists = count ($Playlists['Associations']);                     // Anzahl Associations

        for($del = 1; $del < $CountPlaylists + 1; $del++) {
            IPS_SetVariableProfileAssociation(".SQ_Playlist", $del, "", "");       // entsprechend Anzahl löschen / überschreiben
        }

        IPS_Sleep(1000);

      $cmd = "playlists 0 20";
        CSCK_SendText(SqueezeServer, $cmd.chr(13));                               // Playlists abrufen

        IPS_Sleep(1000);

        // Associations mit Wiedergabelisten aus Squeezeserver füllen
        // array besteht aus "playlist / startwert / endwert / playlistname / playlist_id / ..... / chr(13)
        // die ersten 3 Werte und das chr(13) wird entfernt
        // durch 2 geteilt und 1 dazu da array bei 1 gebinnt, ergibt anzahl der Playlisten ((count($array)-4)/2)+1
        for($x=1; $x < ((count($array)-4)/2)+1; $x++ ) {
            $y = ($x*2)+2;
            $playlist = urldecode ( substr ($array[$y], 11) );
            $playlist_id = urldecode ( substr ($array[$y-1], 5 ) );
            IPS_SetVariableProfileAssociation(".SQ_Playlist", $x, $playlist, $playlist_id);

        }
    }
}



//===========================================================================
// Antwort aus Playlistenausleseskript (33443 /*[Objekt #33443 existiert nicht]*/) nach IPS schreiben
//===========================================================================

if($array[0] == 'playlists' and $array[1] == 'tracks' and $array[2] == 0) {
    SetValue(43991 /*[Objekt #43991 existiert nicht]*/, $antwort);
}
?>

Hier nochmal der Screenshot, der andere war zu klein.

Hallo Heuser,

vorab eine allgemeine Bitte: Füge bitte PHP-Code mit der entsprechenden Funktion ein, das hilft uns Deine Code besser lesen zu können.
Das Bild im ersten Posting war besser zu lesen als im zweiten, im Ersten konnten man es nämlich vergrößern…:wink:

Was mir nicht ganz klar ist bei Deinem Code ist dieser Ausschnitt:

// Subscribe ausschalten
 $box = Wohnzimmer;
 $cmd = "status - 1 subscribe:0";
 CSCK_SendText(SqueezeServer, $box." ".$cmd.chr(13));
 }
 if($array[1]=='pause' and $array[2]==1) {
 SetValue(59750 /*[Sqeezebox\Steuerung]*/, 1);
 
// Subscribe ausschalten
 $box = Wohnzimmer;
 $cmd = "status - 1 subscribe:0";
 CSCK_SendText(SqueezeServer, $box." ".$cmd.chr(13));
 }
 

Mag sein, dass es sinnvoller erscheint, wenn Du noch mal zeigst, wie die Variablen definiert wurden…

Joachim

Hallo Joachim,
leider kann ich Dir die frage nicht beantworten. Ich weiss nich genau was Du meinst. Die Passage in dem Script habe ich unverändert (bis auf die ID) aus der ZIP-Datei im Post#1 übernommen.

Grüße
Heuser

Hallo,

kann es sein das nur maximal 20 Wiedergabelisten angezeigt werden können.

Lösung:

$cmd = "playlists 0 40";

Anstelle der 40 stand in der Vorlage eine 20.

Gruß
Frank

Hallo!

Ich hoffe es gibt hier noch support!?
Habe aktuell einen Fehler entdeckt, denke mal durch die V3.0!?

Und zwar im Auswertescript:

<?
include "16646.ips.php";  // Squeezefunktions-Sammlung und Variablendefinitionen

$antwort = $IPS_VALUE;
$array = explode ( ' ', $antwort ); // Antwortstring in Array umwandeln
$array[0] =  urldecode ( $array[0] ); // MAC in lesbares Format umwandeln
// Variablen aus der RegVar in die entsprechenden Variablen von IPS eintragen

Wenn ich das Ausführe erhalte ich nun immer den Fehler:

Notice:  Undefined variable: IPS_VALUE in [Media\Squeezebox\Küche\Auswerteskript] on line 4

Die Änderung habe ich auch Probiert, allerdings kommt dann:

Notice:  Undefined index: VALUE in [Media\Squeezebox\Küche\Auswerteskript] on line 4

Ausserdem erhalte ich keine Cover Anzeige mehr im Webfront.

Hoffe da ist was zu machen, brauche das Skript wieder :wink:

Wenn Du das manuell startest dann gibt es den Wert $_IPS[‚VALUE‘] nicht. Der wird erst dann übergeben wenn z.b. das Skript durch die Registervariable getriggert wird. Der Fehler ist daher keiner sondern normal. Die fraglichen Zeilen sehen bei mir so aus:


$antwort = $_IPS['VALUE'];
$array = explode ( ' ', $antwort ); // Antwortstring in Array umwandeln
$array[0] =  urldecode ( $array[0] ); // MAC in lesbares Format umwandeln

Unabhängig davon waren bei mir bezüglich des Updates nur hinsichtlich der Darstellung der Playlisten Änderungen notwendig. Das logische Gerüst lief unverändert.

ne, ist kein Fehler. Das Skript kann nur nicht durch „execute“ ausgeführt werden, dann ist $_IPS[‚VALUE‘] nämlich leer.
Wenn ich mich recht erinnere, dann wird das Skript durch die RegVar getriggert. Da ist $_IPS[‚VALUE‘] dann der Inhalt der RegVar.

EDIT: Kronos war schneller

EDIT: Kronos war schneller

Mittagspause…:smiley:

Okay, dann ist ja alles gut, aber warum sind meine Wiedergabelisten Presets dann wohl weg!? Und kein Cover mehr bei Radio Sendern…

Wie viele Wiedergabelisten hast Du denn? Die Anzahl der Variablenassoziationen wurde beschränkt, ich glaube auf 32.

Genau 8 derzeit.
Auf dem LMS sind sie auch da. Habe auch mal versucht einen zu löschen oder hinzuzufügen…passiert gar nix.

Wann genau ließt er die denn ein? Kann ich das auch manuell anstoßen?

Was passiert wenn Du die Playlisten manuell aktualisierst?


<?
include "12345.ips.php";  // Squeezefunktions-Sammlung und Variablendefinitionen
$cmd = "playlists 0 50";
CSCK_SendText(SqueezeServer, $cmd.chr(13)); // Playlists abrufen
?>

Kommen da Fehler? Was passiert im Logfile? Was im Debugfenster der Registervariable?

Ok, das ist verrückt, damit sind sie plötzlich alle da!

Ich löse das Skript stündlich über einen Timer aus. Bei mir war die Übergabe der Playlisten vorher auch, sagen wir mal launisch. :rolleyes: Nun ist Ruhe.

Besten Dank dafür erst mal Kronos!

Ich glaube ich weiß jetzt warum ich keine Cover mehr habe.
Hängt wohl mit der letzten Aktualisierung zusammen auf die v.7.7.3.
Da haben die ja was an der Cover Darstellung geändert, was nicht schlecht, ist, sieht besser aus jetzt auf den Playern.

Allerdings führt der Link (http://SERVERIP:9000/music/current/cover_140x140) bei den Radiostationen nun lediglich auf das blank cover.

Hat das noch wer? Und evtl. einen fix?

Hallo Christian,

Die Playlisten werden bei jeder Änderung (Löschen, umbenennen, neu erstellen) im LMS von IPS neu eingelesen.

Hatte hier aber auch schon ab und an ein Problem das die Assoziationen der entsprechenden Variable auf einmal leer waren. Hier half meist ein Neustarten des LMS wieder.

Ich löse das Skript stündlich über einen Timer aus. Bei mir war die Übergabe der Playlisten vorher auch, sagen wir mal launisch. Nun ist Ruhe.

Kronos: Auch ein Idee :smiley: Hauptsache es funktioniert.

Kann ich im Moment nicht nachvollziehen. Hatte zwar kurze Zeit den 7.7.3 auf meinem Server laufen, da ich hier aber ca. 15 Sekunden warten musste bis ein Radiosender zum spielen anfing bin ich mit dem LMS auf mein NAS umgezogen. Bedauerlicherweise gibt es hier nur den 7.7.2.

Aber wenn ich mich korrekt erinnern kann funktionierten die Logos der Sender.

Ich bin auf LMS 7.8 unterwegs. Habe an den Skripten mittlerweile so viel rumgeschraubt, dass ich nicht mehr weiss was original von Werner ist und was ich umgebaut habe.

Der Teil der im Include-Skript bei mir das Cover holt sieht so aus:

function cover($player_id, $var_id)
{
	$time=time();
	$str = "<table width='100%' cellspacing='0'><tr><td align=center>";
	$str = $str. "<img src='http://xxx.xxx.xxx.xxx:9001/music/current/cover_140x140_$time.jpg?player=$player_id'></img>";
	$str2 = "http://xxx.xxx.xxx.xxx:9001/music/current/cover_140x140.jpg?player=$player_id";
	$str = $str. "</td></tr></table>";
	SetValue($var_id, $str);
}

Wobei zu beachten ist (zumindest bis 7.7.3) das der Weg ein Cover für ein mp3 und der Weg für ein Artwork eines Radiosenders ein anderer ist.

Siehe hierzu auch die Ergänzung aus Beitrag #74 wo die Erweiterung beschrieben ist.

Ich weiß das der Thread und die darin befindlichen Anpassungen/Änderung/Erweiterungen sehr unübersichtlich ist, aber ich kann mittlerweile das Projekt selbst kaum noch pflegen. Dafür gab es einen anderen User der sein Projekt vorgestellt hat.

Bei mir ist es mittlerweile so gewachsen das ich es kaum noch ändern kann/will. Nach dem Motto „Never touch a running System“ :smiley:

Sollte das tatsächlich an mir vorbei gegangen sein!? Werde ich heute abend mal überprüfen, danke für den Hinweis!

Eine Frage habe ich mal noch, steht zwar schon an anderer Stelle, aber passt hier ja vielleicht besser.
Ich habe Probleme die Coveransicht auf meinem Android Tablet darzustellen:

Squeeze.jpg

Da kommt mal einfach gar nicht´s :frowning:
Habt ihr da evtl. noch einen Tip für mich?
Danke!