Remotecontrol: Unterschied zwischen den Versionen

Aus FHEMWiki
 
(32 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Datei:remotecontrol_samsung.jpg|right]]
{{SEITENTITEL:remotecontrol}}
Das Modul "remotecontrol" stellt einen weblink bereit, der eine grafische Abbildung einer physischen Fernbedienung anzeigt, siehe Beispiel rechts. Dieser weblink kann in fhem-Frontends wie FHEMWEB oder FLOORPLAN verwendet werden.
{{Infobox Modul
Die Tastenbelegung ("Layout") ist frei wählbar. Standard-Layouts sind für unterschiedliche Geräte verfügbar. Das remotecontrol-device wird per notify an das fhem-device gekoppelt, das nach einem Tastendruck den Befehl an das physische Gerät sendet.
|ModPurpose=Grafische Darstellung einer Fernbedienung
<br><br><br>
|ModType=h
==Einrichtung==
<!-- |ModCategory= (noch?) nicht verwendet -->
===Define===
|ModCmdRef=remotecontrol
Das define erfolgt nach der üblichen fhem-Syntax:
<!-- |ModContact=Frontends ** Forenbereich für Diskussion, Fehlerberichte, ... ** -->
<nowiki>
|ModTechName=95_remotecontrol.pm
define <name> remotecontrol</nowiki>
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=86 ulimaass]}}
also z.B.
 
<nowiki>
[[Datei:remotecontrol_samsung.jpg|thumb|right|Grafische Darstellung einer Fernbedienung]]
define rc1 remotecontrol</nowiki>
Das Modul '''remotecontrol''' stellt einen Weblink bereit, der eine grafische Abbildung einer physischen Fernbedienung anzeigt, siehe Beispiel rechts. Dieser Weblink kann in FHEM-Frontends wie [[PGM2|FHEMWEB]] oder [[FLOORPLAN]] verwendet werden.
Damit ist eine leere Fernbedienung (zunächst noch ohne Tasten) angelegt.<br>
 
Zu Testzwecken kann man sein device zunächst einem Testraum zuordnen, zB
Die Tastenbelegung (das Layout) ist frei wählbar. Standard-Layouts sind für unterschiedliche Geräte verfügbar. Das remotecontrol-device wird per notify an das FHEM-device gekoppelt, das nach einem Tastendruck den Befehl an das physische Gerät sendet.
<nowiki>
 
attr rc1 room TestRemote</nowiki>
== Einrichtung ==
<br><br><br>
=== Define ===
===Weblink erzeugen und einbinden===
Das define erfolgt nach der üblichen FHEM-Syntax:
Der weblink dient zum Anzeigen der grafischen Fernbedienung.<br>
<source lang="text">
Beim Erzeugen des Weblinks kann man einen Namen angeben. Wird kein Name angegeben, wird der default-Name "weblink_<name>" verwendet.
# Syntax:
define <name> remotecontrol
# Beispiel:
define rc1 remotecontrol
</source>
 
Damit ist eine leere Fernbedienung (zunächst noch ohne Tasten) angelegt.
 
Zu Testzwecken kann man sein Device zunächst einem Testraum zuordnen, z.&nbsp;B.
<source lang="text">
attr rc1 room TestRemote
</source>
 
'''Hinweis:''' Nicht vergessen, nach dem Erzeugen der Fernbedienung die Konfiguration zu speichern. Ansonsten ist sie nach einem Neustart von FHEM nicht mehr vorhanden. Details dazu finden sich auf der Seite [[Konfiguration]].


<nowiki>
=== Standard-Tastaturlayouts nutzen ===
set rc1 makeweblink            # erzeugt Weblink mit dem Namen weblink_rc1
Jedes FHEM-Modul kann Tastaturlayouts für das Modul ''remotecontrol'' bereitstellen.
set rc1 makeweblink w_rc1      # erzeugt Weblink mit dem Namen w_rc1</nowiki>


Zu Testzwecken kann man auch den Weblink einem Testraum zuordnen, zB
<nowiki>
attr weblink_rc1 room TestRemote</nowiki>
<br><br><br>
===Standard-Tastaturlayouts===
Jedes fhem-Modul kann Tastaturlayouts für das Modul ''remotecontrol'' bereitstellen.<br>
Die Liste der vorhandenen Tastaturlayouts wird angezeigt mit
Die Liste der vorhandenen Tastaturlayouts wird angezeigt mit
  <nowiki>
  <nowiki>
get <name> layout</nowiki>
# Syntax:
also z.B.
get &lt;name&gt; layout
# Beispiel:
get rc1 layout </nowiki>
 
Die Liste der vordefinierten Tastaturlayouts wird nun angezeigt.
 
Ein Tastatur-Layout kann zugeordnet (geladen) werden mit
  <nowiki>
  <nowiki>
get rc1 layout</nowiki><br>
# Syntax:
Die Liste der vordefinierten Tastaturlayouts wird nun angezeigt.<br><br>
set &lt;name&lt; layout &lt;layoutname&lt;
Ein Tastatur-Layout kann nun zugeordnet (geladen) werden mit<br>
# Beispiel:
<nowiki>
set rc1 layout itunes </nowiki>
set <name> layout <layoutname></nowiki>
 
also z.B.
'''Hinweis:''' Das Laden von Standard-Layouts ändert die Werte der Attribute row00 - row19. Diese werden erst durch den Befehl ''save'' nach fhem.cfg geschrieben. Soll der Befehl ''save'' nicht verwendet werden, kann die Konfiguration auch manuell in fhem.cfg eingetragen werden. Ein Beispiel befindet sich am Ende dieses Wiki-Artikels.
<nowiki>
 
set rc1 layout itunes</nowiki><br><br>
'''Hinweis:''' Ein Standard-Tastaturlayout wird erst nach dem Laden eines Moduls bereitgestellt. Wenn Sie also erst zu einem späteren Zeitpunkt ein weiteres Modul (z.B. [[VIERA]] für Panasonic-TV) in Ihre Konfiguration aufnehmen, wird ein ggf. vorhandenes remotecontrol-Standard-Layout erst dann angezeigt. Man sollte also auch später ab und zu mit dem o.g. Befehl prüfen, ob für weitere Geräte Standardlayouts vorhanden/hinzugekommen sind.
'''Hinweis:''' Ein Standard-Tastaturlayout wird erst nach dem Laden eines Moduls bereitgestellt. Wenn Sie also erst zu einem späteren Zeitpunkt ein weiteres Modul (z.B. VIERA für Panasonic-TV) in Ihre Konfiguration aufnehmen, wird ein ggf. vorhandenes remotecontrol-Standard-Layout erst dann angezeigt. Man sollte also auch später ab und zu mit dem o.g. Befehl prüfen, ob für weitere Geräte Standardlayouts vorhanden/hinzugekommen sind.<br>
 
