Combobox von Kanälen mit txt automatisch aus Denon HEOS erzeugen asyncron

Begonnen von ahlermi, 13 Februar 2019, 09:02:46

Vorheriges Thema - Nächstes Thema

ahlermi

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;
}
PI4 FHEM, PI3 FHEM, 6 x Echo mit talk2fhem, Siri, SNIPS auf PI3 mit Samson UB1, YeeLight, Homematic, MAX!, 433Mhz, LaCross, Xiaomi Vacuum V1, ESPEasy, Gardena, Telegram, FLOORPLAN, HEOS, Xiaomi Aqara, Sonoff, SolvisMax, SolvisClient, HUE, ESPEasy für Bayernlüfter, Harmony, Tasmota, JKBMS, EASUN