";
+# $rc_html = "\n
"; # provokes update by longpoll
+ $rc_html.= '
';
+ foreach my $rownr (0..19) {
+ $rownr = sprintf("%2.2d",$rownr);
+ $row = AttrVal("$name","row$rownr",undef);
+ next if (!$row);
+ $rc_html .= "\n";
+ my @btn = split (",",$row);
+ foreach my $btnnr (0..$#btn) {
+ $rc_html .= "";
+ if ($btn[$btnnr] ne "") {
+ my $cmd;
+ my $img;
+ if ($btn[$btnnr] =~ /(.*?):(.*)/) { # button has format :
+ $cmd = $1;
+ $img = $2;
+ } else { # button has format or is empty
+ $cmd = $btn[$btnnr];
+ $img = $btn[$btnnr];
+ }
+ $img = " ";
+ if ($cmd || $cmd eq "0") {
+ $cmd = "cmd.$name=set $name $cmd";
+ $rc_html .= "$img";
+ } else {
+ $rc_html .= $img;
+ }
+ }
+ $rc_html .= " | \n";
+ }
+ $rc_html .= "
\n";
+ }
+ $rc_html .= "
";
+ return $rc_html;
+}
+
+
+#####################################
+# Deletes all rowXX-attributes
+sub
+RC_layout_delete($) {
+ my $name = shift;
+ foreach my $rownr (0..19) {
+ $rownr = sprintf("%2.2d",$rownr);
+ fhem("deleteattr $name row$rownr",1);
+ }
+}
+
+
+#####################################
+# Converts array-values into rowXX-attribute-values
+sub
+RC_array2attr($@)
+{
+ my ($name, @row) = @_;
+ my $ret;
+ foreach my $rownr (0..21) {
+ next if (!$row[$rownr]);
+ $rownr = sprintf("%2.2d",$rownr);
+ if ($row[$rownr] =~ m/^attr (.*?)\s(.*)/) {
+ $ret = fhem("attr $name $1 $2");
+ } else {
+ $ret = fhem("attr $name row$rownr $row[$rownr]") if ($row[$rownr]);
+ }
+ }
+}
+
+
+#####################################
+# Default-layout for samsung
+sub
+RC_layout_samsung() {
+ my $ret;
+ my @row;
+ $row[0]="POWEROFF,TV,HDMI";
+ $row[1]=":blank,:blank,:blank";
+ $row[2]="1,2,3";
+ $row[3]="4,5,6";
+ $row[4]="7,8,9";
+ $row[5]=":blank,0,PRECH";
+ $row[6]=":blank,:blank,:blank";
+ $row[7]="VOLUP:UP,MUTE,CHUP";
+ $row[8]=":VOL,:BLANK,:PROG";
+ $row[9]="VOLDOWN:DOWN,CH_LIST,CHDOWN";
+ $row[10]="MENU,:blank,GUIDE";
+ $row[11]=":blank,:blank,:blank";
+ $row[12]="TOOLS,UP,INFO";
+ $row[13]="LEFT,ENTER,RIGHT";
+ $row[14]="RETURN,DOWN,EXIT";
+ $row[15]="attr rc_iconpath icons/remotecontrol";
+ $row[16]="attr rc_iconprefix black_btn_";
+ # unused available commands
+ # AD PICTURE_SIZE SOURCE
+ # CONTENTS W_LINK
+ # RSS MTS SRS CAPTION TOPMENU SLEEP ESAVING
+ # PLAY PAUSE REWIND FF REC STOP
+ # PIP_ONOFF ASPECT
+ return @row;
+}
+
+
+#####################################
+# Default-layout for itunes
+sub
+RC_layout_itunes() {
+ my $ret;
+ my @row;
+ $row[0]="play:PLAY,pause:PAUSE,prev:REWIND,next:FF,louder:VOLUP,quieter:VOLDOWN";
+ $row[1]="attr rc_iconpath icons/remotecontrol";
+ $row[2]="attr rc_iconprefix black_btn_";
+ # unused available commands
+ return @row;
+}
+
+
+1;
+
+
+=pod
+=begin html
+
+
remotecontrol
+
+ Displays a graphical remote control. Buttons (=icons) can be chosen and arranged. Predefined layouts are available for e.g. Samsung-TV or iTunes.
+ Any buttonclick can be forwarded to the actual fhem-device. For further explanation, please check the Wiki-Entry<>.
+
+
+ Define
+
+ define <rc-name> remotecontrol
+ Typical steps to implement a remotecontrol:
+
+ define rc1 remotecontrol | # defines a "blank" remotecontrol |
+ get rc1 layout | # displays all available predefined layouts |
+ set rc1 layout samsung | # assigns keys for a SamsungTV |
+ set rc1 makeweblink | # creates weblink_rc1 which displays the remotecontrol in fhemweb or floorplan |
+ set rc1 makenotify mySamsungTV | # creates notify_rc1 which forwards every buttonclick to mySamsungTV for execution |
+ Note: keys can be changed at any time, it is not necessary to redefine the weblink |
+ attr rc1 row15 VOLUP,VOLDOWN |
+
+
+
+
+ Set
+
+ set <rc-name> layout [delete|<layoutname>]
+ layout delete
deletes all rowXX-attributes
+ layout <layoutname>
assigns a predefined layout to rowXX-attributes
+ set <rc-name> makeweblink [<name>]
+ creates a weblink to display the graphical remotecontrol. Default-name is weblink_<rc-name> .
+ set <rc-name> makenotify <executingDevice>
+ creates a notify to trigger <executingDevice> every time a button has been pressed. name is notify_<rc-name> .
+
+
+
+ Get
+
+ get <rc-name> [htmlcode|layout]
+ htmlcode
displays htmlcode for the remotecontrol on fhem-page
+ layout
shows which predefined layouts ae available
+
+
+
+ Attributes
+
+ - loglevel
+ - rc_iconpath
+ path for icons, default is "icons"
+ - rc_iconprefix
+ prefix for icon-files, default is "" .
+ - Note: Icon-names (button-image-file-names) will be composed as
fhem/<rc_iconpath>/<rc_iconprefix><command|image>
+
+ - rowXX
+ attr <rc-name> rowXX <command>[:<image>][,<command>[:<image>]][,...]
+ Comma-separated list of buttons/images per row. Any number of buttons can be placed in one row. For each button, use
+
+ <command>
is the command that will trigger the event after a buttonclick. Case sensitive.
+ <image>
is the filename of the image
+ - Per button for the remotecontrol, use
+ <command>
where an icon with the name is displayed
+ Example:
+ attr rc1 rc_iconprefix black_btn_ # used for ALL icons on remotecontrol rc1
+ attr rc1 row00 VOLUP
+ icon is black_btn_VOLUP
, a buttonclick creates the event VOLUP
+ or
+ <command>:<image>
where an icon with the name <rc_iconprefix><image>
is displayed
+ Example:
+ row00=LOUDER:VOLUP
+ icon is black_btn_VOLUP
, a buttonclick creates the event LOUDER
+
+ Examples:
+ attr rc1 row00 1,2,3,TV,HDMI
+ attr rc2 row00 play:PLAY,pause:PAUSE,louder:VOLUP,quieter:VOLDOWN
+
+ - Hint: use :blank for a blank space, use e.g. :blank,:blank,:blank for a blank row
+
+
+
+
+=end html
+=begin html_DE
+
+
remotecontrol
+
+ Erzeugt eine graphische Fernbedienung. Buttons (=icons) können frei ausgewählt und angeordnet werden. Vordefinierte layouts sind verfügbar für z.B. Samsung-TV und iTunes.
+ Jeder "Knopfdruck" kann an das entsprechende fhem-Gerät weitergegeben werden.
+ Weitere Erklaerungen finden sich im Wiki-Eintrag<>.
+
+
+ Define
+
+ define <rc-name> remotecontrol
+ Typische Schritte zur Einrichtung:
+
+ define rc1 remotecontrol | # erzeugt eine "leere" remotecontrol |
+ get rc1 layout | # zeigt alle vorhandenen vordefinierten layouts an |
+ set rc1 layout samsung | # laedt das layout für SamsungTV |
+ set rc1 makeweblink | # erzeugt weblink_rc1 der die remotecontrol in fhemweb or floorplan anzeigt |
+ define n_rc1 notify rc1.* set mySamsungTV $EVENT |
+ | # uebertraegt jeden Tastendruck an mySamsungTV zur Ausfuehrung |
+ Hinweis:die Tastenbelegung kann jederzeit geaendert werden, ohne dass der weblink erneut erzeugt werden muss. |
+ attr rc1 row15 VOLUP,VOLDOWN |
+
+
+
+
+ Set
+
+
+
+ Attribute
+
+ - loglevel
+ - rc_iconpath
+ Pfad für icons, default ist "icons"
+ - rc_iconprefix
+ Prefix für icon-Dateien, default ist "" .
+ - Note: Icon-Namen (Tasten-Bild-Datei-Namen) werden zusammengesetzt als fhem/<rc_iconpath>/<rc_iconprefix><command|image>
+
+
+ - rowXX
+ attr <rc-name> rowXX <command>[:<image>]
+ Komma-separarierte Liste von Tasten/Icons je Tastaturzeile. Eine Tastaturzeile kann beliebig viele Tasten enthalten.
+ - <command> ist der event, der bei Tastendruck ausgelöst wird. Gross/Kleinschreibung beachten.
+ - <image> ist der Dateiname des als Taste angezeigten icons
+ - Verwenden Sie je Taste
+ - <command> wobei als Taste/icon
angezeigt wird
+ Beispiel:
+ attr rc1 rc_iconprefix black_btn_ # gilt für alle Tasten/icons
+ attr rc1 row00 VOLUP
+ -> icon ist black_btn_VOLUP, ein Tastendruck erzeugt den event VOLUP
+ - oder
+ - <command>:<image> wobei als Taste/icon <rc_iconprefix><image> angezeigt wird.
+ Beispiel:
+ attr rc1 row00 LOUDER:VOLUP
+ icon ist black_btn_VOLUP, ein Tastendruck erzeugt den event LOUDER
+ Beispiele:
+ attr rc1 row00 1,2,3,TV,HDMI
+ attr rc2 row00 play:PLAY,pause:PAUSE,louder:VOLUP,quieter:VOLDOWN
+
+ - Hinweis: verwenden Sie :blank für eine 'leere Taste', oder z.B. :blank,:blank,:blank für eine Abstands-Leerzeile.
+
+
+=end html_DE
+=cut