Im Modul ''remotecontrol'' selbst sind die Beispiel-Layouts "itunes" und "samsung" vorhanden.
Im Modul ''remotecontrol'' selbst sind die Beispiel-Layouts "itunes" und "samsung" vorhanden.
<br><br><br><br>


===Eigene Tastaturlayouts einrichten===
=== Eigene Tastaturlayouts einrichten ===
Die Tastatur der Fernbedienung ist aufgeteilt in bis zu 20 Zeilen. Je Zeile können beliebig viele Tasten definiert werden.<br>
Die Tastatur der Fernbedienung ist aufgeteilt in bis zu 20 Zeilen. Je Zeile können beliebig viele Tasten definiert werden.
Jede Taste auf der Fernbedienung wird definiert durch<br>
 
* den Befehl, der nach einem Tastendruck ausgeführt werden soll<br>
Jede Taste auf der Fernbedienung wird definiert durch
* das icon, das als Taste erscheinen soll<br>
* den Befehl, der nach einem Tastendruck ausgeführt werden soll
Man muss also je Taste diese beiden Werte festlegen.<br>
* das icon, das als Taste erscheinen soll
Mehrere Tasten in einer Zeile werden durch Kommata getrennt.<br><br>
 
Vorgehensweise:
Man muss also je Taste diese beiden Werte festlegen. Mehrere Tasten in einer Zeile werden jeweils durch ein Komma voneinander getrennt.
<br>
 
====Icon-Pfad festlegen====
==== Icon-Pfad festlegen ====
Einmalig ermitteln, in welchem Ordner die icons liegen, die für die Tastatur verwendet werden sollen. Die Standard-icons liegen im Ordner www/images/default/remotecontrol. Um dies nicht bei jeder Taste angeben zu müssen, setzt man  
Einmalig ermitteln, in welchem Ordner die Icons liegen, die für die Tastatur verwendet werden sollen. Die Standard-icons liegen im Ordner <code>www/images/default/remotecontrol</code>. Um das nicht bei jeder Taste angeben zu müssen, setzt man
:<code>attr &lt;name&gt; rc_iconpath icons/remotecontrol</code>
 
==== Icon-Prefix festlegen ====
Ggf. einmalig einen prefix für Dateinamen festlegen. Die Standard-icons folgen der Namenskonvention black_btn_&lt;Beschreibung&gt;. Um den Teil vor der Beschreibung nicht bei jeder Taste mit angeben zu müssen, setzt man
:<code>attr &lt;name&gt; rc_iconprefix black_btn_</code>
 
==== Tasten definieren ====
# ermitteln, welcher Befehl an das ausführende FHEM-Gerät gesendet werden soll. Als Beispiel soll der Befehl "play" dienen. Groß-/Kleinschreibung ist zu beachten.
# ermitteln, welches Icon zur Darstellung der Taste verwendet werden soll. Unter den Standardicons gibt es ein icon mit dem Dateinamen black_btn_'''PLAY'''.png. Der vordere Teil ist bereits als prefix hinterlegt, die Datei-Endung muss nicht angegeben werden. Als icon für die Tastaturdefinition kann man also einfach '''PLAY''' angeben. Groß-/Kleinschreibung ist zu beachten.
 
Nachdem nun der Befehl (play) und der Icon-Name (PLAY) ermittelt sind, können diese - durch einen Doppelpunkt getrennt - als Definition einer Taste hinterlegt werden.
 
  <nowiki>
  <nowiki>
attr <name> rc_iconpath icons/remotecontrol</nowiki>
# Syntax:
<br>
attr &lt;name&gt; rowXX &lt;command&gt;:&lt;icon&gt;
====Icon-Prefix festlegen====
# Beispiel:
Ggf. einmalig einen prefix für Dateinamen festlegen. Die Standard-icons folgen der Namenskonvention black_btn_<Beschreibung>. Um den Teil vor der Beschreibung nicht bei jeder Taste mit angeben zu müssen, setzt man
attr rc1 row00 play:PLAY        # als Befehl wird play gesendet, als icon wird PLAY verwendet</nowiki>
 
Sollen weitere Tasten definiert werden, hängt man sie durch Komma getrennt an.
  <nowiki>
  <nowiki>
attr <name> rc_iconprefix black_btn</nowiki>
# Syntax:
<br>
attr &lt;name&gt; rowXX &lt;command&gt;:&lt;icon&gt;[,&lt;command&gt;:&lt;icon&gt;][,....]
====Tasten definieren====
# Beipiel:
# ermitteln, welcher Befehl an das ausführende fhem-Gerät gesendet werden soll. Als Beispiel soll der Befehl "play" dienen. Groß/Kleinschreibung ist zu beachten.
attr rc1 row01 play:PLAY,anhalten:STOP</nowiki>
# ermitteln, welches icon zur Darstellung der Taste verwendet werden soll. Unter den Standardicons gibt es ein icon mit dem Dateinamen black_btn_'''PLAY'''.png<br>. Der vordere Teil ist bereits als prefix hinterlegt, die Datei-Endung muss nicht angegeben werden. Als icon für die Tastaturdefinition kann man also einfach '''PLAY''' angeben. Groß/Kleinschreibung ist zu beachten.<br>
 
Nachdem nun der Befehl (play) und der icon-Name (PLAY) ermittelt sind, können diese - durch einen Doppelpunkt getrennt- als Definition einer Taste hinterlegt werden.<br>
Sollen auf der Tastatur Leer-Räume abgebildet werden, gibt man als Tastendefinition ''':blank''' an (also kein Befehl, Icon blank). Das Icon mit dem Namen 'blank' ist vorhanden, hat ein Drittel der regulären Tastenhöhe und ist 100% transparent.
'''Syntax:''' attr <name> rowXX <command>:<icon><br>
 
  <nowiki>
  <nowiki>
attr rc1 row00 play:PLAY</nowiki> # als Befehl wird play gesendet, als icon wird PLAY verwendet
attr rc1 row02 play:PLAY,:blank,anhalten:STOP</nowiki>
Sollten weitere Tasten definiert werden, hängt man sie durch Komma getrennt an.<br>
 
