Mp3-Ordneranzeige im Webfront und auf dem edip

Hallo
Wollte euch nur mein Skript zur Mp3ordner Anzeige und Auswahl im Webfront und im Edip vorstellen. Vielleicht kanns ja einer gebrauchen.

Man erstelle ein Skript zum einlesen des MP3Ordners. Hier wird als erstes das VariablenProfil „Musikordner“ gelöscht(macht beim erstenmal eine Warnung, da es das Profil ja noch nicht gibt), anschliessend gleich wieder erstellt und der Integervarible Ordner zugeordnet.



	$profil="Musikordner";
  	IPS_DeleteVariableProfile($profil);
  	IPS_CreateVariableProfile($profil,1);
  	IPS_SetVariableCustomProfile(35751 /*[Webfront Dummy\Dummy Audio\Ordner]*/,$profil);

Jetzt wird das Verzeichniss in dem die Mp3ordner drin sind mit scandir in ein Array ausgelesen und dann ab Eintrag 2 (die ersten beiden sind „.“ und „…“ überprüft ob der Eintrag ein Verzeichniss ist.
Wenn ja dann wird eine Association im Musikordner Profil angelegt
und zusätzlich in einem Array abgespeichert.
Das Array ist einfach dazu da das keinen Lücke in der Edip Ansicht entsteht wegen den „.“ und „…“ „Verzeichnissen“ oder wenn noch andere Dateien in dem Ordner sind. Wer nur die Webfrontansicht benötigt könnte es auch weglassen, sollte dann aber das $j durch $i ersetzen (IPS_SetVariableProfileAssociation($ordner,$i,$files[$i],""):wink:
Anschliessend wird das Array abgespeichert.

Kleine einschränkung bei IPS 2.1 gibt es den befehl WFC_Reload noch nicht, also muss man das webfront wenn es gerade offen ist von Hand neuladen.


$dir    = 'D:/mp3/';
$files = scandir($dir);
$j=0;
for ($i=2;$i < count($files);$i++)
if (is_dir($dir.$files[$i]))
	{
	 IPS_SetVariableProfileAssociation($profil,$j,$files[$i],"");
	$temp_array[$j]=$i;
	$j++;
	
	}

SetValue(36456 /*[Diverse\Audio\Mp3ordner]*/, wddx_serialize_value($temp_array) );
WFC_Reload(42823 /*[WebFront Configurator]*/ /*[WebInterface WebFront]*/); //nur ab IPS 2.2

Das war das einlese Skript, das man immer ausführen sollte wenn sich was im Mp3ordner ändert. Sonst spielt IPS eventuell was anderes als gewünscht.

Das ordnerabspielen Skript ist einfach das Ordner Rekursiv in MediaPlayer Playlist laden Skript von Paresy mit dem Zusatz für den entsprechenden Ordner.

<?

$dir    = 'D:/mp3/';
$files = scandir($dir);
$Mp3ordner = GetValue(36456 /*[Diverse\Audio\Mp3ordner]*/);
$temp_array = wddx_deserialize($Mp3ordner);
WAC_PlayDir(19480 /*[Diverse\Audio\Media Player Musik]*/,$dir.$files[$temp_array[$ordn]]);


function WAC_PlayDir($id, $dir)
{
 function ReadRecursive($dir, $subdir = "") {
  $result = Array();
  $files = scandir($dir."/".$subdir);
  foreach($files as $file)
  {
   if(($file != ".") && ($file != "..")){
    if(is_dir($dir."/".$subdir."/".$file)) {
     $res = ReadRecursive($dir, $subdir."/".$file);
     $result = array_merge($res, $result);
    } else {
     $filedir = $subdir."/".$file;
     $filedir = substr($filedir, 1, strlen($filedir));
     $result[] = $filedir;
    }
   }
  }
  return $result;
 }

 $allowed = Array("mp3", "wma");
 $files = ReadRecursive($dir);

 WAC_ClearPlaylist($id);
 foreach($files as $file)
 {
  $ext = pathinfo($dir."/".$file, PATHINFO_EXTENSION);
  if(in_array(strtolower($ext), $allowed))
  {
   WAC_AddFile($id, $dir."/".$file);
  }
 }
 WAC_Play($id);
}


?> 

Zum abspielen der Ordner rufe ich das Skript ordnerabspielen auf und übergebe die Variable ordn mit der Nummer des Ordners die ich hören will

IPS_RunScriptEx($idordnerabspielen,Array("ordn" => 4));

.


Um aus dem Webfront heraus einen Ordner abzuspielen eine neues Skript anlegen und dahinein kommt das hier:


$idordnerabspielen = 55583 /*[Media Player\Ordner abspielen]*/;
 setvalue(36050 /*[Ordner anzeige]*/,$IPS_VALUE); //damit man im Webfront auch sieht was gerade gedrückt wurde
IPS_RunScriptWaitEx($idordnerabspielen,Array("ordn" => $IPS_VALUE));

Dann nur noch die Variable „Ordner anzeige“ bearbeiten und unter Eigene Aktion das eben erstellte Skript angeben.

So wurde doch länger als ich gedacht habe und ich komme nicht mehr dazu meine Skripte fürs edip vorzustellen(wird aber nachgeholt). Hier nur mal die Vorschau :wink:

Gruß Jannis

Ordner.jpg

Hallo Jannis,

einige Variablen sind für mich nicht klar, wofür welche und wie?
ich fang mal an

  1. 35751 = Integer > OK habe ich
  2. 36456 = keine Ahnung wofür und wie
  3. 42823 = Web Configurator > OK habe ich
  4. 55583 = vieleicht ein Script > ?? Wahrscheinlich das abspiel script oder

ich weis jedenfalls nicht wofür 36456 ist, danke für Hilfe im voraus.

Gruß Detlef

bin zwar nicht Jannis, aber mit 36456 wird der MP3 Ordner übergeben wie im Script zusehen ist.

$Mp3ordner = GetValue(36456 /*[Diverse\Audio\Mp3ordner]*/); 
$temp_array = wddx_deserialize($Mp3ordner); 

Hallo Rainer,

ja aber… hier fängt mein Problem an in dem 2.ten Schnipsel

SetValue(36456 /*[Diverse\Audio\Mp3ordner]*/, wddx_serialize_value($temp_array) ); 
WFC_Reload(42823 /*[WebFront Configurator]*/ /*[WebInterface WebFront]*/); //nur ab IPS 2.2 

was ist das für eine Variable 36465 oder wo muss ich die anlegen ??

Hier komm ich ins grübeln, Gruß Detlef

Hallo,

mein Erfolg zu dem „MP3 Ordner Einlesen“ es im Webfront anzuzeigen und per klick meinen Wunschordenr abzuspielen > erstreckt sich auf Fehlermeldungen in allen Bereichen. Habe keine blassen schimmer, in welcher Variable was stehen soll um zu erkennen wo ein Fehler sein soll…

Den MediaPlayer, (einen) MP3Ordner einlesen von Paresy, TTS mit meinem „Wunsch :)“ Text, Webradio alles bekomme ich hin,
zu diesem Script/ Prozedur fehlt mir der entscheidende Funke.
Danke an alle die es versucht haben ich gehe jetzt in den Garten
es scheint die Sonne, werde mal die Batterie laden…

Gruß Detlef

Hallo Jannis
das Script interessiert mich, scheitere aber auch an den Vaiablen.
Wäre es Dir möglich die verwendeten Variablen kurz zu erläutern ?

Oder kenn sonst jemand eine möglichkeit wie ich meine MP3’s (pro Album ein Ordner) bequem verwalten kann.

Danke
hadauj

Hallo Janis,

da kann ich mir nur anschliessen, Dein Skript ist genau das was ich gesucht habe :slight_smile:

bin aber derzeit nur bis zum WebFront gekommen, d.h. Ordner einlesen funktioniert, Anzeige im WebFront auch, aber die Ansteuerung (Abspielen) über WebFront funkt nicht …

… wäre schön, wenn Du noch einmal ein paar erklärende Schritte hinzufügst.

Danke im Voraus

Tilo

Hallo

ich versuch dann mal die Variablen und die Scripte besser zu erklären.
Als erstes sollten alle MP3 in einem Ordner sein. Bei mir D:/mp3/ .
In diesem Ordner habe ich dann in Unterordnern meine MP3s abgelegt. Diese Unterordner sind dann auch der Name der im Webfront auftacht. Man könnte auch sagen die Ordner sind eine Art Playliste.

Die erste Variable die Ihr anlegen müsst ist eine Integervariable und heißt bei mir Ordner und hat die ID 35751 .

Das erste Script ist das Ordnereinlese Script. Bei mir 47501 und heißt „MP3 Ordner neu einlesen“

<?
$dir    = 'D:/mp3/';
$files = scandir($dir);
	$profil="Musikordner";
  	IPS_DeleteVariableProfile($profil);
  	IPS_CreateVariableProfile($profil,1);
  	IPS_SetVariableCustomProfile(35751 /*[Audio\MP3 Ordner\Ordner]*/,$profil);


$j=0;
for ($i=0;$i < count($files);$i++)
if (($files[$i]<>".") and ($files[$i]<>".."))         // die "Dateien" . und .. auslassen
if (is_dir($dir.$files[$i]))                          // nur einlesen wenn die Datei ein Verzeichniss ist
	{
	   $verzeichniss=substr($files[$i],0,40);
	 IPS_SetVariableProfileAssociation($profil,$j,$verzeichniss,"");     // Dem Profil Musikordner einen neuen Wert zuordnen
	$temp_array[$j]=$i;
	$j++;
	
	}
WFC_Reload(47420 /*[WebInterface WebFront]*/);
SetValue(36456 /*[Diverse\Audio\Mp3ordner]*/, wddx_serialize_value($temp_array) );

?>

Dieses Script muss Ihr ausführen wenn Ihr etwas im Mp3Ordner verändert.
Es ließt einfach den Ordner MP3 ein und legt eine Profil „Musikordner“ an in dem alle Unterordner mit ihrer Position im Verzeichniss abgelegt werden.

Die Variable 47420 /*[WebInterface WebFront] befindet sich im Kern Instancen ordner.

Die letzte Variable in dem Script ist 36456 /[Diverse\Audio\Mp3ordner]/ diese ist eine Stringvariable und darin wird nur abgespeichert welche Datei im Ordner MP3 ein Verzeichniss ist.

Als Abspielscript „Ordner abspielen“ 14707 wurde das Ordnerabspielenscript von paresy umgeschrieben.

<?

$dir    = 'D:/mp3/';
$files = scandir($dir);
$Mp3ordner = GetValue(36456 /*[Diverse\Audio\Mp3ordner]*/);
$temp_array = wddx_deserialize($Mp3ordner);

