mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-02-01 01:09:47 +00:00
73_MPD : add two new readings for TabletUI, change some reading names to uppercase
git-svn-id: https://svn.fhem.de/fhem/trunk@12948 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
bb5095764d
commit
04a4409f75
@ -21,6 +21,7 @@
|
|||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
################################################################
|
################################################################
|
||||||
|
|
||||||
|
# Version 1.32 - 03.01.17
|
||||||
# Version 1.31 - 30.12.16
|
# Version 1.31 - 30.12.16
|
||||||
# Version 1.3 - 14.12.16
|
# Version 1.3 - 14.12.16
|
||||||
# Version 1.2 - 10.04.16
|
# Version 1.2 - 10.04.16
|
||||||
@ -218,7 +219,7 @@ sub MPD_Define($$)
|
|||||||
$attr{$name}{titleSplit} = '1' unless (exists($attr{$name}{titleSplit}));
|
$attr{$name}{titleSplit} = '1' unless (exists($attr{$name}{titleSplit}));
|
||||||
$attr{$name}{player} = 'mpd' unless (exists($attr{$name}{player}));
|
$attr{$name}{player} = 'mpd' unless (exists($attr{$name}{player}));
|
||||||
$attr{$name}{loadPlaylists} = '1' unless (exists($attr{$name}{loadPlaylists}));
|
$attr{$name}{loadPlaylists} = '1' unless (exists($attr{$name}{loadPlaylists}));
|
||||||
$attr{$name}{cache} = 'lfm' unless (exists($attr{$name}{cache}));
|
#$attr{$name}{cache} = 'lfm' unless (exists($attr{$name}{cache}));
|
||||||
#$attr{$name}{loadMusic} = '1' unless (exists($attr{$name}{loadMusic})) && ($attr{$name}{player} ne 'mopidy');
|
#$attr{$name}{loadMusic} = '1' unless (exists($attr{$name}{loadMusic})) && ($attr{$name}{player} ne 'mopidy');
|
||||||
|
|
||||||
RemoveInternalTimer($hash);
|
RemoveInternalTimer($hash);
|
||||||
@ -296,8 +297,6 @@ sub MPD_Attr (@)
|
|||||||
}
|
}
|
||||||
$attr{$name}{cache} = $attrVal;
|
$attr{$name}{cache} = $attrVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
elsif ($cmd eq "del")
|
elsif ($cmd eq "del")
|
||||||
{
|
{
|
||||||
@ -325,16 +324,16 @@ sub MPD_ClearReadings($)
|
|||||||
readingsBulkUpdate($hash,"albumartistsort","");
|
readingsBulkUpdate($hash,"albumartistsort","");
|
||||||
readingsBulkUpdate($hash,"artistsort","");
|
readingsBulkUpdate($hash,"artistsort","");
|
||||||
}
|
}
|
||||||
readingsBulkUpdate($hash,"albumartist","");
|
#readingsBulkUpdate($hash,"albumartist","");
|
||||||
readingsBulkUpdate($hash,"album","");
|
readingsBulkUpdate($hash,"Album","");
|
||||||
readingsBulkUpdate($hash,"artist","");
|
readingsBulkUpdate($hash,"Artist","");
|
||||||
readingsBulkUpdate($hash,"file","");
|
readingsBulkUpdate($hash,"file","");
|
||||||
readingsBulkUpdate($hash,"genre","");
|
readingsBulkUpdate($hash,"Genre","");
|
||||||
readingsBulkUpdate($hash,"last-modified","");
|
readingsBulkUpdate($hash,"Last-Modified","");
|
||||||
readingsBulkUpdate($hash,"title","");
|
readingsBulkUpdate($hash,"Title","");
|
||||||
readingsBulkUpdate($hash,"name","");
|
readingsBulkUpdate($hash,"Name","");
|
||||||
readingsBulkUpdate($hash,"date","");
|
readingsBulkUpdate($hash,"Date","");
|
||||||
readingsBulkUpdate($hash,"track","");
|
readingsBulkUpdate($hash,"Track","");
|
||||||
readingsBulkUpdate($hash,"playlistname","");
|
readingsBulkUpdate($hash,"playlistname","");
|
||||||
#readingsBulkUpdate($hash,"artist_image","/fhem/icons/1px-spacer", "");
|
#readingsBulkUpdate($hash,"artist_image","/fhem/icons/1px-spacer", "");
|
||||||
#readingsBulkUpdate($hash,"artist_image_html","");
|
#readingsBulkUpdate($hash,"artist_image_html","");
|
||||||
@ -492,9 +491,14 @@ sub MPD_Set($@)
|
|||||||
|
|
||||||
MPD_ClearReadings($hash);
|
MPD_ClearReadings($hash);
|
||||||
$hash->{".music"} = "";
|
$hash->{".music"} = "";
|
||||||
|
my $old_list = $hash->{".playlist"};
|
||||||
$hash->{".playlist"} = $subcmd; # interne Playlisten Verwaltung
|
$hash->{".playlist"} = $subcmd; # interne Playlisten Verwaltung
|
||||||
readingsSingleUpdate($hash,"playlistname",$subcmd,1);
|
readingsSingleUpdate($hash,"playlistname",$subcmd,1);
|
||||||
$ret = mpd_cmd($hash, clb."stop\nclear\nload \"$subcmd\"\nplay\n".cle);
|
$ret = mpd_cmd($hash, clb."stop\nclear\nload \"$subcmd\"\nplay\n".cle);
|
||||||
|
if ($old_list ne $hash->{".playlist"})
|
||||||
|
{
|
||||||
|
MPD_NewPlaylist($hash,mpd_cmd($hash, "i|playlistinfo|x|"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($cmd eq "playfile")
|
if ($cmd eq "playfile")
|
||||||
@ -598,6 +602,7 @@ sub MPD_Get($@)
|
|||||||
return "$name get with unknown argument $cmd, choose one of " . join(" ", sort keys %gets);
|
return "$name get with unknown argument $cmd, choose one of " . join(" ", sort keys %gets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sub format_get_output($$)
|
sub format_get_output($$)
|
||||||
{
|
{
|
||||||
my ($head,$ret)= @_;
|
my ($head,$ret)= @_;
|
||||||
@ -702,7 +707,7 @@ sub mpd_cmd($$)
|
|||||||
{
|
{
|
||||||
my $cmd = $_;
|
my $cmd = $_;
|
||||||
print $sock "$cmd\r\n";
|
print $sock "$cmd\r\n";
|
||||||
Log3 $name, 5 , "$name, send-> $cmd";
|
Log3 $name, 5 , "$name, mpd_cmd[1] -> $cmd";
|
||||||
|
|
||||||
while (<$sock>)
|
while (<$sock>)
|
||||||
{
|
{
|
||||||
@ -715,29 +720,29 @@ sub mpd_cmd($$)
|
|||||||
|
|
||||||
if ($b && defined($c)) # ist das ein Reading ?
|
if ($b && defined($c)) # ist das ein Reading ?
|
||||||
{
|
{
|
||||||
$b = lc($b);
|
#$b = lc($b);
|
||||||
if ($b eq "volume") { $hash->{".volume"} = $c; } # Sonderfall volume
|
if ($b eq "volume") { $hash->{".volume"} = $c; } # Sonderfall volume
|
||||||
|
|
||||||
$artist = $c if ($b eq "artist");
|
$artist = $c if ($b eq "Artist");
|
||||||
|
|
||||||
if ($b eq "title")
|
if ($b eq "Title")
|
||||||
{
|
{
|
||||||
$sp = index($c, " - ");
|
$sp = index($c, " - ");
|
||||||
if (AttrVal($name, "titleSplit", 1) && ($sp>0)) # wer nicht mag solls eben abschalten
|
if (AttrVal($name, "titleSplit", 1) && ($sp>0)) # wer nicht mag solls eben abschalten
|
||||||
{
|
{
|
||||||
$artist = substr($c,0,$sp);
|
$artist = substr($c,0,$sp);
|
||||||
readingsBulkUpdate($hash,"artist",$artist);
|
readingsBulkUpdate($hash,"Artist",$artist);
|
||||||
readingsBulkUpdate($hash,"title",substr($c,$sp+3));
|
readingsBulkUpdate($hash,"Title",substr($c,$sp+3));
|
||||||
}
|
}
|
||||||
else { readingsBulkUpdate($hash,"title",$c); } # kein Titel Split
|
else { readingsBulkUpdate($hash,"Title",$c); } # kein Titel Split
|
||||||
}
|
}
|
||||||
elsif ($b eq "time")
|
#elsif ($b eq "time")
|
||||||
{
|
#{
|
||||||
# fix für doppeltes time Reading
|
# fix für doppeltes time Reading
|
||||||
# https://forum.fhem.de/index.php/topic,18517.msg539676.html#msg539676
|
# https://forum.fhem.de/index.php/topic,18517.msg539676.html#msg539676
|
||||||
if (index($c,":") == -1) {$b = "songtime";}
|
#if (index($c,":") == -1) {$b = "songtime";}
|
||||||
readingsBulkUpdate($hash,$b,$c);
|
#readingsBulkUpdate($hash,$b,$c);
|
||||||
}
|
#}
|
||||||
|
|
||||||
else { readingsBulkUpdate($hash,$b,$c); } # irgendwas aber kein Titel
|
else { readingsBulkUpdate($hash,$b,$c); } # irgendwas aber kein Titel
|
||||||
} # defined $c
|
} # defined $c
|
||||||
@ -752,6 +757,7 @@ sub mpd_cmd($$)
|
|||||||
else
|
else
|
||||||
{ # start internes cmd
|
{ # start internes cmd
|
||||||
print $sock $commands[1]."\r\n";
|
print $sock $commands[1]."\r\n";
|
||||||
|
Log3 $name, 5 , "$name, mpd_cmd[2] -> ".$commands[1];
|
||||||
my $d;
|
my $d;
|
||||||
while (<$sock>)
|
while (<$sock>)
|
||||||
{
|
{
|
||||||
@ -763,17 +769,17 @@ sub mpd_cmd($$)
|
|||||||
|
|
||||||
if (($b eq "file" ) && ($commands[2] eq "music")) {$hash->{".musiclist"} .= $c; } # Titelliste füllen
|
if (($b eq "file" ) && ($commands[2] eq "music")) {$hash->{".musiclist"} .= $c; } # Titelliste füllen
|
||||||
elsif (($b eq "playlist" ) && ($commands[2] eq "playlists")) {$hash->{".playlists"} .= $c; } # Playliste füllen
|
elsif (($b eq "playlist" ) && ($commands[2] eq "playlists")) {$hash->{".playlists"} .= $c; } # Playliste füllen
|
||||||
|
|
||||||
if ($commands[2] eq "x") { $output .= $_; }
|
if ($commands[2] eq "x") { $output .= $_; }
|
||||||
} # while
|
} # while
|
||||||
|
|
||||||
if (defined($commands[3]))
|
if (defined($commands[3]))
|
||||||
{
|
{
|
||||||
$output =~s/Title:/title:/g;
|
#$output =~s/Title:/title:/g;
|
||||||
$output =~s/Id:/id:/g;
|
#$output =~s/Id:/id:/g;
|
||||||
$output =~s/Name:/name:/g;
|
#$output =~s/Name:/name:/g;
|
||||||
$output =~s/Pos:/pos:/g;
|
#$output =~s/Pos:/pos:/g;
|
||||||
$output =~s/: / : /g;
|
#$output =~s/: / : /g;
|
||||||
|
|
||||||
my @arr = split("\n",$output);
|
my @arr = split("\n",$output);
|
||||||
@arr = sort(@arr);
|
@arr = sort(@arr);
|
||||||
$output = join("\n",@arr);
|
$output = join("\n",@arr);
|
||||||
@ -790,7 +796,7 @@ sub mpd_cmd($$)
|
|||||||
my $plists = $hash->{".playlists"};
|
my $plists = $hash->{".playlists"};
|
||||||
$plists =~ tr/\n/\:/; # Tablet UI will diese Art der Liste
|
$plists =~ tr/\n/\:/; # Tablet UI will diese Art der Liste
|
||||||
readingsSingleUpdate($hash,"playlistcollection", $plists,1);
|
readingsSingleUpdate($hash,"playlistcollection", $plists,1);
|
||||||
Log3 $name ,4 ,"$name, ".$hash->{READINGS}{"playlistcollection"}{VAL};
|
Log3 $name ,5 ,"$name, ".$hash->{READINGS}{"playlistcollection"}{VAL};
|
||||||
}
|
}
|
||||||
|
|
||||||
return $output; # falls es einen gibt , wenn nicht - auch gut ;)
|
return $output; # falls es einen gibt , wenn nicht - auch gut ;)
|
||||||
@ -1015,8 +1021,18 @@ sub MPD_watch_idle($)
|
|||||||
delete $hash->{helper}{RUNNING_PID};
|
delete $hash->{helper}{RUNNING_PID};
|
||||||
delete $hash->{IPID};
|
delete $hash->{IPID};
|
||||||
InternalTimer(gettimeofday()+2, "MPD_try_idle", $hash, 0);
|
InternalTimer(gettimeofday()+2, "MPD_try_idle", $hash, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log3 $name, 5 , $name.", idle PID ".$hash->{IPID}." found";
|
||||||
|
if (($hash->{READINGS}{"presence"}{VAL} eq "present") && ($hash->{STATE} eq "play"))
|
||||||
|
{
|
||||||
|
# Wichtig um das Readings elapsed aktuell zu halten (TabletUI)
|
||||||
|
mpd_cmd($hash, "status");
|
||||||
|
readingsSingleUpdate($hash,"playlistname",$hash->{".playlist"},1) if ($hash->{READINGS}{"playlistname"}{VAL} ne $hash->{".playlist"});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else { Log3 $name, 5 , $name.", idle PID ".$hash->{IPID}." found"; }
|
|
||||||
|
|
||||||
InternalTimer(gettimeofday()+$waits, "MPD_watch_idle", $hash, 0);
|
InternalTimer(gettimeofday()+$waits, "MPD_watch_idle", $hash, 0);
|
||||||
return;
|
return;
|
||||||
@ -1047,6 +1063,7 @@ sub MPD_get_artist_info ($$)
|
|||||||
if (!open (FILE , "www/$cache/".$hash->{'.artist'}.".xml"))
|
if (!open (FILE , "www/$cache/".$hash->{'.artist'}.".xml"))
|
||||||
{
|
{
|
||||||
Log3 $name, 2, "$name, error reading ".$hash->{'.artist'}.".xml : $!";
|
Log3 $name, 2, "$name, error reading ".$hash->{'.artist'}.".xml : $!";
|
||||||
|
$hash->{'.xml'} = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1085,19 +1102,23 @@ sub MPD_lfm_artist_info(@)
|
|||||||
# xml lokal speichern ?
|
# xml lokal speichern ?
|
||||||
if (-e "www/$cache/".$hash->{'.artist'}.".xml")
|
if (-e "www/$cache/".$hash->{'.artist'}.".xml")
|
||||||
{
|
{
|
||||||
# Log3 $name ,5,"$name, artist ".$hash->{'.artist'}." already exist";
|
Log3 $name ,5,"$name, artist ".$hash->{'.artist'}." already exist";
|
||||||
|
$hash->{XML} = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!open (FILE , ">"."www/$cache/".$hash->{'.artist'}.".xml"))
|
if (!open (FILE , ">"."www/$cache/".$hash->{'.artist'}.".xml"))
|
||||||
{
|
{
|
||||||
Log3 $name, 2, "$name, error saving ".$hash->{'.artist'}.".xml : $!";
|
Log3 $name, 2, "$name, error saving ".$hash->{'.artist'}.".xml : ".$!;
|
||||||
$hash->{'.artist'} = "";
|
$hash->{XML} = 0;
|
||||||
|
#$hash->{'.artist'} = "";
|
||||||
|
#return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print FILE $data;
|
print FILE $data;
|
||||||
close(FILE);
|
close(FILE);
|
||||||
|
$hash->{XML} = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1121,7 +1142,7 @@ sub MPD_lfm_artist_info(@)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!$cache) # cache verwenden ?
|
if (!$cache || !$hash->{XML}) # cache verwenden ?
|
||||||
{
|
{
|
||||||
if (exists $xml->{'artist'}->{'image'}[$size]->{'content'})
|
if (exists $xml->{'artist'}->{'image'}[$size]->{'content'})
|
||||||
{
|
{
|
||||||
@ -1210,8 +1231,8 @@ sub MPD_lfm_artist_image(@)
|
|||||||
|
|
||||||
if (!open(FILE, "> www/$cache/$fname"))
|
if (!open(FILE, "> www/$cache/$fname"))
|
||||||
{
|
{
|
||||||
|
Log3 $name, 2, "$name, error saving image $fname : ".$!;
|
||||||
MPD_artist_image($hash,"/fhem/icons/10px-kreis-rot"," ");
|
MPD_artist_image($hash,"/fhem/icons/10px-kreis-rot"," ");
|
||||||
Log3 $name, 2, "$name, error saving image $fname : $!";
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
binmode(FILE);
|
binmode(FILE);
|
||||||
@ -1229,6 +1250,76 @@ sub MPD_lfm_artist_image(@)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub MPD_NewPlaylist($$)
|
||||||
|
{
|
||||||
|
my ($hash, $list) = @_;
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
|
Log3 $name,5,"$name, new Playlist in -> $list";
|
||||||
|
|
||||||
|
$list =~ s/"/\\"/g;
|
||||||
|
$list = "\n".$list;
|
||||||
|
my @artist = ($list=~/\nArtist:\s(.*)\n/g);
|
||||||
|
my @title = ($list=~/\nTitle:\s(.*)\n/g);
|
||||||
|
my @album = ($list=~/\nAlbum:\s(.*)\n/g);
|
||||||
|
my @time = ($list=~/\nTime:\s(.*)\n/g);
|
||||||
|
my @file = ($list=~/\nfile:\s(.*)\n/g);
|
||||||
|
my @track = ($list=~/\nTrack:\s(.*)\n/g);
|
||||||
|
my @albumUri = ($list=~/\nX-AlbumUri:\s(.*)\n/g); # von Mopidy ?
|
||||||
|
my $ret = '[';
|
||||||
|
my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 1 } );
|
||||||
|
my $lastUri = '';
|
||||||
|
my $url;
|
||||||
|
|
||||||
|
for my $i (0 .. $#artist)
|
||||||
|
{
|
||||||
|
if (defined($albumUri[$i]))
|
||||||
|
{
|
||||||
|
if ( $lastUri ne $albumUri[$i])
|
||||||
|
{
|
||||||
|
my $response = $ua->get("https://embed.spotify.com/oembed/?url=".$albumUri[$i]);
|
||||||
|
my $data = '';
|
||||||
|
if ( $response->is_success )
|
||||||
|
{
|
||||||
|
$data = $response->decoded_content;
|
||||||
|
$url = decode_json( $data );
|
||||||
|
$lastUri = $url->{'thumbnail_url'};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} # vesuchen wir es mit Last.fm
|
||||||
|
elsif (AttrVal($name,"image_size",-1) > -1 && (AttrVal($name,"cache","") ne ""))
|
||||||
|
{
|
||||||
|
my $cache = AttrVal($name,"cache","");
|
||||||
|
my $size = AttrVal($name,"image_size",0);
|
||||||
|
if (-e "www/$cache/".urlEncode($artist[$i])."_".$size.".png")
|
||||||
|
{ $lastUri = "/fhem/www/".$cache."/".urlEncode($artist[$i])."_".$size.".png"; }
|
||||||
|
else { $lastUri = "/fhem/icons/1px-spacer"; }
|
||||||
|
}
|
||||||
|
else { $lastUri = "/fhem/icons/1px-spacer"; }
|
||||||
|
|
||||||
|
$ret .= '{"Artist":"'.$artist[$i].'",';
|
||||||
|
$ret .= '"Title":';
|
||||||
|
$ret .= (defined($title[$i])) ? '"'.$title[$i].'",' : '"",';
|
||||||
|
$ret .= '"Album":';
|
||||||
|
$ret .= (defined($album[$i])) ? '"'.$album[$i].'",' : '"",';
|
||||||
|
$ret .= '"Time":';
|
||||||
|
$ret .= (defined($time[$i])) ? '"'.$time[$i].'",' : '"",';
|
||||||
|
$ret .= '"File":"'.$file[$i].'",';
|
||||||
|
$ret .= '"Track":';
|
||||||
|
$ret .= (defined($track[$i])) ? '"'.$track[$i].'",' : '"",';
|
||||||
|
$ret .= '"Cover":"'.$lastUri.'"}';
|
||||||
|
$ret .= ',' if ($i<$#artist);
|
||||||
|
}
|
||||||
|
|
||||||
|
$ret .= ']';
|
||||||
|
$ret =~ s/;//g;
|
||||||
|
$ret =~ s/\\n//g;
|
||||||
|
Log3 $name,5,"$name, new Playlist out -> $ret";
|
||||||
|
readingsSingleUpdate($hash,"playlistinfo",$ret,1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###############################################
|
###############################################
|
||||||
|
|
||||||
@ -1358,16 +1449,16 @@ sub MPD_summaryFn($$$$) {
|
|||||||
my $album = "";
|
my $album = "";
|
||||||
my $file = (defined($hash->{READINGS}{"file"}{VAL})) ? $hash->{READINGS}{"file"}{VAL}." <br />" : "";
|
my $file = (defined($hash->{READINGS}{"file"}{VAL})) ? $hash->{READINGS}{"file"}{VAL}." <br />" : "";
|
||||||
|
|
||||||
if (defined($hash->{READINGS}{"title"}{VAL}))
|
if (defined($hash->{READINGS}{"Title"}{VAL}))
|
||||||
{ $title = ($hash->{READINGS}{"title"}{VAL} ne "" ) ? $hash->{READINGS}{"title"}{VAL}." <br />" : "";}
|
{ $title = ($hash->{READINGS}{"Title"}{VAL} ne "" ) ? $hash->{READINGS}{"Title"}{VAL}." <br />" : "";}
|
||||||
if (defined($hash->{READINGS}{"artist"}{VAL}))
|
if (defined($hash->{READINGS}{"Artist"}{VAL}))
|
||||||
{ $artist = ($hash->{READINGS}{"artist"}{VAL} ne "") ? $hash->{READINGS}{"artist"}{VAL}." <br />": "";}
|
{ $artist = ($hash->{READINGS}{"Artist"}{VAL} ne "") ? $hash->{READINGS}{"Artist"}{VAL}." <br />": "";}
|
||||||
|
|
||||||
if (defined($hash->{READINGS}{"album"}{VAL}))
|
if (defined($hash->{READINGS}{"Album"}{VAL}))
|
||||||
{ $album = ($hash->{READINGS}{"album"}{VAL} ne "") ? $hash->{READINGS}{"album"}{VAL}." " : "";}
|
{ $album = ($hash->{READINGS}{"Album"}{VAL} ne "") ? $hash->{READINGS}{"Album"}{VAL}." " : "";}
|
||||||
|
|
||||||
if (defined($hash->{READINGS}{"name"}{VAL}))
|
if (defined($hash->{READINGS}{"Name"}{VAL}))
|
||||||
{ $rname = ($hash->{READINGS}{"name"}{VAL} ne "") ? $hash->{READINGS}{"name"}{VAL}." <br />" : ""; }
|
{ $rname = ($hash->{READINGS}{"Name"}{VAL} ne "") ? $hash->{READINGS}{"Name"}{VAL}." <br />" : ""; }
|
||||||
|
|
||||||
$html ="<table><tr><td>$txt</td><td>";
|
$html ="<table><tr><td>$txt</td><td>";
|
||||||
if (($playlists) && $hash->{".sPlayL"})
|
if (($playlists) && $hash->{".sPlayL"})
|
||||||
@ -1598,7 +1689,8 @@ Modul requires XML:Simple -> sudo apt-get install libxml-simple-perl<br>
|
|||||||
wenn im abgespielten Titel die Interpreten Information nicht verfügbar ist (sehr oft bei Radio-Streams default 1)<br>
|
wenn im abgespielten Titel die Interpreten Information nicht verfügbar ist (sehr oft bei Radio-Streams default 1)<br>
|
||||||
Liegen keine Titelangaben vor wird die Ausgabe durch den Namen der Radiostation ersetzt</li>
|
Liegen keine Titelangaben vor wird die Ausgabe durch den Namen der Radiostation ersetzt</li>
|
||||||
<li>timeout (default 1) => Timeoutwert in Sekunden für die Verbindung fhem-mpd</li>
|
<li>timeout (default 1) => Timeoutwert in Sekunden für die Verbindung fhem-mpd</li>
|
||||||
<li>waits (default 60) => Wartezeit in Sekunden bis zum Start eines neuen Idle Prozess im Fehlerfall</li>
|
<li>waits (default 60) => Überwachungszeit in Sekunden für den Idle Prozess. In Verbindung mit refresh_song der Aktualisierungs Intervall für die aktuellen Songparamter,<br>
|
||||||
|
(z.B. um den Fortschrittsbalken bei TabletUI aktuell zu halten) </li>
|
||||||
<li>stateMusic 1|0 => zeige Musikliste als DropDown im Webfrontend</li>
|
<li>stateMusic 1|0 => zeige Musikliste als DropDown im Webfrontend</li>
|
||||||
<li>statePlaylists 1|0 => zeige Playlisten als DropDown im Webfrontend</li>
|
<li>statePlaylists 1|0 => zeige Playlisten als DropDown im Webfrontend</li>
|
||||||
<li>player mpd|mopidy|forked-daapd (default mpd) => welcher Player wird gesteuert<br>
|
<li>player mpd|mopidy|forked-daapd (default mpd) => welcher Player wird gesteuert<br>
|
||||||
@ -1617,11 +1709,21 @@ Modul requires XML:Simple -> sudo apt-get install libxml-simple-perl<br>
|
|||||||
<li>cache (default lfm => /fhem/www/lfm) Zwischenspeicher für die XML und PNG Dateien<br>
|
<li>cache (default lfm => /fhem/www/lfm) Zwischenspeicher für die XML und PNG Dateien<br>
|
||||||
<b>Wichtig</b> : Der User unter dem der fhem Prozess ausgeführt wird (default fhem) muss Lese und Schreibrechte in diesem Verzeichniss haben !<br>
|
<b>Wichtig</b> : Der User unter dem der fhem Prozess ausgeführt wird (default fhem) muss Lese und Schreibrechte in diesem Verzeichniss haben !<br>
|
||||||
Das Verzeichnis sollte auch unterhalb von www liegen, damit der fhem Webserver direkten Zugriff auf die Bilder hat.</li>
|
Das Verzeichnis sollte auch unterhalb von www liegen, damit der fhem Webserver direkten Zugriff auf die Bilder hat.</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
<b>Readings</b>
|
<b>Readings</b>
|
||||||
<ul>
|
<ul>
|
||||||
alle MPD internen Werte
|
- alle MPD internen Werte<br>
|
||||||
|
- vom Modul direkt errzeugte Readings :<br>
|
||||||
|
playlistinfo : (TabletUI Medialist)<br>
|
||||||
|
playlistcollection : (TabletUI)<br>
|
||||||
|
playlistname : (TabletUI)<br>
|
||||||
|
artist_image : (bei Nutzung von Last.fm)<br>
|
||||||
|
artist_image_html : (bei Nutzung von Last.fm)<br>
|
||||||
|
artist_content : (bei Nutzung von Last.fm)<br>
|
||||||
|
artist_summary : (bei Nutzung von Last.fm)<br>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
=end html_DE
|
=end html_DE
|
||||||
|
Loading…
Reference in New Issue
Block a user