'''Syntax:''' attr <name> rowXX <command>:<icon>[,<command>:<icon>][,....]
Eine "Trennzeile" lässt sich einfügen durch
  <nowiki>
  <nowiki>
attr rc1 row00 play:PLAY,anhalten:STOP</nowiki>
attr rc1 row03 :blank,:blank,:blank</nowiki>
Sollen auf der Tastatur Leer-Räume abgebildet werden, gibt man als Tastendefinition ''':blank''' an (also kein Befehl, icon blank). Das icon mit dem Namen 'blank' ist vorhanden, hat ein Drittel der regulären Tastenhöhe und ist 100% transparent.
 
'''Hinweis:''' Manche Browser stellen in einer Zeile, in der die letzte Taste nicht definiert ist, den Rahmen nicht dar. Füllen Sie in diesem Fall die Tastaturzeile mit :blank soweit auf, dass sie dieselbe Anzahl Tasten aufweist wie die längste Tastaturzeile auf Ihrer Fernbedienung.
 
Für den Fall, dass der Befehl und der Icon-Name identisch sind (incl. Groß-/Kleinschreibung) besteht zur Vereinfachung die Möglichkeit, nur das Kommando anzugeben. Dieses wird dann auch als icon-Name verwendet.
 
  <nowiki>
  <nowiki>
attr rc1 row00 play:PLAY,:blank,anhalten:STOP</nowiki>
# Syntax:
Eine "Trennzeile" lässt sich einfügen durch
attr &lt;name&gt; rowXX [&lt;command&gt;:&lt;icon&gt;|&lt;command_icon&gt;][,[&lt;command&gt;:&lt;icon&gt;|&lt;command_icon&gt;]]...
# Beispiele:
attr rc1 row04 PLAY                          # als Befehl wird PLAY gesendet, als icon wird PLAY verwendet
attr rc1 row05 PLAY,:blank,anhalten:STOP     # auch Mischformen sind möglich</nowiki>
 
==== Verwenden von .svg-icons ====
Endet der Dateiname nicht auf .svg, verhält sich die die img-Generierung wie oben beschrieben unter Beachtung von rc_iconpath und rc_iconprefix.
 
Enthält der angegebene Dateiname ".svg" , so wird der svg-Lesemechanismus aus FHEMWEB verwendet. Dabei werden die Attribute rc_iconpath und rc_iconprefix '''ignoriert''', es wird die "ganz normale" Zugriffsfolge verwendet wie im FHEMWEB-Attribut iconPath gesetzt (z.&nbsp;B. fhemSVG:openautomation:default)
 
  <nowiki>
  <nowiki>
attr rc1 row00 :blank,:blank,:blank</nowiki>
Attributes:
'''Hinweis:''' Manche Browser stellen in einer Zeile, in der die letzte Tste gar nicht definiert ist, den Rahmen nicht dar. Füllen Sie in diesem Fall die Tastaturzeile mit :blank soweit auf, dass sie dieselbe Anzahl Tasten aufweist wie die längste Tastaturzeile auf Ihrer Fernbedienung.
  rc_iconpath icons
  row00       play:audio_play.svg                    # svg-icon ohne Farbangabe
  row01      oldplay:remotecontrol/black_btn_PLAY  # nicht-svg-icon, Pfadangabe bei iconpath "icons"
  row02      redplay:audio_play.svg@red            # svg-icon mit Farbangabe</nowiki>


Für den Fall, dass der Befehl und der icon-Name identisch sind (incl. Groß/Kleinschreibung) besteht zur Vereinfachung die Möglichkeit, nur das Kommando anzugeben. Dieses wird dann auch als icon-Name verwendet.<br>
==== Neue Icons für Tasten erstellen und verwenden ====
'''Syntax:''' attr <name> rowXX [<command>:<icon>|<command_icon>][,[<command>:<icon>|<command_icon>]]...
Im Ordner www/images/default/remotecontrol liegt das Template für weitere Tasten. Die Datei heisst _black_btn_template.pdn und kann z.&nbsp;B. mit paint.net bearbeitet werden.
<nowiki>
 
attr rc1 row00 PLAY  # als Befehl wird PLAY gesendet, als icon wird PLAY verwendet
Neue Dateien bitte als png analog der vorhandenen Namenskonvention erstellen: Prefix black_btn_, Beschreibung in Grossbuchstaben.
attr rc1 row06 PLAY,:blank,anhalten:STOP  # auch Mischformen sind möglich</nowiki>
 
<br>
Zur Erweiterung des icon-Vorrats neue Dateien bitte zum Einchecken an den Modulautor mailen.


====Neue Icons für Tasten erstellen und verwenden====
'''Hinweis:''' Neue Dateien werden in FHEM erst angezeigt, nachdem das interne Icon-Listing aktualisiert wurde. Dies geschieht nach jedem FHEM-(re)start oder mit dem Befehl
Im Ordner www/images/default/remotecontrol liegt das Template für eitere Tasten. Die Datei heisst _black_btn_template.pdn und kann z.B. mit paint.net bearbeitet werden.<br>
Neue Dateien bitte als png erstellen und analog der vorhandenen Namenskonvention erstellen: Prefix black_btn_ , Beschreibung in Grossbuchstaben.<br>
Zur Erweiterung des icon-Vorrats neue Dateien bitte zum Einchecken an den Modulautor mailen.<br>
'''Hinweis:''' Neue Dateien werden in fhem erst angezeigt, nachdme das interne icon-Listing aktualisiert wurde. Dies geschieht nach jedem fhem-(re)start oder mit dem Befehl
  <nowiki>set WEB rereadicons</nowiki>
  <nowiki>set WEB rereadicons</nowiki>
<br><br><br>


===Kopplung an das ausführende Gerät===
=== Kopplung an das ausführende Gerät ===
Bei jedem Tastendruck wird der Befehl (command), der der Taste zugeordnet ist, als STATE des remotecontrol-device angezeigt.<br>
Bei jedem Tastendruck wird der Befehl (command), der der Taste zugeordnet ist, als STATE des remotecontrol-device angezeigt.
Ausserdem wird ein entsprechendes System-Event erzeugt. Dieses kann mit notify geprüft und an das ausführende Gerät weitergegeben werden.<br><br>
 