WAC_PlayDir(19480 /*[Diverse\Audio\Media Player Musik]*/,$dir.$files[$temp_array[$ordn]]);


function WAC_PlayDir($id, $dir)
{
 function ReadRecursive($dir, $subdir = "") {
  $result = Array();
  $files = scandir($dir."/".$subdir);
  foreach($files as $file)
  {
   if(($file != ".") && ($file != "..")){
    if(is_dir($dir."/".$subdir."/".$file)) {
     $res = ReadRecursive($dir, $subdir."/".$file);
     $result = array_merge($res, $result);
    } else {
     $filedir = $subdir."/".$file;
     $filedir = substr($filedir, 1, strlen($filedir));
     $result[] = $filedir;
    }
   }
  }
  return $result;
 }

 $allowed = Array("mp3", "wma");
 $files = ReadRecursive($dir);

//Den Zufallsgenerator von PHP verwenden
//shuffle($files);

 WAC_ClearPlaylist($id);
 foreach($files as $file)
 {
  $ext = pathinfo($dir."/".$file, PATHINFO_EXTENSION);
  if(in_array(strtolower($ext), $allowed))
  {
   WAC_AddFile($id, $dir."/".$file);
  }
 }
 WAC_Play($id);
}



?>

Dieses Script kann nur ausgeführt werden wenn ihm der wert $ordn mitgeteilt wird.
Also z.B.

