";
# $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