Als Beispiel soll wie oben gezeigt eine Fernbedienung mit dem Namen '''rc1''' bereits erstellt worden sein. Tastendrücke sollen zur Ausführung an das bereits vorhandene fhem-device '''myTV''' weitergegeben werden.<br>
Außerdem wird ein entsprechendes System-Event erzeugt. Dieses kann mit notify geprüft und an das ausführende Gerät weitergegeben werden.
Das entsprechende notify kann "manuell" oder per set-Befehl erzeugt werden:<br>
 
'''Syntax:''' set <name> makenotify <executingDevice> <br>
Als Beispiel soll wie oben gezeigt eine Fernbedienung mit dem Namen '''rc1''' bereits erstellt worden sein. Tastendrücke sollen zur Ausführung an das bereits vorhandene FHEM-device '''myTV''' weitergegeben werden.
 
Das entsprechende notify kann "manuell" oder per set-Befehl erzeugt werden:
  <nowiki>
  <nowiki>
set rc1 makenotify myTV #erzeugt: define notify_rc1 notify rc1 set myTV $EVENT</nowiki>
# Syntax:
set &lt;name&gt; makenotify &lt;executingDevice&gt;
# Beispiel:
set rc1 makenotify myTV               #erzeugt: define notify_rc1 notify rc1 set myTV $EVENT</nowiki>
 
Bei jedem Tastendruck löst die Fernbedienung ''rc1'' ein event aus. Darauf reagiert das notify und sendet den entsprechenden set-Befehl an das Gerät ''myTV'' zur Ausführung.


Bei jedem Tastendruck löst die Fernbedienung ''rc1'' ein event aus. Dieses wird als set-Befehl an das Gerät ''myTV'' zur Ausführung weitergegeben.<br>
'''Hinweis:''' Der Befehl ''makenotify'' erzeugt ein neues notify-device. Dieses wird erst durch den Befehl ''save'' in die fhem.cfg geschrieben. Möchten Sie den Befehl ''save'' nicht verwenden, tragen Sie das notify manuell in fhem.cfg ein. Ein weiteres Beispiel befindet sich am Ende dieses Wiki-Artikels.
Es können auch eigene scripts (z.B. in 99_myUtils.pm) aufgerufen werden. Wenn es z.B. dort eine Routine MeineRoutine($) gibt, kann diese mit der Fernbedieung gesteuert werden durch
 
Es können auch eigene Scripte (z.&nbsp;B. in 99_myUtils.pm) aufgerufen werden. Wenn es z.&nbsp;B. dort eine Routine <code>MeineRoutine($)</code> gibt, kann diese mit der Fernbedienung gesteuert werden durch
  <nowiki>
  <nowiki>
define n_rc1 notify rc1 {MeineRoutine("$EVENT")}</nowiki>
define n_rc1 notify rc1 {MeineRoutine("$EVENT")}</nowiki>
<br><br><br><br><br>


==Troubleshooting==
=== Optional: Weblink erzeugen und einbinden ===
<br>
Zusätzlich zum remotecontrol-device selbst kann auch ein weblink zum Anzeigen der grafischen Fernbedienung verwendet werden. Beim Erzeugen des Weblinks kann man einen Namen angeben. Wird kein Name angegeben, wird der default-Name "weblink_&lt;name&gt;" verwendet.
===Eine Taste wird nicht angezeigt===
 
<nowiki>
set rc1 makeweblink            # erzeugt Weblink mit dem Namen weblink_rc1
set rc1 makeweblink w_rc1      # erzeugt Weblink mit dem Namen w_rc1</nowiki>
 
Zu Testzwecken kann man auch den Weblink einem Testraum zuordnen, z.&nbsp;B.
<nowiki>
attr weblink_rc1 room TestRemote
attr weblink_rc1 group rc</nowiki>
 
Durch die Zuordnung zu einer Gruppe wird der Name des Weblinks ebenfalls angezeigt, was zum Testen sehr praktisch ist.
Während der Einrichtungsphase ist zu empfehlen, in einem Fenster den Detailscreen des remotecontrol-device anzuzeigen, während man in einem zweiten Fenster den Weblink anzeigt. So kann man durch einfaches Refresh die Auswirkungen der Konfigurationsänderungen sofort sehen.
 
== Troubleshooting ==
=== Eine Taste wird nicht angezeigt ===
* Groß/Kleinschreibung icon-Namens prüfen
* Groß/Kleinschreibung icon-Namens prüfen
* Nach dem Anlegen neuer icons muss ausgeführt werden
* Nach dem Anlegen neuer icons muss ausgeführt werden
<nowiki>
:<code>set WEB rereadicons</code>
set WEB rereadicons</nowiki>
* Mit dem Befehl  
* Mit dem Befehl  
<nowiki>get <name> htmlcode</nowiki>
:<code>get &lt;name&gt; htmlcode</code> <br>den html-Code der grafischen Fernbedienung anzeigen. Darin suchen nach "<img src" und dann Link und Dateiname prüfen. Erwarteter Wert: <code><nowiki><img src="/fhem/icons/remotecontrol/black_btn_PLAY"></nowiki></code>
den html-Code der grafischen Fernbedienung anzeigen. Darin suchen nach "<img src" und dann Link und Dateiname prüfen.<br>
Soll: <img src="/fhem/icons/remotecontrol/black_btn_PLAY">
<br><br><br>
===Der rechte Rahmen wird mit Lücken dargestellt===
Manche Browser stellen in einer Zeile, in der die letzte Tste gar nicht definiert ist, den Rahmen nicht dar. Füllen Sie in diesem Fall die Tastaturzeile mit :blank soweit auf, dass sie dieselbe Anzahl Tasten aufweist wie die längste Tastaturzeile auf Ihrer Fernbedienung.
<br><br><br><br><br><br>
==Für Entwickler: Neue Standard-Layouts hinterlegen==
Standard-Layouts werden im eigenen Modul in Arrays abgelegt. Die Umwandung von arrays in rowXX-Attribute sowie das rendern zu html übernimmt das Modul ''95_remotecontrol''.<br>
Vorgehensweise im eigenen Modul:
# Eine Routine hinterlegen, die das array mit dem Standard-Tastaturlayout zurückgibt. Als Vorlage dient aus dem Code von 95_remotecontrol.pm eine der Routinen RC_layout_samsung() oder RC_layout_itunes() .
# Die Routine in der Forward-declaration des eigenen Moduls hinterlegen. Als Vorlage dient ggf. ebenfalls das Modul 95_remotecontrol.pm (siehe "Forward declaration").
# Im eigenen Modul in der initialize-Routine (nicht erst in der define-Routine!) einen Eintrag für $data{RC_layout}{<layoutname>} vornehmen. Wert ist der Name der im Schritt 1 hnterlegten eigenen Layout-Array-Routine.
#* Beispiel: Das Layout soll für den user '''MeinLayout''' heissen, die eigene Array-Routine heisst '''Mein_Modul_Layout()''' . Dafür ist in der eigenen initialize-Routine zu hinterlegen:
<nowiki>$data{RC_layout}{MeinLayout} = "Mein_Modul_Layout";</nowiki>
Als Vorlage kann wiederum das Modul ''95_remotecontrol'' dienen, siehe dort am Ende der initialize-Routine.
* Ich bin nicht sicher, ob die initialize-Routine bei einem reload ausgeführt wird. Ggf. ist ein shutdown reastart erforderlich, um den $data-Eintrag zu platzieren.
* In einer definierten remotecontrol den Befehl
get <name> layout
absetzen. Das eigene Layout sollte nun in der Liste erscheinen.<br>
* Das eigene Layout kann dann mit
set <name> layout <MeinLayout>
geladen werden.
<br><br><br><br><br><br>