IPS_RunScriptEx(14707 /*[Diverse\Audio\Ordner abspielen]*/,Array("ordn" => 5));

Als nächstes legen wir ein Script an, das auf einen Tastenbefehl im Webfront reagiert.

 setvalue(35751 /*[Audio\MP3 Ordner\Ordner]*/,$IPS_VALUE);
   IPS_RunScriptEx(14707 /*[Diverse\Audio\Ordner abspielen]*/,Array("ordn" => $IPS_VALUE));

So jetzt nur noch einen Doppelklick auf die Variable Ordner (ID 35751), einmal weiter anklicken und bei „Eigene Aktion“ das letzte Script auswählen.

Ich denke jetzt hab ich alle Variablen und es klappt bei euch.

Wenn nicht einfach fragen.

Gruß Jannis

Jetzt läuft’s !:slight_smile:
danke für die Erläuterungen.

Hallo Jannis und alle anderen,

Danke, jetzt habe ich auch den Durchblick,
es geht und bin :smiley: … Frühling halt :loveips:

Gruß an alle, hoffentlich kommt die Sonne bald
Detlef

Hallo Janis,

vielen Dank - Script hat problemlos funktioniert (genau das was ich gesucht habe für die Musikwiedergabe) :slight_smile:

Tilo

Hallo
Beim Ausführen des Abspiel-Scriptes bekomme ich folgende Meldungen:

