Hallo Zusammen,
ich habe Stand jetzt 20 Kanäle im Denon verwendet, Frei nach Radio, Amazon Radiosendern, Playlists etc.
Diese Kanäle wollte ich gerne über den FLOORPLAN oder FHEMWEB auswählen, aber eben nicht 13 oder 14, sondern "Guns_N_Roses" oder "Mumford_&_Sons", da sich die Kanäle ändern wenn ich was gut oder nicht mehr gut finde musste das automatisch gehen.
Meine Lösung alles durchschalten und merken was da kommt, mache ich das mit nem sleep passiert leider garnichts, dann ist jeder Kanal "NDR_2", also asyncron, alle 5 Sekunden einen Kanal weiter hüpfen:
Mein Combobox Element:
Internals:
CFGFN
DEF HEOSPlayer1579933734:channel
DEVICE HEOSPlayer1579933734
NAME rp_HEOSPlayer1579933734_channel
NOTIFYDEV global,HEOSPlayer1579933734
NR 952564
NTFY_ORDER 50-rp_HEOSPlayer1579933734_channel
READING channel
STATE NDR_2
TYPE readingsProxy
CONTENT:
HEOSPlayer1579933734 1
READINGS:
2019-02-12 23:32:49 lastCmd 6
2019-02-13 08:39:24 state 5
Attributes:
alias HEOS Channel
eventMap /1:NDR_2/2:ROCK-FM/3:RKStreamNord/4:WDR4/5:NDR_2/6:P!nk_Radiosender/7:Amy_Macdonald/8:80er/9:Roxette/10:Unheilig/11:Creedence_Clearwater_Revival/12:J.B.O./13:Guns_N_Roses/14:Mumford_&_Sons/15:Enya/16:70er/17:Dire_Straits/18:Elvis_Presley/19:Irish_&_Celtic_Folk/20:Die_Ärzte/
fp_Altbau 497,314,7,Heos Kanal
fp_WetterDash 497,314,7,Heos Kanal
room HEOS
setFn {fhem("set $DEVICE $READING $CMD")}
setList state:NDR_2,ROCK-FM,RKStreamNord,WDR4,NDR_2,P!nk_Radiosender,Amy_Macdonald,80er,Roxette,Unheilig,Creedence_Clearwater_Revival,J.B.O.,Guns_N_Roses,Mumford_&_Sons,Enya,70er,Dire_Straits,Elvis_Presley,Irish_&_Celtic_Folk,Die_Ärzte
webCmd state
Ein Dummy als trigger:
Internals:
CFGFN
NAME d_build_channels
NR 957083
STATE on
TYPE dummy
READINGS:
2019-02-12 19:29:39 state on
Attributes:
alias Channels Bauen
room HEOS
setList on off
ein notify als starter:
Internals:
CFGFN
DEF d_build_channels:on.* {
my $channelscount = fhem("get HEOSPlayer1579933734 channelscount");
my $channelscount = fhem("get HEOSPlayer1579933734 channelscount");
# $channelscount = 3; #für tests
my $cnt = 1;
my $eventMap = "/";
my $setList = "state:";
Log 3, "Baue " . $channelscount . " Kanäle";
do {
$eventMap = $eventMap . $cnt . ":" . $cnt . "/";
$setList = $setList . $cnt;
$cnt = $cnt + 1;
if ($cnt <= $channelscount){
$setList = $setList . ",";
}
}while( $cnt <= $channelscount );
Log 3, "eventMap: " . $eventMap;
fhem("attr rp_HEOSPlayer1579933734_channel eventMap $eventMap");
Log 3, "setList: " . $setList;
fhem("attr rp_HEOSPlayer1579933734_channel setList $setList");
fhem("set HEOSPlayer1579933734 channel 1");
fhem("define a_channel_1 at +00:00:05 { update_channel(1, $channelscount) } ");
}
NAME n_d_build_channels
NOTIFYDEV d_build_channels
NR 957152
NTFY_ORDER 50-n_d_build_channels
REGEXP d_build_channels:on.*
STATE 2019-02-12 19:29:39
TRIGGERTIME 1549996179.91136
TYPE notify
READINGS:
2019-02-12 19:25:40 state active
und eine Funktion die sich immer selbst aufruft:
sub update_channel($$){
my $channel = $_[0];
my $channelcnt = $_[1];
my $channel_m1 = $channel - 1;
# Leerzeichen und ' entfernen
my $channel_name = join("",split(/'/,join("_",split(/ /,ReadingsVal("HEOSPlayer1579933734", "currentStation",$channel)))));
my @ar_eventMap = split(/\//, AttrVal("rp_HEOSPlayer1579933734_channel", "eventMap","") );
my @ar_setList = split(/\,/, AttrVal("rp_HEOSPlayer1579933734_channel", "setList","") );
$ar_eventMap[$channel] = $channel . ":" . $channel_name;
fhem("attr rp_HEOSPlayer1579933734_channel eventMap " . join("/", @ar_eventMap) . "/" );
if ($channel == 1){
$ar_setList[$channel_m1] = "state:" . $channel_name;
}else{
$ar_setList[$channel_m1] = $channel_name;
}
fhem("attr rp_HEOSPlayer1579933734_channel setList " . join(",", @ar_setList) );
$channel = $channel + 1;
if ( $channel <= $channelcnt ) {
fhem("set HEOSPlayer1579933734 channel $channel");
fhem("define a_channel_$channel at +00:00:05 { update_channel($channel, $channelcnt) } ");
}
return 0;
}