==Beispiel-Layouts mit screenshots==
=== Der rechte Rahmen wird mit Lücken dargestellt ===
<br>
Manche Browser stellen in einer Zeile, in der die letzte Taste gar nicht definiert ist, den Rahmen nicht dar. Füllen Sie in diesem Fall die Tastaturzeile mit :blank soweit auf, dass sie dieselbe Anzahl Tasten aufweist wie die längste Tastaturzeile auf Ihrer Fernbedienung.
===iTunes===
 
[[Datei:remotecontrol_iTunes.jpg]]
== Für Entwickler ==
Entwickler können aus ihren Modulen heraus Tastatur-Standardlayouts hinterlegen. Auch eine eigene Routine für makenotify ist möglich.
 
=== Neue Standard-Layouts hinterlegen ===
Standard-Layouts werden im eigenen Modul in Arrays abgelegt. Die Umwandung von Arrays in rowXX-Attribute sowie das Rendern zu html übernimmt das Modul ''remotecontrol''.
 
<u>Vorgehensweise im eigenen Modul:</u>
 
# Eine Funktion implementieren, die ein Array mit dem Standard-Tastaturlayout zurückgibt. Als Vorlage dient aus dem Quelltext von 95_remotecontrol.pm eine der Routinen <code>RC_layout_samsung()</code> oder <code>RC_layout_itunes()</code>.
# Im eigenen Modul in der [[DevelopmentModuleIntro#X_Initialize|Initialize]]-Funktion (nicht erst in der [[DevelopmentModuleIntro#X_Define|Define]]-Funktion!) einen Eintrag für <code>$data{RC_layout}{''&lt;Layoutname&gt;''}</code> vornehmen. Als Inhalt ist der Funktionsname der im ersten Schritt hinterlegten eigenen Layout-Funktion als Zeichenkette zu setzen.
#* Beispiel: Das Layout soll für den Nutzer '''MeinLayout''' heißen, die eigene Array-Routine heißt <code>Mein_Modul_Layout()</code>. Dafür ist in der eigenen [[DevelopmentModuleIntro#X_Initialize|Initialize]]-Funktion zu hinterlegen:<p><code>$data{RC_layout}{MeinLayout} = "Mein_Modul_Layout";</code></p>Als Vorlage kann wiederum das Modul ''95_remotecontrol.pm'' dienen, siehe dort am Ende der Initialize-Funktion.
#* In einer definierten remotecontrol den Befehl<p><code>get <name> layout</code></p>absetzen. Das eigene Layout sollte nun in der Liste erscheinen.
#* Das eigene Layout kann dann mit<p><code>set &lt;name&gt; layout &lt;MeinLayout&gt;</code></p>geladen werden.
 
=== Eigene makenotify-Routine hinterlegen ===
Beim Aufruf von <code>set ''<Device>'' makenotify</code> wird ein [[notify]] erzeugt der Form
:<code>define ''&lt;Name&gt;'' notify ''&lt;RC-Name&gt;'' set ''&lt;ausführendes Gerät&gt;'' $EVENT </code>
Das sollte in 90% der Fälle passen. Wenn für das eigene Modul jedoch ein abweichendes Kommando erforderlich ist, z.&nbsp;B.
:<code>set ''&lt;ausführendes Gerät&gt;'' command &lt;Befehl&gt;</code>
dann passt das standardmäßig durch makenotify erzeugte notify nicht. In diesem Fall kann das notify durch eine eigene Routine angelegt werden. Dazu wird im eigenen Modul eine Routine zur Erzeugung des notify hinterlegt. Der Name der Routine wird wiederum in <code>%data</code> hinterlegt mit:
 
<code>$data{RC_makenotify}{''<Modulname>''} = "Mein_Modul_Makenotify";</code>
 
<syntaxhighlight lang="perl">
# Beispiel:
$data{RC_makenotify}{VIERA}  = "VIERA_makenotify"; </syntaxhighlight>
 
Beim Aufruf von
:<code>set ''&lt;rc&gt;'' makenotify ''&lt;ausführendes Gerät&gt;''</code>
wird nun der TYPE von <code>''&lt;ausführendes Gerät&gt;''</code> ermittelt und gesucht, ob es einen passenden Eintrag in <code>$data{RC_makenotify}</code> gibt. Ist dieser vorhanden, wird die dort angegebene Routine aufgerufen. Als Beispiel kann das Modul [[VIERA]] dienen.
 
== Beispiel-Layouts mit screenshots ==
=== iTunes ===
[[Datei:remotecontrol_iTunes.jpg|thumb|right]]
  <nowiki>
  <nowiki>
rc_iconpath icons/remotecontrol
define rc_itunes remotecontrol
rc_iconprefix black_btn_
 
row00      play:PLAY,pause:PAUSE,prev:REWIND,next:FF,louder:VOLUP,quieter:VOLDOWN
attr rc_itunes rc_iconpath icons/remotecontrol
attr rc_itunes rc_iconprefix black_btn_
attr rc_itunes row00      play:PLAY,pause:PAUSE,prev:REWIND,next:FF,louder:VOLUP,quieter:VOLDOWN
 
define weblink_itunes weblink htmlCode {fhem("get rc_itunes htmlcode", 1)}
define notify_itunes rc_itunes {doiTunes("$EVENT");}
</nowiki>
</nowiki>
<br><br>
 