Notice: Undefined variable: ordn in D:\Programme\IP-Symcon\scripts\39830.ips.php on line 8

Notice: Undefined index: in D:\Programme\IP-Symcon\scripts\39830.ips.php on line 8

Notice: Undefined index: in D:\Programme\IP-Symcon\scripts\39830.ips.php on line 8

Was bedeuten diese Meldungen und welche Instance ist „19480“

   <?

$dir    = 'D:/mp3/';
$files = scandir($dir);
$Mp3ordner = GetValue(36456 /*[Diverse\Audio\Mp3ordner]*/);
$temp_array = wddx_deserialize($Mp3ordner);

WAC_PlayDir(19480 /*[Diverse\Audio\Media Player Musik]*/,$dir.$files[$temp_array[$ordn]]);


function WAC_PlayDir($id, $dir)
{
 function ReadRecursive($dir, $subdir = "") {
  $result = Array();
  $files = scandir($dir."/".$subdir);
  foreach($files as $file)
  {
   if(($file != ".") && ($file != "..")){
    if(is_dir($dir."/".$subdir."/".$file)) {
     $res = ReadRecursive($dir, $subdir."/".$file);
     $result = array_merge($res, $result);
    } else {
     $filedir = $subdir."/".$file;
     $filedir = substr($filedir, 1, strlen($filedir));
     $result[] = $filedir;
    }
   }
  }
  return $result;
 }

 $allowed = Array("mp3", "wma");
 $files = ReadRecursive($dir);

//Den Zufallsgenerator von PHP verwenden
//shuffle($files);

 WAC_ClearPlaylist($id);
 foreach($files as $file)
 {
  $ext = pathinfo($dir."/".$file, PATHINFO_EXTENSION);
  if(in_array(strtolower($ext), $allowed))
  {
   WAC_AddFile($id, $dir."/".$file);
  }
 }
 WAC_Play($id);
}



?> 

Gruß
computerpap

Hy,
als erstes würde ich die Leerzeichen oben vor <? entfernen, könnnte schon fehler verursachen.

Und als zweites die Variable $ordn zuordnen.

Hallo

@bmwm3
die Leerzeichen hatte ich schon entfernt, aber keine Änderung

@Heidewinkler
Kannst du mir das etwas genauer erklären, kenn mich mit PHP
nicht so gut aus!

Gruß
computerpap

Hast du denn schon eine mediaplayer instance angelegt?
19480 ist die instance vom mediaplayer.
Ansonsten sieht das Script Fehlerfrei aus.

cu.
uriel2006

WAC_PlayDir(19480 /[Diverse\Audio\Media Player Musik]/,$dir.$files[$temp_array[$ordn]]);

diese Variable ist doch nirgents definiert (hat keinen Inhalt), oder schiele ich?

Hallo
@uriel2006
MediaPlayer-Instance hatte ich bereits angelegt.

@Heidewinkler
Wo muß den die Variable $ordn definiert werden? Das hab ich so aus den Code von Jannis übernommen.

Gruß computerpap

Hallo computerpap

die Variable $ordn wird dem Script erst beim aufruf z.B. ausm Webfront mitgeteilt.

IPS_RunScriptEx(14707 /*[Diverse\Audio\Ordner abspielen]*/,Array("ordn" => 5));  

Gruß Jannis

Hallo Jannis!

Wäre es möglich, mal einen Screenshot von deinem Objektbaum zu posten, da könnte man es besser nachvollziehen, welche Variablen und Scripte du erstellt hast.

Gruß
computerpap