===Samsung===
=== Samsung ===
[[Datei:remotecontrol_samsung.jpg]]
[[Datei:remotecontrol_samsung.jpg|thumb|right]]
  <nowiki>
  <nowiki>
rc_iconpath icons/remotecontrol
define rc_samsung remotecontrol
rc_iconprefix black_btn_
 
row00     POWEROFF,TV,HDMI
attr rc_samsung rc_iconpath   icons/remotecontrol
row01     :blank,:blank,:blank
attr rc_samsung rc_iconprefix black_btn_
row02     1,2,3
attr rc_samsung row00         POWEROFF,TV,HDMI
row03     4,5,6
attr rc_samsung row01         :blank,:blank,:blank
row04     7,8,9
attr rc_samsung row02         1,2,3
row05     :blank,0,PRECH
attr rc_samsung row03         4,5,6
row06     :blank,:blank,:blank
attr rc_samsung row04         7,8,9
row07     VOLUP,MUTE,CHUP
attr rc_samsung row05         :blank,0,PRECH
row08     VOLDOWN,CH_LIST,CHDOWN
attr rc_samsung row06         :blank,:blank,:blank
row09     MENU,:blank,GUIDE
attr rc_samsung row07         VOLUP,MUTE,CHUP
row10     :blank,:blank,:blank
attr rc_samsung row08         VOLDOWN,CH_LIST,CHDOWN
row11     TOOLS,UP,INFO
attr rc_samsung row09         MENU,:blank,GUIDE
row12     LEFT,ENTER,RIGHT
attr rc_samsung row10         :blank,:blank,:blank
row13     RETURN,DOWN,EXIT
attr rc_samsung row11         TOOLS,UP,INFO
attr rc_samsung row12         LEFT,ENTER,RIGHT
attr rc_samsung row13         RETURN,DOWN,EXIT
 
define weblink_rc_samsung weblink htmlCode {fhem("get rc_samsung htmlcode", 1)}
define notify_rc_samsung notify rc_samsung set myTV $EVENT
</nowiki>
</nowiki>
[[Kategorie:Unterhaltungselektronik]]

Aktuelle Version vom 5. September 2020, 21:27 Uhr


remotecontrol
Zweck / Funktion
Grafische Darstellung einer Fernbedienung
Allgemein
Typ Hilfsmodul
Details
Dokumentation EN / DE
Modulname 95_remotecontrol.pm
Ersteller ulimaass
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


Grafische Darstellung einer Fernbedienung

Das Modul remotecontrol stellt einen Weblink bereit, der eine grafische Abbildung einer physischen Fernbedienung anzeigt, siehe Beispiel rechts. Dieser Weblink kann in FHEM-Frontends wie FHEMWEB oder FLOORPLAN verwendet werden.

Die Tastenbelegung (das Layout) ist frei wählbar. Standard-Layouts sind für unterschiedliche Geräte verfügbar. Das remotecontrol-device wird per notify an das FHEM-device gekoppelt, das nach einem Tastendruck den Befehl an das physische Gerät sendet.

Einrichtung

Define

Das define erfolgt nach der üblichen FHEM-Syntax:

# Syntax:
define <name> remotecontrol
# Beispiel:
define rc1 remotecontrol

Damit ist eine leere Fernbedienung (zunächst noch ohne Tasten) angelegt.

Zu Testzwecken kann man sein Device zunächst einem Testraum zuordnen, z. B.

attr rc1 room TestRemote

Hinweis: Nicht vergessen, nach dem Erzeugen der Fernbedienung die Konfiguration zu speichern. Ansonsten ist sie nach einem Neustart von FHEM nicht mehr vorhanden. Details dazu finden sich auf der Seite Konfiguration.

Standard-Tastaturlayouts nutzen

Jedes FHEM-Modul kann Tastaturlayouts für das Modul remotecontrol bereitstellen.

Die Liste der vorhandenen Tastaturlayouts wird angezeigt mit

# Syntax:
get <name> layout
# Beispiel:
get rc1 layout 

Die Liste der vordefinierten Tastaturlayouts wird nun angezeigt.

Ein Tastatur-Layout kann zugeordnet (geladen) werden mit

# Syntax:
set <name< layout <layoutname<
# Beispiel:
set rc1 layout itunes  

Hinweis: Das Laden von Standard-Layouts ändert die Werte der Attribute row00 - row19. Diese werden erst durch den Befehl save nach fhem.cfg geschrieben. Soll der Befehl save nicht verwendet werden, kann die Konfiguration auch manuell in fhem.cfg eingetragen werden. Ein Beispiel befindet sich am Ende dieses Wiki-Artikels.

Hinweis: Ein Standard-Tastaturlayout wird erst nach dem Laden eines Moduls bereitgestellt. Wenn Sie also erst zu einem späteren Zeitpunkt ein weiteres Modul (z.B. VIERA für Panasonic-TV) in Ihre Konfiguration aufnehmen, wird ein ggf. vorhandenes remotecontrol-Standard-Layout erst dann angezeigt. Man sollte also auch später ab und zu mit dem o.g. Befehl prüfen, ob für weitere Geräte Standardlayouts vorhanden/hinzugekommen sind.

Im Modul remotecontrol selbst sind die Beispiel-Layouts "itunes" und "samsung" vorhanden.

Eigene Tastaturlayouts einrichten

Die Tastatur der Fernbedienung ist aufgeteilt in bis zu 20 Zeilen. Je Zeile können beliebig viele Tasten definiert werden.

Jede Taste auf der Fernbedienung wird definiert durch

  • den Befehl, der nach einem Tastendruck ausgeführt werden soll
  • das icon, das als Taste erscheinen soll

Man muss also je Taste diese beiden Werte festlegen. Mehrere Tasten in einer Zeile werden jeweils durch ein Komma voneinander getrennt.

Icon-Pfad festlegen

Einmalig ermitteln, in welchem Ordner die Icons liegen, die für die Tastatur verwendet werden sollen. Die Standard-icons liegen im Ordner www/images/default/remotecontrol. Um das nicht bei jeder Taste angeben zu müssen, setzt man

attr <name> rc_iconpath icons/remotecontrol

Icon-Prefix festlegen

Ggf. einmalig einen prefix für Dateinamen festlegen. Die Standard-icons folgen der Namenskonvention black_btn_<Beschreibung>. Um den Teil vor der Beschreibung nicht bei jeder Taste mit angeben zu müssen, setzt man

attr <name> rc_iconprefix black_btn_

Tasten definieren

  1. ermitteln, welcher Befehl an das ausführende FHEM-Gerät gesendet werden soll. Als Beispiel soll der Befehl "play" dienen. Groß-/Kleinschreibung ist zu beachten.
  2. ermitteln, welches Icon zur Darstellung der Taste verwendet werden soll. Unter den Standardicons gibt es ein icon mit dem Dateinamen black_btn_PLAY.png. Der vordere Teil ist bereits als prefix hinterlegt, die Datei-Endung muss nicht angegeben werden. Als icon für die Tastaturdefinition kann man also einfach PLAY angeben. Groß-/Kleinschreibung ist zu beachten.

Nachdem nun der Befehl (play) und der Icon-Name (PLAY) ermittelt sind, können diese - durch einen Doppelpunkt getrennt - als Definition einer Taste hinterlegt werden.

# Syntax: 
attr <name> rowXX <command>:<icon>
# Beispiel:
attr rc1 row00 play:PLAY         # als Befehl wird play gesendet, als icon wird PLAY verwendet

Sollen weitere Tasten definiert werden, hängt man sie durch Komma getrennt an.

# Syntax: 
attr <name> rowXX <command>:<icon>[,<command>:<icon>][,....]
# Beipiel:
attr rc1 row01 play:PLAY,anhalten:STOP

Sollen auf der Tastatur Leer-Räume abgebildet werden, gibt man als Tastendefinition :blank an (also kein Befehl, Icon blank). Das Icon mit dem Namen 'blank' ist vorhanden, hat ein Drittel der regulären Tastenhöhe und ist 100% transparent.

attr rc1 row02 play:PLAY,:blank,anhalten:STOP

Eine "Trennzeile" lässt sich einfügen durch

attr rc1 row03 :blank,:blank,:blank

Hinweis: Manche Browser stellen in einer Zeile, in der die letzte Taste nicht definiert ist, den Rahmen nicht dar. Füllen Sie in diesem Fall die Tastaturzeile mit :blank soweit auf, dass sie dieselbe Anzahl Tasten aufweist wie die längste Tastaturzeile auf Ihrer Fernbedienung.

Für den Fall, dass der Befehl und der Icon-Name identisch sind (incl. Groß-/Kleinschreibung) besteht zur Vereinfachung die Möglichkeit, nur das Kommando anzugeben. Dieses wird dann auch als icon-Name verwendet.

# Syntax: 
attr <name> rowXX [<command>:<icon>|<command_icon>][,[<command>:<icon>|<command_icon>]]...
# Beispiele:
attr rc1 row04 PLAY                           # als Befehl wird PLAY gesendet, als icon wird PLAY verwendet
attr rc1 row05 PLAY,:blank,anhalten:STOP      # auch Mischformen sind möglich

Verwenden von .svg-icons

Endet der Dateiname nicht auf .svg, verhält sich die die img-Generierung wie oben beschrieben unter Beachtung von rc_iconpath und rc_iconprefix.

Enthält der angegebene Dateiname ".svg" , so wird der svg-Lesemechanismus aus FHEMWEB verwendet. Dabei werden die Attribute rc_iconpath und rc_iconprefix ignoriert, es wird die "ganz normale" Zugriffsfolge verwendet wie im FHEMWEB-Attribut iconPath gesetzt (z. B. fhemSVG:openautomation:default)

Attributes:
   rc_iconpath icons
   row00       play:audio_play.svg                    # svg-icon ohne Farbangabe
   row01       oldplay:remotecontrol/black_btn_PLAY   # nicht-svg-icon, Pfadangabe bei iconpath "icons"
   row02       redplay:audio_play.svg@red             # svg-icon mit Farbangabe

Neue Icons für Tasten erstellen und verwenden

Im Ordner www/images/default/remotecontrol liegt das Template für weitere Tasten. Die Datei heisst _black_btn_template.pdn und kann z. B. mit paint.net bearbeitet werden.

Neue Dateien bitte als png analog der vorhandenen Namenskonvention erstellen: Prefix black_btn_, Beschreibung in Grossbuchstaben.

Zur Erweiterung des icon-Vorrats neue Dateien bitte zum Einchecken an den Modulautor mailen.

Hinweis: Neue Dateien werden in FHEM erst angezeigt, nachdem das interne Icon-Listing aktualisiert wurde. Dies geschieht nach jedem FHEM-(re)start oder mit dem Befehl

set WEB rereadicons

Kopplung an das ausführende Gerät

Bei jedem Tastendruck wird der Befehl (command), der der Taste zugeordnet ist, als STATE des remotecontrol-device angezeigt.

Außerdem wird ein entsprechendes System-Event erzeugt. Dieses kann mit notify geprüft und an das ausführende Gerät weitergegeben werden.

Als Beispiel soll wie oben gezeigt eine Fernbedienung mit dem Namen rc1 bereits erstellt worden sein. Tastendrücke sollen zur Ausführung an das bereits vorhandene FHEM-device myTV weitergegeben werden.

Das entsprechende notify kann "manuell" oder per set-Befehl erzeugt werden:

# Syntax: 
set <name> makenotify <executingDevice>
# Beispiel:
set rc1 makenotify myTV               #erzeugt: define notify_rc1 notify rc1 set myTV $EVENT

Bei jedem Tastendruck löst die Fernbedienung rc1 ein event aus. Darauf reagiert das notify und sendet den entsprechenden set-Befehl an das Gerät myTV zur Ausführung.

Hinweis: Der Befehl makenotify erzeugt ein neues notify-device. Dieses wird erst durch den Befehl save in die fhem.cfg geschrieben. Möchten Sie den Befehl save nicht verwenden, tragen Sie das notify manuell in fhem.cfg ein. Ein weiteres Beispiel befindet sich am Ende dieses Wiki-Artikels.

Es können auch eigene Scripte (z. B. in 99_myUtils.pm) aufgerufen werden. Wenn es z. B. dort eine Routine MeineRoutine($) gibt, kann diese mit der Fernbedienung gesteuert werden durch

define n_rc1 notify rc1 {MeineRoutine("$EVENT")}

Optional: Weblink erzeugen und einbinden

Zusätzlich zum remotecontrol-device selbst kann auch ein weblink zum Anzeigen der grafischen Fernbedienung verwendet werden. Beim Erzeugen des Weblinks kann man einen Namen angeben. Wird kein Name angegeben, wird der default-Name "weblink_<name>" verwendet.

set rc1 makeweblink             # erzeugt Weblink mit dem Namen weblink_rc1
set rc1 makeweblink w_rc1       # erzeugt Weblink mit dem Namen w_rc1

Zu Testzwecken kann man auch den Weblink einem Testraum zuordnen, z. B.

attr weblink_rc1 room TestRemote
attr weblink_rc1 group rc

Durch die Zuordnung zu einer Gruppe wird der Name des Weblinks ebenfalls angezeigt, was zum Testen sehr praktisch ist. Während der Einrichtungsphase ist zu empfehlen, in einem Fenster den Detailscreen des remotecontrol-device anzuzeigen, während man in einem zweiten Fenster den Weblink anzeigt. So kann man durch einfaches Refresh die Auswirkungen der Konfigurationsänderungen sofort sehen.

Troubleshooting

Eine Taste wird nicht angezeigt

  • Groß/Kleinschreibung icon-Namens prüfen
  • Nach dem Anlegen neuer icons muss ausgeführt werden
set WEB rereadicons
  • Mit dem Befehl
get <name> htmlcode
den html-Code der grafischen Fernbedienung anzeigen. Darin suchen nach "<img src" und dann Link und Dateiname prüfen. Erwarteter Wert: <img src="/fhem/icons/remotecontrol/black_btn_PLAY">

Der rechte Rahmen wird mit Lücken dargestellt

Manche Browser stellen in einer Zeile, in der die letzte Taste gar nicht definiert ist, den Rahmen nicht dar. Füllen Sie in diesem Fall die Tastaturzeile mit :blank soweit auf, dass sie dieselbe Anzahl Tasten aufweist wie die längste Tastaturzeile auf Ihrer Fernbedienung.

Für Entwickler

Entwickler können aus ihren Modulen heraus Tastatur-Standardlayouts hinterlegen. Auch eine eigene Routine für makenotify ist möglich.

Neue Standard-Layouts hinterlegen

Standard-Layouts werden im eigenen Modul in Arrays abgelegt. Die Umwandung von Arrays in rowXX-Attribute sowie das Rendern zu html übernimmt das Modul remotecontrol.

Vorgehensweise im eigenen Modul:

  1. Eine Funktion implementieren, die ein Array mit dem Standard-Tastaturlayout zurückgibt. Als Vorlage dient aus dem Quelltext von 95_remotecontrol.pm eine der Routinen RC_layout_samsung() oder RC_layout_itunes().
  2. Im eigenen Modul in der Initialize-Funktion (nicht erst in der Define-Funktion!) einen Eintrag für $data{RC_layout}{<Layoutname>} vornehmen. Als Inhalt ist der Funktionsname der im ersten Schritt hinterlegten eigenen Layout-Funktion als Zeichenkette zu setzen.
    • Beispiel: Das Layout soll für den Nutzer MeinLayout heißen, die eigene Array-Routine heißt Mein_Modul_Layout(). Dafür ist in der eigenen Initialize-Funktion zu hinterlegen:

      $data{RC_layout}{MeinLayout} = "Mein_Modul_Layout";

      Als Vorlage kann wiederum das Modul 95_remotecontrol.pm dienen, siehe dort am Ende der Initialize-Funktion.
    • In einer definierten remotecontrol den Befehl

      get <name> layout

      absetzen. Das eigene Layout sollte nun in der Liste erscheinen.
    • Das eigene Layout kann dann mit

      set <name> layout <MeinLayout>

      geladen werden.

Eigene makenotify-Routine hinterlegen

Beim Aufruf von set <Device> makenotify wird ein notify erzeugt der Form

define <Name> notify <RC-Name> set <ausführendes Gerät> $EVENT

Das sollte in 90% der Fälle passen. Wenn für das eigene Modul jedoch ein abweichendes Kommando erforderlich ist, z. B.

set <ausführendes Gerät> command <Befehl>

dann passt das standardmäßig durch makenotify erzeugte notify nicht. In diesem Fall kann das notify durch eine eigene Routine angelegt werden. Dazu wird im eigenen Modul eine Routine zur Erzeugung des notify hinterlegt. Der Name der Routine wird wiederum in %data hinterlegt mit:

$data{RC_makenotify}{<Modulname>} = "Mein_Modul_Makenotify";

# Beispiel:
$data{RC_makenotify}{VIERA}  = "VIERA_makenotify";

Beim Aufruf von

set <rc> makenotify <ausführendes Gerät>

wird nun der TYPE von <ausführendes Gerät> ermittelt und gesucht, ob es einen passenden Eintrag in $data{RC_makenotify} gibt. Ist dieser vorhanden, wird die dort angegebene Routine aufgerufen. Als Beispiel kann das Modul VIERA dienen.

Beispiel-Layouts mit screenshots

iTunes

Remotecontrol iTunes.jpg
define rc_itunes remotecontrol

attr rc_itunes rc_iconpath icons/remotecontrol
attr rc_itunes rc_iconprefix black_btn_
attr rc_itunes row00      play:PLAY,pause:PAUSE,prev:REWIND,next:FF,louder:VOLUP,quieter:VOLDOWN

define weblink_itunes weblink htmlCode {fhem("get rc_itunes htmlcode", 1)}
define notify_itunes rc_itunes {doiTunes("$EVENT");}

Samsung

Remotecontrol samsung.jpg
define rc_samsung remotecontrol

attr rc_samsung rc_iconpath   icons/remotecontrol
attr rc_samsung rc_iconprefix black_btn_
attr rc_samsung row00         POWEROFF,TV,HDMI
attr rc_samsung row01         :blank,:blank,:blank
attr rc_samsung row02         1,2,3
attr rc_samsung row03         4,5,6
attr rc_samsung row04         7,8,9
attr rc_samsung row05         :blank,0,PRECH
attr rc_samsung row06         :blank,:blank,:blank
attr rc_samsung row07         VOLUP,MUTE,CHUP
attr rc_samsung row08         VOLDOWN,CH_LIST,CHDOWN
attr rc_samsung row09         MENU,:blank,GUIDE
attr rc_samsung row10         :blank,:blank,:blank
attr rc_samsung row11         TOOLS,UP,INFO
attr rc_samsung row12         LEFT,ENTER,RIGHT
attr rc_samsung row13         RETURN,DOWN,EXIT

define weblink_rc_samsung weblink htmlCode {fhem("get rc_samsung htmlcode", 1)}
define notify_rc_samsung notify rc_samsung set myTV $EVENT