<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Plaicy</id>
	<title>FHEMWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Plaicy"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Plaicy"/>
	<updated>2026-04-10T03:50:15Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Remotecontrol&amp;diff=33871</id>
		<title>Remotecontrol</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Remotecontrol&amp;diff=33871"/>
		<updated>2020-09-05T20:27:22Z</updated>

		<summary type="html">&lt;p&gt;Plaicy: /* Kopplung an das ausführende Gerät */ typo Tastendrücke&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:remotecontrol}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Grafische Darstellung einer Fernbedienung&lt;br /&gt;
|ModType=h&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=remotecontrol&lt;br /&gt;
&amp;lt;!-- |ModContact=Frontends ** Forenbereich für Diskussion, Fehlerberichte, ... ** --&amp;gt;&lt;br /&gt;
|ModTechName=95_remotecontrol.pm&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=86 ulimaass]}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:remotecontrol_samsung.jpg|thumb|right|Grafische Darstellung einer Fernbedienung]]&lt;br /&gt;
Das Modul &#039;&#039;&#039;remotecontrol&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Einrichtung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Das define erfolgt nach der üblichen FHEM-Syntax:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Syntax:&lt;br /&gt;
define &amp;lt;name&amp;gt; remotecontrol&lt;br /&gt;
# Beispiel:&lt;br /&gt;
define rc1 remotecontrol&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist eine leere Fernbedienung (zunächst noch ohne Tasten) angelegt.&lt;br /&gt;
&lt;br /&gt;
Zu Testzwecken kann man sein Device zunächst einem Testraum zuordnen, z.&amp;amp;nbsp;B.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr rc1 room TestRemote&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; 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]].&lt;br /&gt;
&lt;br /&gt;
=== Standard-Tastaturlayouts nutzen ===&lt;br /&gt;
Jedes FHEM-Modul kann Tastaturlayouts für das Modul &#039;&#039;remotecontrol&#039;&#039; bereitstellen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der vorhandenen Tastaturlayouts wird angezeigt mit&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Syntax:&lt;br /&gt;
get &amp;amp;lt;name&amp;amp;gt; layout&lt;br /&gt;
# Beispiel:&lt;br /&gt;
get rc1 layout &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Liste der vordefinierten Tastaturlayouts wird nun angezeigt.&lt;br /&gt;
&lt;br /&gt;
Ein Tastatur-Layout kann zugeordnet (geladen) werden mit&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Syntax:&lt;br /&gt;
set &amp;amp;lt;name&amp;amp;lt; layout &amp;amp;lt;layoutname&amp;amp;lt;&lt;br /&gt;
# Beispiel:&lt;br /&gt;
set rc1 layout itunes  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Das Laden von Standard-Layouts ändert die Werte der Attribute row00 - row19. Diese werden erst durch den Befehl &#039;&#039;save&#039;&#039; nach fhem.cfg geschrieben. Soll der Befehl &#039;&#039;save&#039;&#039; nicht verwendet werden, kann die Konfiguration auch manuell in fhem.cfg eingetragen werden. Ein Beispiel befindet sich am Ende dieses Wiki-Artikels.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Im Modul &#039;&#039;remotecontrol&#039;&#039; selbst sind die Beispiel-Layouts &amp;quot;itunes&amp;quot; und &amp;quot;samsung&amp;quot; vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Tastaturlayouts einrichten ===&lt;br /&gt;
Die Tastatur der Fernbedienung ist aufgeteilt in bis zu 20 Zeilen. Je Zeile können beliebig viele Tasten definiert werden.&lt;br /&gt;
&lt;br /&gt;
Jede Taste auf der Fernbedienung wird definiert durch&lt;br /&gt;
* den Befehl, der nach einem Tastendruck ausgeführt werden soll&lt;br /&gt;
* das icon, das als Taste erscheinen soll&lt;br /&gt;
&lt;br /&gt;
Man muss also je Taste diese beiden Werte festlegen. Mehrere Tasten in einer Zeile werden jeweils durch ein Komma voneinander getrennt.&lt;br /&gt;
&lt;br /&gt;
==== Icon-Pfad festlegen ====&lt;br /&gt;
Einmalig ermitteln, in welchem Ordner die Icons liegen, die für die Tastatur verwendet werden sollen. Die Standard-icons liegen im Ordner &amp;lt;code&amp;gt;www/images/default/remotecontrol&amp;lt;/code&amp;gt;. Um das nicht bei jeder Taste angeben zu müssen, setzt man&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;amp;lt;name&amp;amp;gt; rc_iconpath icons/remotecontrol&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Icon-Prefix festlegen ====&lt;br /&gt;
Ggf. einmalig einen prefix für Dateinamen festlegen. Die Standard-icons folgen der Namenskonvention black_btn_&amp;amp;lt;Beschreibung&amp;amp;gt;. Um den Teil vor der Beschreibung nicht bei jeder Taste mit angeben zu müssen, setzt man&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;amp;lt;name&amp;amp;gt; rc_iconprefix black_btn_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tasten definieren ====&lt;br /&gt;
# ermitteln, welcher Befehl an das ausführende FHEM-Gerät gesendet werden soll. Als Beispiel soll der Befehl &amp;quot;play&amp;quot; dienen. Groß-/Kleinschreibung ist zu beachten.&lt;br /&gt;
# ermitteln, welches Icon zur Darstellung der Taste verwendet werden soll. Unter den Standardicons gibt es ein icon mit dem Dateinamen black_btn_&#039;&#039;&#039;PLAY&#039;&#039;&#039;.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 &#039;&#039;&#039;PLAY&#039;&#039;&#039; angeben. Groß-/Kleinschreibung ist zu beachten.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Syntax: &lt;br /&gt;
attr &amp;amp;lt;name&amp;amp;gt; rowXX &amp;amp;lt;command&amp;amp;gt;:&amp;amp;lt;icon&amp;amp;gt;&lt;br /&gt;
# Beispiel:&lt;br /&gt;
attr rc1 row00 play:PLAY         # als Befehl wird play gesendet, als icon wird PLAY verwendet&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen weitere Tasten definiert werden, hängt man sie durch Komma getrennt an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Syntax: &lt;br /&gt;
attr &amp;amp;lt;name&amp;amp;gt; rowXX &amp;amp;lt;command&amp;amp;gt;:&amp;amp;lt;icon&amp;amp;gt;[,&amp;amp;lt;command&amp;amp;gt;:&amp;amp;lt;icon&amp;amp;gt;][,....]&lt;br /&gt;
# Beipiel:&lt;br /&gt;
attr rc1 row01 play:PLAY,anhalten:STOP&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen auf der Tastatur Leer-Räume abgebildet werden, gibt man als Tastendefinition &#039;&#039;&#039;:blank&#039;&#039;&#039; an (also kein Befehl, Icon blank). Das Icon mit dem Namen &#039;blank&#039; ist vorhanden, hat ein Drittel der regulären Tastenhöhe und ist 100% transparent.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
attr rc1 row02 play:PLAY,:blank,anhalten:STOP&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine &amp;quot;Trennzeile&amp;quot; lässt sich einfügen durch&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
attr rc1 row03 :blank,:blank,:blank&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Syntax: &lt;br /&gt;
attr &amp;amp;lt;name&amp;amp;gt; rowXX [&amp;amp;lt;command&amp;amp;gt;:&amp;amp;lt;icon&amp;amp;gt;|&amp;amp;lt;command_icon&amp;amp;gt;][,[&amp;amp;lt;command&amp;amp;gt;:&amp;amp;lt;icon&amp;amp;gt;|&amp;amp;lt;command_icon&amp;amp;gt;]]...&lt;br /&gt;
# Beispiele:&lt;br /&gt;
attr rc1 row04 PLAY                           # als Befehl wird PLAY gesendet, als icon wird PLAY verwendet&lt;br /&gt;
attr rc1 row05 PLAY,:blank,anhalten:STOP      # auch Mischformen sind möglich&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verwenden von .svg-icons ====&lt;br /&gt;
Endet der Dateiname nicht auf .svg, verhält sich die die img-Generierung wie oben beschrieben unter Beachtung von rc_iconpath und rc_iconprefix.&lt;br /&gt;
&lt;br /&gt;
Enthält der angegebene Dateiname &amp;quot;.svg&amp;quot; , so wird der svg-Lesemechanismus aus FHEMWEB verwendet. Dabei werden die Attribute rc_iconpath und rc_iconprefix &#039;&#039;&#039;ignoriert&#039;&#039;&#039;, es wird die &amp;quot;ganz normale&amp;quot; Zugriffsfolge verwendet wie im FHEMWEB-Attribut iconPath gesetzt (z.&amp;amp;nbsp;B. fhemSVG:openautomation:default)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Attributes:&lt;br /&gt;
   rc_iconpath icons&lt;br /&gt;
   row00       play:audio_play.svg                    # svg-icon ohne Farbangabe&lt;br /&gt;
   row01       oldplay:remotecontrol/black_btn_PLAY   # nicht-svg-icon, Pfadangabe bei iconpath &amp;quot;icons&amp;quot;&lt;br /&gt;
   row02       redplay:audio_play.svg@red             # svg-icon mit Farbangabe&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Neue Icons für Tasten erstellen und verwenden ====&lt;br /&gt;
Im Ordner www/images/default/remotecontrol liegt das Template für weitere Tasten. Die Datei heisst _black_btn_template.pdn und kann z.&amp;amp;nbsp;B. mit paint.net bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Neue Dateien bitte als png analog der vorhandenen Namenskonvention erstellen: Prefix black_btn_, Beschreibung in Grossbuchstaben.&lt;br /&gt;
&lt;br /&gt;
Zur Erweiterung des icon-Vorrats neue Dateien bitte zum Einchecken an den Modulautor mailen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; 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&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;set WEB rereadicons&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kopplung an das ausführende Gerät ===&lt;br /&gt;
Bei jedem Tastendruck wird der Befehl (command), der der Taste zugeordnet ist, als STATE des remotecontrol-device angezeigt.&lt;br /&gt;
&lt;br /&gt;
Außerdem wird ein entsprechendes System-Event erzeugt. Dieses kann mit notify geprüft und an das ausführende Gerät weitergegeben werden.&lt;br /&gt;
&lt;br /&gt;
Als Beispiel soll wie oben gezeigt eine Fernbedienung mit dem Namen &#039;&#039;&#039;rc1&#039;&#039;&#039; bereits erstellt worden sein. Tastendrücke sollen zur Ausführung an das bereits vorhandene FHEM-device &#039;&#039;&#039;myTV&#039;&#039;&#039; weitergegeben werden.&lt;br /&gt;
&lt;br /&gt;
Das entsprechende notify kann &amp;quot;manuell&amp;quot; oder per set-Befehl erzeugt werden:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Syntax: &lt;br /&gt;
set &amp;amp;lt;name&amp;amp;gt; makenotify &amp;amp;lt;executingDevice&amp;amp;gt;&lt;br /&gt;
# Beispiel:&lt;br /&gt;
set rc1 makenotify myTV               #erzeugt: define notify_rc1 notify rc1 set myTV $EVENT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei jedem Tastendruck löst die Fernbedienung &#039;&#039;rc1&#039;&#039; ein event aus. Darauf reagiert das notify und sendet den entsprechenden set-Befehl an das Gerät &#039;&#039;myTV&#039;&#039; zur Ausführung.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Der Befehl &#039;&#039;makenotify&#039;&#039; erzeugt ein neues notify-device. Dieses wird erst durch den Befehl &#039;&#039;save&#039;&#039; in die fhem.cfg geschrieben. Möchten Sie den Befehl &#039;&#039;save&#039;&#039; nicht verwenden, tragen Sie das notify manuell in fhem.cfg ein. Ein weiteres Beispiel befindet sich am Ende dieses Wiki-Artikels.&lt;br /&gt;
&lt;br /&gt;
Es können auch eigene Scripte (z.&amp;amp;nbsp;B. in 99_myUtils.pm) aufgerufen werden. Wenn es z.&amp;amp;nbsp;B. dort eine Routine &amp;lt;code&amp;gt;MeineRoutine($)&amp;lt;/code&amp;gt; gibt, kann diese mit der Fernbedienung gesteuert werden durch&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
define n_rc1 notify rc1 {MeineRoutine(&amp;quot;$EVENT&amp;quot;)}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optional: Weblink erzeugen und einbinden ===&lt;br /&gt;
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 &amp;quot;weblink_&amp;amp;lt;name&amp;amp;gt;&amp;quot; verwendet.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
set rc1 makeweblink             # erzeugt Weblink mit dem Namen weblink_rc1&lt;br /&gt;
set rc1 makeweblink w_rc1       # erzeugt Weblink mit dem Namen w_rc1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zu Testzwecken kann man auch den Weblink einem Testraum zuordnen, z.&amp;amp;nbsp;B.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
attr weblink_rc1 room TestRemote&lt;br /&gt;
attr weblink_rc1 group rc&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch die Zuordnung zu einer Gruppe wird der Name des Weblinks ebenfalls angezeigt, was zum Testen sehr praktisch ist.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
=== Eine Taste wird nicht angezeigt ===&lt;br /&gt;
* Groß/Kleinschreibung icon-Namens prüfen&lt;br /&gt;
* Nach dem Anlegen neuer icons muss ausgeführt werden&lt;br /&gt;
:&amp;lt;code&amp;gt;set WEB rereadicons&amp;lt;/code&amp;gt;&lt;br /&gt;
* Mit dem Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;get &amp;amp;lt;name&amp;amp;gt; htmlcode&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;den html-Code der grafischen Fernbedienung anzeigen. Darin suchen nach &amp;quot;&amp;lt;img src&amp;quot; und dann Link und Dateiname prüfen. Erwarteter Wert: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;img src=&amp;quot;/fhem/icons/remotecontrol/black_btn_PLAY&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Der rechte Rahmen wird mit Lücken dargestellt ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Für Entwickler ==&lt;br /&gt;
Entwickler können aus ihren Modulen heraus Tastatur-Standardlayouts hinterlegen. Auch eine eigene Routine für makenotify ist möglich.&lt;br /&gt;
&lt;br /&gt;
=== Neue Standard-Layouts hinterlegen ===&lt;br /&gt;
Standard-Layouts werden im eigenen Modul in Arrays abgelegt. Die Umwandung von Arrays in rowXX-Attribute sowie das Rendern zu html übernimmt das Modul &#039;&#039;remotecontrol&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Vorgehensweise im eigenen Modul:&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 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 &amp;lt;code&amp;gt;RC_layout_samsung()&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;RC_layout_itunes()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Im eigenen Modul in der [[DevelopmentModuleIntro#X_Initialize|Initialize]]-Funktion (nicht erst in der [[DevelopmentModuleIntro#X_Define|Define]]-Funktion!) einen Eintrag für &amp;lt;code&amp;gt;$data{RC_layout}{&#039;&#039;&amp;amp;lt;Layoutname&amp;amp;gt;&#039;&#039;}&amp;lt;/code&amp;gt; vornehmen. Als Inhalt ist der Funktionsname der im ersten Schritt hinterlegten eigenen Layout-Funktion als Zeichenkette zu setzen.&lt;br /&gt;
#* Beispiel: Das Layout soll für den Nutzer &#039;&#039;&#039;MeinLayout&#039;&#039;&#039; heißen, die eigene Array-Routine heißt &amp;lt;code&amp;gt;Mein_Modul_Layout()&amp;lt;/code&amp;gt;. Dafür ist in der eigenen [[DevelopmentModuleIntro#X_Initialize|Initialize]]-Funktion zu hinterlegen:&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;$data{RC_layout}{MeinLayout} = &amp;quot;Mein_Modul_Layout&amp;quot;;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;Als Vorlage kann wiederum das Modul &#039;&#039;95_remotecontrol.pm&#039;&#039; dienen, siehe dort am Ende der Initialize-Funktion.&lt;br /&gt;
#* In einer definierten remotecontrol den Befehl&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;get &amp;lt;name&amp;gt; layout&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;absetzen. Das eigene Layout sollte nun in der Liste erscheinen.&lt;br /&gt;
#* Das eigene Layout kann dann mit&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;set &amp;amp;lt;name&amp;amp;gt; layout &amp;amp;lt;MeinLayout&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;geladen werden.&lt;br /&gt;
&lt;br /&gt;
=== Eigene makenotify-Routine hinterlegen ===&lt;br /&gt;
Beim Aufruf von &amp;lt;code&amp;gt;set &#039;&#039;&amp;lt;Device&amp;gt;&#039;&#039; makenotify&amp;lt;/code&amp;gt; wird ein [[notify]] erzeugt der Form&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&amp;amp;lt;Name&amp;amp;gt;&#039;&#039; notify &#039;&#039;&amp;amp;lt;RC-Name&amp;amp;gt;&#039;&#039; set &#039;&#039;&amp;amp;lt;ausführendes Gerät&amp;amp;gt;&#039;&#039; $EVENT &amp;lt;/code&amp;gt;&lt;br /&gt;
Das sollte in 90% der Fälle passen. Wenn für das eigene Modul jedoch ein abweichendes Kommando erforderlich ist, z.&amp;amp;nbsp;B. &lt;br /&gt;
:&amp;lt;code&amp;gt;set &#039;&#039;&amp;amp;lt;ausführendes Gerät&amp;amp;gt;&#039;&#039; command &amp;amp;lt;Befehl&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
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 &amp;lt;code&amp;gt;%data&amp;lt;/code&amp;gt; hinterlegt mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$data{RC_makenotify}{&#039;&#039;&amp;lt;Modulname&amp;gt;&#039;&#039;} = &amp;quot;Mein_Modul_Makenotify&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Beispiel:&lt;br /&gt;
$data{RC_makenotify}{VIERA}  = &amp;quot;VIERA_makenotify&amp;quot;; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Aufruf von &lt;br /&gt;
:&amp;lt;code&amp;gt;set &#039;&#039;&amp;amp;lt;rc&amp;amp;gt;&#039;&#039; makenotify &#039;&#039;&amp;amp;lt;ausführendes Gerät&amp;amp;gt;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
wird nun der TYPE von &amp;lt;code&amp;gt;&#039;&#039;&amp;amp;lt;ausführendes Gerät&amp;amp;gt;&#039;&#039;&amp;lt;/code&amp;gt; ermittelt und gesucht, ob es einen passenden Eintrag in &amp;lt;code&amp;gt;$data{RC_makenotify}&amp;lt;/code&amp;gt; gibt. Ist dieser vorhanden, wird die dort angegebene Routine aufgerufen. Als Beispiel kann das Modul [[VIERA]] dienen.&lt;br /&gt;
&lt;br /&gt;
== Beispiel-Layouts mit screenshots ==&lt;br /&gt;
=== iTunes ===&lt;br /&gt;
[[Datei:remotecontrol_iTunes.jpg|thumb|right]]&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
define rc_itunes remotecontrol&lt;br /&gt;
&lt;br /&gt;
attr rc_itunes rc_iconpath icons/remotecontrol&lt;br /&gt;
attr rc_itunes rc_iconprefix black_btn_&lt;br /&gt;
attr rc_itunes row00      play:PLAY,pause:PAUSE,prev:REWIND,next:FF,louder:VOLUP,quieter:VOLDOWN&lt;br /&gt;
&lt;br /&gt;
define weblink_itunes weblink htmlCode {fhem(&amp;quot;get rc_itunes htmlcode&amp;quot;, 1)}&lt;br /&gt;
define notify_itunes rc_itunes {doiTunes(&amp;quot;$EVENT&amp;quot;);}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Samsung ===&lt;br /&gt;
[[Datei:remotecontrol_samsung.jpg|thumb|right]]&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
define rc_samsung remotecontrol&lt;br /&gt;
&lt;br /&gt;
attr rc_samsung rc_iconpath   icons/remotecontrol&lt;br /&gt;
attr rc_samsung rc_iconprefix black_btn_&lt;br /&gt;
attr rc_samsung row00         POWEROFF,TV,HDMI&lt;br /&gt;
attr rc_samsung row01         :blank,:blank,:blank&lt;br /&gt;
attr rc_samsung row02         1,2,3&lt;br /&gt;
attr rc_samsung row03         4,5,6&lt;br /&gt;
attr rc_samsung row04         7,8,9&lt;br /&gt;
attr rc_samsung row05         :blank,0,PRECH&lt;br /&gt;
attr rc_samsung row06         :blank,:blank,:blank&lt;br /&gt;
attr rc_samsung row07         VOLUP,MUTE,CHUP&lt;br /&gt;
attr rc_samsung row08         VOLDOWN,CH_LIST,CHDOWN&lt;br /&gt;
attr rc_samsung row09         MENU,:blank,GUIDE&lt;br /&gt;
attr rc_samsung row10         :blank,:blank,:blank&lt;br /&gt;
attr rc_samsung row11         TOOLS,UP,INFO&lt;br /&gt;
attr rc_samsung row12         LEFT,ENTER,RIGHT&lt;br /&gt;
attr rc_samsung row13         RETURN,DOWN,EXIT&lt;br /&gt;
&lt;br /&gt;
define weblink_rc_samsung weblink htmlCode {fhem(&amp;quot;get rc_samsung htmlcode&amp;quot;, 1)}&lt;br /&gt;
define notify_rc_samsung notify rc_samsung set myTV $EVENT&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;/div&gt;</summary>
		<author><name>Plaicy</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Remotecontrol&amp;diff=33870</id>
		<title>Remotecontrol</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Remotecontrol&amp;diff=33870"/>
		<updated>2020-09-05T20:26:19Z</updated>

		<summary type="html">&lt;p&gt;Plaicy: /* Kopplung an das ausführende Gerät */ typo &amp;quot;Außerdem&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:remotecontrol}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Grafische Darstellung einer Fernbedienung&lt;br /&gt;
|ModType=h&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=remotecontrol&lt;br /&gt;
&amp;lt;!-- |ModContact=Frontends ** Forenbereich für Diskussion, Fehlerberichte, ... ** --&amp;gt;&lt;br /&gt;
|ModTechName=95_remotecontrol.pm&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=86 ulimaass]}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:remotecontrol_samsung.jpg|thumb|right|Grafische Darstellung einer Fernbedienung]]&lt;br /&gt;
Das Modul &#039;&#039;&#039;remotecontrol&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Einrichtung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Das define erfolgt nach der üblichen FHEM-Syntax:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Syntax:&lt;br /&gt;
define &amp;lt;name&amp;gt; remotecontrol&lt;br /&gt;
# Beispiel:&lt;br /&gt;
define rc1 remotecontrol&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist eine leere Fernbedienung (zunächst noch ohne Tasten) angelegt.&lt;br /&gt;
&lt;br /&gt;
Zu Testzwecken kann man sein Device zunächst einem Testraum zuordnen, z.&amp;amp;nbsp;B.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
attr rc1 room TestRemote&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; 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]].&lt;br /&gt;
&lt;br /&gt;
=== Standard-Tastaturlayouts nutzen ===&lt;br /&gt;
Jedes FHEM-Modul kann Tastaturlayouts für das Modul &#039;&#039;remotecontrol&#039;&#039; bereitstellen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der vorhandenen Tastaturlayouts wird angezeigt mit&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Syntax:&lt;br /&gt;
get &amp;amp;lt;name&amp;amp;gt; layout&lt;br /&gt;
# Beispiel:&lt;br /&gt;
get rc1 layout &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Liste der vordefinierten Tastaturlayouts wird nun angezeigt.&lt;br /&gt;
&lt;br /&gt;
Ein Tastatur-Layout kann zugeordnet (geladen) werden mit&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Syntax:&lt;br /&gt;
set &amp;amp;lt;name&amp;amp;lt; layout &amp;amp;lt;layoutname&amp;amp;lt;&lt;br /&gt;
# Beispiel:&lt;br /&gt;
set rc1 layout itunes  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Das Laden von Standard-Layouts ändert die Werte der Attribute row00 - row19. Diese werden erst durch den Befehl &#039;&#039;save&#039;&#039; nach fhem.cfg geschrieben. Soll der Befehl &#039;&#039;save&#039;&#039; nicht verwendet werden, kann die Konfiguration auch manuell in fhem.cfg eingetragen werden. Ein Beispiel befindet sich am Ende dieses Wiki-Artikels.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Im Modul &#039;&#039;remotecontrol&#039;&#039; selbst sind die Beispiel-Layouts &amp;quot;itunes&amp;quot; und &amp;quot;samsung&amp;quot; vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Tastaturlayouts einrichten ===&lt;br /&gt;
Die Tastatur der Fernbedienung ist aufgeteilt in bis zu 20 Zeilen. Je Zeile können beliebig viele Tasten definiert werden.&lt;br /&gt;
&lt;br /&gt;
Jede Taste auf der Fernbedienung wird definiert durch&lt;br /&gt;
* den Befehl, der nach einem Tastendruck ausgeführt werden soll&lt;br /&gt;
* das icon, das als Taste erscheinen soll&lt;br /&gt;
&lt;br /&gt;
Man muss also je Taste diese beiden Werte festlegen. Mehrere Tasten in einer Zeile werden jeweils durch ein Komma voneinander getrennt.&lt;br /&gt;
&lt;br /&gt;
==== Icon-Pfad festlegen ====&lt;br /&gt;
Einmalig ermitteln, in welchem Ordner die Icons liegen, die für die Tastatur verwendet werden sollen. Die Standard-icons liegen im Ordner &amp;lt;code&amp;gt;www/images/default/remotecontrol&amp;lt;/code&amp;gt;. Um das nicht bei jeder Taste angeben zu müssen, setzt man&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;amp;lt;name&amp;amp;gt; rc_iconpath icons/remotecontrol&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Icon-Prefix festlegen ====&lt;br /&gt;
Ggf. einmalig einen prefix für Dateinamen festlegen. Die Standard-icons folgen der Namenskonvention black_btn_&amp;amp;lt;Beschreibung&amp;amp;gt;. Um den Teil vor der Beschreibung nicht bei jeder Taste mit angeben zu müssen, setzt man&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;amp;lt;name&amp;amp;gt; rc_iconprefix black_btn_&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tasten definieren ====&lt;br /&gt;
# ermitteln, welcher Befehl an das ausführende FHEM-Gerät gesendet werden soll. Als Beispiel soll der Befehl &amp;quot;play&amp;quot; dienen. Groß-/Kleinschreibung ist zu beachten.&lt;br /&gt;
# ermitteln, welches Icon zur Darstellung der Taste verwendet werden soll. Unter den Standardicons gibt es ein icon mit dem Dateinamen black_btn_&#039;&#039;&#039;PLAY&#039;&#039;&#039;.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 &#039;&#039;&#039;PLAY&#039;&#039;&#039; angeben. Groß-/Kleinschreibung ist zu beachten.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Syntax: &lt;br /&gt;
attr &amp;amp;lt;name&amp;amp;gt; rowXX &amp;amp;lt;command&amp;amp;gt;:&amp;amp;lt;icon&amp;amp;gt;&lt;br /&gt;
# Beispiel:&lt;br /&gt;
attr rc1 row00 play:PLAY         # als Befehl wird play gesendet, als icon wird PLAY verwendet&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen weitere Tasten definiert werden, hängt man sie durch Komma getrennt an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Syntax: &lt;br /&gt;
attr &amp;amp;lt;name&amp;amp;gt; rowXX &amp;amp;lt;command&amp;amp;gt;:&amp;amp;lt;icon&amp;amp;gt;[,&amp;amp;lt;command&amp;amp;gt;:&amp;amp;lt;icon&amp;amp;gt;][,....]&lt;br /&gt;
# Beipiel:&lt;br /&gt;
attr rc1 row01 play:PLAY,anhalten:STOP&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen auf der Tastatur Leer-Räume abgebildet werden, gibt man als Tastendefinition &#039;&#039;&#039;:blank&#039;&#039;&#039; an (also kein Befehl, Icon blank). Das Icon mit dem Namen &#039;blank&#039; ist vorhanden, hat ein Drittel der regulären Tastenhöhe und ist 100% transparent.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
attr rc1 row02 play:PLAY,:blank,anhalten:STOP&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine &amp;quot;Trennzeile&amp;quot; lässt sich einfügen durch&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
attr rc1 row03 :blank,:blank,:blank&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Syntax: &lt;br /&gt;
attr &amp;amp;lt;name&amp;amp;gt; rowXX [&amp;amp;lt;command&amp;amp;gt;:&amp;amp;lt;icon&amp;amp;gt;|&amp;amp;lt;command_icon&amp;amp;gt;][,[&amp;amp;lt;command&amp;amp;gt;:&amp;amp;lt;icon&amp;amp;gt;|&amp;amp;lt;command_icon&amp;amp;gt;]]...&lt;br /&gt;
# Beispiele:&lt;br /&gt;
attr rc1 row04 PLAY                           # als Befehl wird PLAY gesendet, als icon wird PLAY verwendet&lt;br /&gt;
attr rc1 row05 PLAY,:blank,anhalten:STOP      # auch Mischformen sind möglich&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verwenden von .svg-icons ====&lt;br /&gt;
Endet der Dateiname nicht auf .svg, verhält sich die die img-Generierung wie oben beschrieben unter Beachtung von rc_iconpath und rc_iconprefix.&lt;br /&gt;
&lt;br /&gt;
Enthält der angegebene Dateiname &amp;quot;.svg&amp;quot; , so wird der svg-Lesemechanismus aus FHEMWEB verwendet. Dabei werden die Attribute rc_iconpath und rc_iconprefix &#039;&#039;&#039;ignoriert&#039;&#039;&#039;, es wird die &amp;quot;ganz normale&amp;quot; Zugriffsfolge verwendet wie im FHEMWEB-Attribut iconPath gesetzt (z.&amp;amp;nbsp;B. fhemSVG:openautomation:default)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Attributes:&lt;br /&gt;
   rc_iconpath icons&lt;br /&gt;
   row00       play:audio_play.svg                    # svg-icon ohne Farbangabe&lt;br /&gt;
   row01       oldplay:remotecontrol/black_btn_PLAY   # nicht-svg-icon, Pfadangabe bei iconpath &amp;quot;icons&amp;quot;&lt;br /&gt;
   row02       redplay:audio_play.svg@red             # svg-icon mit Farbangabe&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Neue Icons für Tasten erstellen und verwenden ====&lt;br /&gt;
Im Ordner www/images/default/remotecontrol liegt das Template für weitere Tasten. Die Datei heisst _black_btn_template.pdn und kann z.&amp;amp;nbsp;B. mit paint.net bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Neue Dateien bitte als png analog der vorhandenen Namenskonvention erstellen: Prefix black_btn_, Beschreibung in Grossbuchstaben.&lt;br /&gt;
&lt;br /&gt;
Zur Erweiterung des icon-Vorrats neue Dateien bitte zum Einchecken an den Modulautor mailen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; 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&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;set WEB rereadicons&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kopplung an das ausführende Gerät ===&lt;br /&gt;
Bei jedem Tastendruck wird der Befehl (command), der der Taste zugeordnet ist, als STATE des remotecontrol-device angezeigt.&lt;br /&gt;
&lt;br /&gt;
Außerdem wird ein entsprechendes System-Event erzeugt. Dieses kann mit notify geprüft und an das ausführende Gerät weitergegeben werden.&lt;br /&gt;
&lt;br /&gt;
Als Beispiel soll wie oben gezeigt eine Fernbedienung mit dem Namen &#039;&#039;&#039;rc1&#039;&#039;&#039; bereits erstellt worden sein. Tastendrucke sollen zur Ausführung an das bereits vorhandene FHEM-device &#039;&#039;&#039;myTV&#039;&#039;&#039; weitergegeben werden.&lt;br /&gt;
&lt;br /&gt;
Das entsprechende notify kann &amp;quot;manuell&amp;quot; oder per set-Befehl erzeugt werden:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Syntax: &lt;br /&gt;
set &amp;amp;lt;name&amp;amp;gt; makenotify &amp;amp;lt;executingDevice&amp;amp;gt;&lt;br /&gt;
# Beispiel:&lt;br /&gt;
set rc1 makenotify myTV               #erzeugt: define notify_rc1 notify rc1 set myTV $EVENT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei jedem Tastendruck löst die Fernbedienung &#039;&#039;rc1&#039;&#039; ein event aus. Darauf reagiert das notify und sendet den entsprechenden set-Befehl an das Gerät &#039;&#039;myTV&#039;&#039; zur Ausführung.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Der Befehl &#039;&#039;makenotify&#039;&#039; erzeugt ein neues notify-device. Dieses wird erst durch den Befehl &#039;&#039;save&#039;&#039; in die fhem.cfg geschrieben. Möchten Sie den Befehl &#039;&#039;save&#039;&#039; nicht verwenden, tragen Sie das notify manuell in fhem.cfg ein. Ein weiteres Beispiel befindet sich am Ende dieses Wiki-Artikels.&lt;br /&gt;
&lt;br /&gt;
Es können auch eigene Scripte (z.&amp;amp;nbsp;B. in 99_myUtils.pm) aufgerufen werden. Wenn es z.&amp;amp;nbsp;B. dort eine Routine &amp;lt;code&amp;gt;MeineRoutine($)&amp;lt;/code&amp;gt; gibt, kann diese mit der Fernbedienung gesteuert werden durch&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
define n_rc1 notify rc1 {MeineRoutine(&amp;quot;$EVENT&amp;quot;)}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optional: Weblink erzeugen und einbinden ===&lt;br /&gt;
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 &amp;quot;weblink_&amp;amp;lt;name&amp;amp;gt;&amp;quot; verwendet.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
set rc1 makeweblink             # erzeugt Weblink mit dem Namen weblink_rc1&lt;br /&gt;
set rc1 makeweblink w_rc1       # erzeugt Weblink mit dem Namen w_rc1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zu Testzwecken kann man auch den Weblink einem Testraum zuordnen, z.&amp;amp;nbsp;B.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
attr weblink_rc1 room TestRemote&lt;br /&gt;
attr weblink_rc1 group rc&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch die Zuordnung zu einer Gruppe wird der Name des Weblinks ebenfalls angezeigt, was zum Testen sehr praktisch ist.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
=== Eine Taste wird nicht angezeigt ===&lt;br /&gt;
* Groß/Kleinschreibung icon-Namens prüfen&lt;br /&gt;
* Nach dem Anlegen neuer icons muss ausgeführt werden&lt;br /&gt;
:&amp;lt;code&amp;gt;set WEB rereadicons&amp;lt;/code&amp;gt;&lt;br /&gt;
* Mit dem Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;get &amp;amp;lt;name&amp;amp;gt; htmlcode&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;den html-Code der grafischen Fernbedienung anzeigen. Darin suchen nach &amp;quot;&amp;lt;img src&amp;quot; und dann Link und Dateiname prüfen. Erwarteter Wert: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;img src=&amp;quot;/fhem/icons/remotecontrol/black_btn_PLAY&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Der rechte Rahmen wird mit Lücken dargestellt ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Für Entwickler ==&lt;br /&gt;
Entwickler können aus ihren Modulen heraus Tastatur-Standardlayouts hinterlegen. Auch eine eigene Routine für makenotify ist möglich.&lt;br /&gt;
&lt;br /&gt;
=== Neue Standard-Layouts hinterlegen ===&lt;br /&gt;
Standard-Layouts werden im eigenen Modul in Arrays abgelegt. Die Umwandung von Arrays in rowXX-Attribute sowie das Rendern zu html übernimmt das Modul &#039;&#039;remotecontrol&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Vorgehensweise im eigenen Modul:&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 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 &amp;lt;code&amp;gt;RC_layout_samsung()&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;RC_layout_itunes()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Im eigenen Modul in der [[DevelopmentModuleIntro#X_Initialize|Initialize]]-Funktion (nicht erst in der [[DevelopmentModuleIntro#X_Define|Define]]-Funktion!) einen Eintrag für &amp;lt;code&amp;gt;$data{RC_layout}{&#039;&#039;&amp;amp;lt;Layoutname&amp;amp;gt;&#039;&#039;}&amp;lt;/code&amp;gt; vornehmen. Als Inhalt ist der Funktionsname der im ersten Schritt hinterlegten eigenen Layout-Funktion als Zeichenkette zu setzen.&lt;br /&gt;
#* Beispiel: Das Layout soll für den Nutzer &#039;&#039;&#039;MeinLayout&#039;&#039;&#039; heißen, die eigene Array-Routine heißt &amp;lt;code&amp;gt;Mein_Modul_Layout()&amp;lt;/code&amp;gt;. Dafür ist in der eigenen [[DevelopmentModuleIntro#X_Initialize|Initialize]]-Funktion zu hinterlegen:&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;$data{RC_layout}{MeinLayout} = &amp;quot;Mein_Modul_Layout&amp;quot;;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;Als Vorlage kann wiederum das Modul &#039;&#039;95_remotecontrol.pm&#039;&#039; dienen, siehe dort am Ende der Initialize-Funktion.&lt;br /&gt;
#* In einer definierten remotecontrol den Befehl&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;get &amp;lt;name&amp;gt; layout&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;absetzen. Das eigene Layout sollte nun in der Liste erscheinen.&lt;br /&gt;
#* Das eigene Layout kann dann mit&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;set &amp;amp;lt;name&amp;amp;gt; layout &amp;amp;lt;MeinLayout&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;geladen werden.&lt;br /&gt;
&lt;br /&gt;
=== Eigene makenotify-Routine hinterlegen ===&lt;br /&gt;
Beim Aufruf von &amp;lt;code&amp;gt;set &#039;&#039;&amp;lt;Device&amp;gt;&#039;&#039; makenotify&amp;lt;/code&amp;gt; wird ein [[notify]] erzeugt der Form&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&amp;amp;lt;Name&amp;amp;gt;&#039;&#039; notify &#039;&#039;&amp;amp;lt;RC-Name&amp;amp;gt;&#039;&#039; set &#039;&#039;&amp;amp;lt;ausführendes Gerät&amp;amp;gt;&#039;&#039; $EVENT &amp;lt;/code&amp;gt;&lt;br /&gt;
Das sollte in 90% der Fälle passen. Wenn für das eigene Modul jedoch ein abweichendes Kommando erforderlich ist, z.&amp;amp;nbsp;B. &lt;br /&gt;
:&amp;lt;code&amp;gt;set &#039;&#039;&amp;amp;lt;ausführendes Gerät&amp;amp;gt;&#039;&#039; command &amp;amp;lt;Befehl&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
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 &amp;lt;code&amp;gt;%data&amp;lt;/code&amp;gt; hinterlegt mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$data{RC_makenotify}{&#039;&#039;&amp;lt;Modulname&amp;gt;&#039;&#039;} = &amp;quot;Mein_Modul_Makenotify&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Beispiel:&lt;br /&gt;
$data{RC_makenotify}{VIERA}  = &amp;quot;VIERA_makenotify&amp;quot;; &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Aufruf von &lt;br /&gt;
:&amp;lt;code&amp;gt;set &#039;&#039;&amp;amp;lt;rc&amp;amp;gt;&#039;&#039; makenotify &#039;&#039;&amp;amp;lt;ausführendes Gerät&amp;amp;gt;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
wird nun der TYPE von &amp;lt;code&amp;gt;&#039;&#039;&amp;amp;lt;ausführendes Gerät&amp;amp;gt;&#039;&#039;&amp;lt;/code&amp;gt; ermittelt und gesucht, ob es einen passenden Eintrag in &amp;lt;code&amp;gt;$data{RC_makenotify}&amp;lt;/code&amp;gt; gibt. Ist dieser vorhanden, wird die dort angegebene Routine aufgerufen. Als Beispiel kann das Modul [[VIERA]] dienen.&lt;br /&gt;
&lt;br /&gt;
== Beispiel-Layouts mit screenshots ==&lt;br /&gt;
=== iTunes ===&lt;br /&gt;
[[Datei:remotecontrol_iTunes.jpg|thumb|right]]&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
define rc_itunes remotecontrol&lt;br /&gt;
&lt;br /&gt;
attr rc_itunes rc_iconpath icons/remotecontrol&lt;br /&gt;
attr rc_itunes rc_iconprefix black_btn_&lt;br /&gt;
attr rc_itunes row00      play:PLAY,pause:PAUSE,prev:REWIND,next:FF,louder:VOLUP,quieter:VOLDOWN&lt;br /&gt;
&lt;br /&gt;
define weblink_itunes weblink htmlCode {fhem(&amp;quot;get rc_itunes htmlcode&amp;quot;, 1)}&lt;br /&gt;
define notify_itunes rc_itunes {doiTunes(&amp;quot;$EVENT&amp;quot;);}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Samsung ===&lt;br /&gt;
[[Datei:remotecontrol_samsung.jpg|thumb|right]]&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
define rc_samsung remotecontrol&lt;br /&gt;
&lt;br /&gt;
attr rc_samsung rc_iconpath   icons/remotecontrol&lt;br /&gt;
attr rc_samsung rc_iconprefix black_btn_&lt;br /&gt;
attr rc_samsung row00         POWEROFF,TV,HDMI&lt;br /&gt;
attr rc_samsung row01         :blank,:blank,:blank&lt;br /&gt;
attr rc_samsung row02         1,2,3&lt;br /&gt;
attr rc_samsung row03         4,5,6&lt;br /&gt;
attr rc_samsung row04         7,8,9&lt;br /&gt;
attr rc_samsung row05         :blank,0,PRECH&lt;br /&gt;
attr rc_samsung row06         :blank,:blank,:blank&lt;br /&gt;
attr rc_samsung row07         VOLUP,MUTE,CHUP&lt;br /&gt;
attr rc_samsung row08         VOLDOWN,CH_LIST,CHDOWN&lt;br /&gt;
attr rc_samsung row09         MENU,:blank,GUIDE&lt;br /&gt;
attr rc_samsung row10         :blank,:blank,:blank&lt;br /&gt;
attr rc_samsung row11         TOOLS,UP,INFO&lt;br /&gt;
attr rc_samsung row12         LEFT,ENTER,RIGHT&lt;br /&gt;
attr rc_samsung row13         RETURN,DOWN,EXIT&lt;br /&gt;
&lt;br /&gt;
define weblink_rc_samsung weblink htmlCode {fhem(&amp;quot;get rc_samsung htmlcode&amp;quot;, 1)}&lt;br /&gt;
define notify_rc_samsung notify rc_samsung set myTV $EVENT&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;/div&gt;</summary>
		<author><name>Plaicy</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ROLLO&amp;diff=33861</id>
		<title>ROLLO</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ROLLO&amp;diff=33861"/>
		<updated>2020-09-05T12:32:14Z</updated>

		<summary type="html">&lt;p&gt;Plaicy: fix typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:ROLLO}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Rollo-Steuerung zur einfachen Anzeige/Programmierung&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModFTopic=95832&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef= ---- noch nicht Teil von FHEM ----&amp;gt;&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=44_ROLLO.pm&lt;br /&gt;
|ModOwner=KernSani}}&lt;br /&gt;
Das Modul [[ROLLO]] bietet eine einfache Möglichkeit, mit ein bis zwei Relais den Hoch-/Runterlauf eines Rolladen zu steuern und punktgenau anzuhalten. Außerdem wird die aktuelle Position in fhem abgebildet.&lt;br /&gt;
Über welche Hardware/Module die Ausgänge angesprochen werden ist dabei egal.&lt;br /&gt;
__TOC__&lt;br /&gt;
Das Modul unterstützt beliebige Konfigurationen welche Befehle ausgeführt werden müssen um die Hardware des Rollos zu steuern.&lt;br /&gt;
&lt;br /&gt;
* Die Rollo-Position wird in 10%-Schritten von 0% (offen) bis 100% (geschlossen) zwischengespeichert um auf der Oberfläche für jede Position ein Icon festlegen zu können. &lt;br /&gt;
&lt;br /&gt;
[[Datei:Rolladen Eintrag.PNG|right|thumb|400px|Verschiedene Ansichten des Rollo:offen, fährt gerade herunter, position 50, fährt gerade hoch, geschlossen]]&lt;br /&gt;
Vorteil dieses Moduls:&lt;br /&gt;
&lt;br /&gt;
Ist ein Rollo mit diesem Modul definiert kann man auf der Oberfläche per Klick das Rollo hoch/runter oder auf eine bestimmte Position fahren. Der aktuelle Status des Rollo (fährt hoch/runter,offen,geschlossen,etc.) wird angezeigt.&lt;br /&gt;
Die Oberflächenicons werden per devStateIcon gesteuert, Icons und Farben können für jeden Status individuell formatiert werden, die Standard Kommandos auf der Oberfläche (hier: offen, geschlossen, schlitz, Position) können ebenfalls per Attribut angepasst werden. Das Status-Icon ist anklickbar.&lt;br /&gt;
Beim Anlegen des Moduls werden die Attribute zur Darstellung in fhem mit Standardwerten angelegt, so dass man sich einiges an Tipparbeit sparen kann, aber trotzdem die Möglichkeit hat die Darstellung individuell anzupassen.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Das eigentliche ansteuern des Rollo muss mit FHEM Befehlen ausführbar sein, diese Modul ist &amp;quot;nur&amp;quot; eine Oberfläche/Bedienmodul, kein Hardwaremodul.&lt;br /&gt;
&lt;br /&gt;
Wenn ROLLO installiert wurde, bevor es Bestandteil von FHEM wurde und lange kein Update gemacht wurde, wirst du die &amp;quot;position&amp;quot; readings und das entsprechende set Kommando vermissen. &amp;quot;position&amp;quot; wurde durch &amp;quot;pct&amp;quot; ersetzt, um Kompatibilität mit anderen Modulen [https://fhem.de/commandref_DE.html#AutoShuttersControl Automatic Shutter Control - ASC] sicher zu stellen. Bitte passe deine NOTIFYs/DOIFs entsprechend an.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Dieses Modul ist in der offiziellen FHEM-Auslieferung enthalten.}}&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
 define &amp;lt;name&amp;gt; ROLLO&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Default-Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|rl_type ||attr &amp;lt;Rollo-Device&amp;gt; rl_type [normal|HomeKit] ||||Typunterscheidung zur unterstützung verschiedener Hardware. Abhängig vom gewählten Typ wird die Richtung von der die pct gerechnet wird festgelegt:&lt;br /&gt;
&lt;br /&gt;
    normal = pct 0 ist offen, pct 100 ist geschlossen&lt;br /&gt;
    HomeKit = pct 100 ist offen, pct 0 ist geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|rl_secondsDown||attr &amp;lt;Rollo-Device&amp;gt; rl_secondsDown &amp;lt;number&amp;gt; ||||Sekunden zum hochfahren&lt;br /&gt;
|-&lt;br /&gt;
|rl_secondsUp ||attr &amp;lt;Rollo-Device&amp;gt; rl_secondsUp &amp;lt;number&amp;gt; ||||Sekunden zum herunterfahren&lt;br /&gt;
|-&lt;br /&gt;
|rl_excessTop ||attr &amp;lt;Rollo-Device&amp;gt; rl_excessTop &amp;lt;number&amp;gt; ||||Zeit, die mein Rollo fahren muss, ohne dass sich die Rollo-pct ändert (bei mir fährt der Rollo noch in die Wand, ohne dass man es am Fenster sieht, die pct ist also schon bei 0%).&lt;br /&gt;
|-&lt;br /&gt;
|rl_excessBottom ||attr &amp;lt;Rollo-Device&amp;gt; rl_excessBottom &amp;lt;number&amp;gt; ||||(siehe excessTop)&lt;br /&gt;
|-&lt;br /&gt;
|rl_switchTime ||attr &amp;lt;Rollo-Device&amp;gt; rl_switchTime &amp;lt;number&amp;gt; ||||Zeit, die zwischen 2 gegensätzlichen Laufbefehlen pausiert werden soll, also wenn der Rollo z.B. gerade runter fährt und ich den Befehl gebe hoch zu fahren, dann soll 1 Sekunde gewartet werden bis der Motor wirklich zum stillstand kommt, bevor es wieder in die andere Richtung weiter geht. Dies ist die einzige Zeit, die nichts mit der eigentlichen Laufzeit des Motors zu tun hat, sondern ein Timer zwischen den Laufzeiten.&lt;br /&gt;
|-&lt;br /&gt;
|rl_resetTime ||attr &amp;lt;Rollo-Device&amp;gt; rl_resetTime &amp;lt;number&amp;gt; ||||Zeit, die beim Anfahren von Endpositionen (offen,geschlossen) der Motor zusätzlich an bleiben soll, um sicherzustellen, dass die Endposition wirklich angefahren wurde. Dadurch können Differenzen in der Positionsberechnung korrigiert werden.&lt;br /&gt;
|-&lt;br /&gt;
|rl_reactionTime ||attr &amp;lt;Rollo-Device&amp;gt; rl_reactionTime &amp;lt;number&amp;gt; ||||Zeit für den Motor zum reagieren&lt;br /&gt;
|-&lt;br /&gt;
|rl_autoStop ||attr &amp;lt;Rollo-Device&amp;gt; rl_autoStop [0|1] ||||Es muss kein Stop-Befehl ausgeführt werden, das Rollo stoppt von selbst.&lt;br /&gt;
|-&lt;br /&gt;
|rl_commandUp ||attr &amp;lt;Rollo-Device&amp;gt; rl_commandUp &amp;lt;string&amp;gt; ||||Es werden bis zu 3 beliebige Befehle zum hochfahren ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|rl_commandDown ||attr &amp;lt;Rollo-Device&amp;gt; rl_commandDown &amp;lt;string&amp;gt; ||||Es werden bis zu 3 beliebige Befehle zum runterfahren ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|rl_commandStop ||attr &amp;lt;Rollo-Device&amp;gt; rl_commandStop &amp;lt;string&amp;gt; ||||Befehl der zum Stoppen ausgeführt wird, sofern nicht commandStopDown bzw. commandStopUp definiert sind&lt;br /&gt;
|-&lt;br /&gt;
|rl_commandStopDown ||attr &amp;lt;Rollo-Device&amp;gt; rl_commandStopDown &amp;lt;string&amp;gt; ||||Befehl der zum stoppen ausgeführt wird, wenn der Rollo gerade herunterfährt. Wenn nicht definiert wird commandStop ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|rl_commandStopUp ||attr &amp;lt;Rollo-Device&amp;gt; rl_commandStopUp &amp;lt;string&amp;gt; ||||Befehl der zum Stoppen ausgeführt wird,wenn der Rollo gerade hochfährt. Wenn nicht definiert wird commandStop ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|rl_blockMode ||attr &amp;lt;Rollo-Device&amp;gt; rl_blockMode [blocked|force-open|force-closed|only-up|only-down|half-up|half-down|none] ||||wenn ich den Befehl blocked ausführe, dann wird aufgrund der blockMode-Art festgelegt wie mein Rollo reagieren soll:&lt;br /&gt;
&lt;br /&gt;
    blocked = Rollo lässt sich nicht mehr bewegen&lt;br /&gt;
    force-open = bei einem beliebigen Fahrbefehl wird Rollo hochgefahren&lt;br /&gt;
    force-closed = bei einem beliebigen Fahrbefehl wird Rollo runtergefahren&lt;br /&gt;
    only-up = Befehle zum runterfahren werden ignoriert&lt;br /&gt;
    only-down = Befehle zum hochfahren werden ignoriert&lt;br /&gt;
    half-up = es werden nur die Positionen 50-100 angefahren, bei pct &amp;lt;50 wird pct 50% angefahren,&lt;br /&gt;
    half-down = es werden nur die Positionen 0-50 angefahren, bei pct &amp;gt;50 wird pct 50 angefahren&lt;br /&gt;
    none = block-Modus ist deaktiviert&lt;br /&gt;
|-&lt;br /&gt;
|automatic-enabled ||attr &amp;lt;Rollo-Device&amp;gt; automatic-enabled [on|off] ||||Wenn auf off gestellt, haben Befehle über Modul ROLLO_Automatic keine Auswirkungen auf diesen Rollo&lt;br /&gt;
|-&lt;br /&gt;
|automatic-delay ||attr &amp;lt;Rollo-Device&amp;gt; automatic-delay &amp;lt;number&amp;gt; ||||Dieses Attribut wird nur für die Modulerweiterung ROLLADEN_Automatic benötigt.&lt;br /&gt;
Hiermit kann einge Zeitverzögerung für den Rolladen eingestellt werden, werden die Rolladen per Automatic heruntergefahren, so wird dieser um die angegebenen Minuten später heruntergefahren.&lt;br /&gt;
|-&lt;br /&gt;
|rl_forceDrive ||attr &amp;lt;Rollo-Device&amp;gt; rl_forceDrive [0|1] ||||open/closed wird ausgeführt, auch wenn das ROLLO bereits in der Zielposition ist&lt;br /&gt;
|-&lt;br /&gt;
|rl_noSetPosBlocked ||attr &amp;lt;Rollo-Device&amp;gt; rl_noSetPosBlocked [0|1] ||||Wenn deaktiviert, können Positionsn (pct) auch gesetzt werden, wenn der ROLLO geblockt ist. Nach dem unblocken wird die entsprechende Position angefahren.&lt;br /&gt;
|-&lt;br /&gt;
|||disableattr &amp;lt;Rollo-Device&amp;gt; disable [0|1] ||||Wenn deaktiviert, können keine set oder get commandos für den ROLLO ausgeführt werden.&lt;br /&gt;
|-&lt;br /&gt;
|||||||&lt;br /&gt;
|-&lt;br /&gt;
|||||||&lt;br /&gt;
|-&lt;br /&gt;
|||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !!set Befehl !!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|open ||set &amp;lt;Rollo-Device&amp;gt; open ||Fährt das Rollo komplett auf (pct 0)&lt;br /&gt;
|-&lt;br /&gt;
|closed ||set &amp;lt;Rollo-Device&amp;gt; closed||Fährt das Rollo komplett zu (pct 100)&lt;br /&gt;
|-&lt;br /&gt;
|up ||set &amp;lt;Rollo-Device&amp;gt; up ||Fährt das Rollo um 10 auf (pct +10)&lt;br /&gt;
|-&lt;br /&gt;
|down ||set &amp;lt;Rollo-Device&amp;gt; down ||Fährt das Rollo um 10 zu (pct -10)&lt;br /&gt;
|-&lt;br /&gt;
|half || set &amp;lt;Rollo-Device&amp;gt; half ||Fährt das Rollo zur Hälfte runter bzw. hoch (pct 50)&lt;br /&gt;
|-&lt;br /&gt;
|stop ||set &amp;lt;Rollo-Device&amp;gt; stop ||Stoppt das Rollo&lt;br /&gt;
|-&lt;br /&gt;
|drive ||set &amp;lt;Rollo-Device&amp;gt; drive up 5||Fährt das Rollo in die angegebene Richtung für die angegebene Zeit (in Sekunden)&lt;br /&gt;
|-&lt;br /&gt;
|blocked ||set &amp;lt;Rollo-Device&amp;gt; blocked ||wenn aktiviert, kann der ROLLO nur noch eingeschränkt gesteuert werden. Siehe Attribut block_mode für Details.&lt;br /&gt;
|-&lt;br /&gt;
|unblocked ||set &amp;lt;Rollo-Device&amp;gt; unblocked ||Aktiviert einen geblockten ROLLO wieder für die normale Benutzung&lt;br /&gt;
|-&lt;br /&gt;
|pct ||set &amp;lt;Rollo-Device&amp;gt; pct &amp;lt;value&amp;gt; ||Fährt das Rollo auf eine beliebige pct zwischen 0 (offen) - 100 (geschlossen)&lt;br /&gt;
|-&lt;br /&gt;
|reset ||set &amp;lt;Rollo-Device&amp;gt; reset &amp;lt;value&amp;gt; ||Sagt dem Modul in welcher pct sich der Rollo befindet&lt;br /&gt;
|-&lt;br /&gt;
|extern ||set &amp;lt;Rollo-Device&amp;gt; extern &amp;lt;value&amp;gt; ||Der Software mitteilen dass gerade Befehl X bereits ausgeführt wurde und nun z.B,. das berechnen der aktuellen pct gestartet werden soll&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Get ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !!set Befehl !!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|version ||get &amp;lt;Rollo-Device&amp;gt; version ||Gibt die version des Modul Rollos aus&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !!Wert !!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|command||open,stop,closed||&lt;br /&gt;
|-&lt;br /&gt;
|desired_pct||0-100||Zielposition die angefahren werden soll (nur sinnvoll während das Rollo fährt)&lt;br /&gt;
|-&lt;br /&gt;
|drive-type||modul,extern||bei dem Befehl &amp;quot;set rollo extern ..&amp;quot; wird dieses attribut auf &amp;quot;extern&amp;quot; gestellt, sonst immer &amp;quot;modul&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|last_drive||drive-up,drive-down||die zuletzt benutzte Fahrtrichtung&lt;br /&gt;
|-&lt;br /&gt;
|pct||0-100||exakte Position des Rollo&lt;br /&gt;
|-&lt;br /&gt;
|state||open,closed,position-[0-100]||die Position gerundet auf ganze 10% Schritte, identisch mit dem Internal STATE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
===Set===&lt;br /&gt;
 set RolladenWohnzimmer pct 50&lt;br /&gt;
 set RolladenWohnzimmer geschlossen&lt;br /&gt;
 set RolladenWohnzimmer offen &lt;br /&gt;
Drei Beispiele das Rollo-Modul anzuweisen verschiedene Positionen anzufahren.&lt;br /&gt;
&lt;br /&gt;
 set RolladenWohnzimmer extern stop&lt;br /&gt;
Das Rollo-Modul wird angewiesen den status auf &amp;quot;nicht fahren&amp;quot; zu setzen, die aktuelle Rollo-Position zu berechnen und als neue Position abzuspeichern. Der eigentliche Rollo-Stop-Befehl wird dabei aber nicht gesendet.&lt;br /&gt;
&lt;br /&gt;
 set RolladenWohnzimmer reset closed&lt;br /&gt;
In der Oberfläche von fhem wird für das Rollo die Position &amp;quot;geschlossen&amp;quot; gespeichert, ohne Berechnungen durchzuführen oder Hardware zu steuern. Wird evtl. benötigt wenn der Ist-Status von den Soll-Werten aus fhem abweicht.&lt;br /&gt;
&lt;br /&gt;
===Zusammenspiel mit externem Taster===&lt;br /&gt;
In einem Anwendungszenario hat ein Nutzer zusätzliche Taster an seinem Rollo-Motor über die er ihn ebenfalls steuern kann. &lt;br /&gt;
Die Taster selber senden keine Events an fhem, nur der Rollo-Motor.&lt;br /&gt;
Hier ein Beispiel wie das ganze für aussehen könnte und diese Taster in das ROLLO-Modul integriert werden:&lt;br /&gt;
&lt;br /&gt;
 define rollo_manuell_auf DOIF ([meinRollo_Kanal1] eq &amp;quot;on&amp;quot; and [?meinRolloModul] ne &amp;quot;drive-up&amp;quot;) (set meinRolloModul extern open) DOELSEIF ([meinRollo_Kanal1] eq &amp;quot;off&amp;quot; and [?meinRolloModul] eq &amp;quot;drive-up&amp;quot;) (set meinRolloModul extern stop)&lt;br /&gt;
 define rollo_manuell_ab  DOIF ([meinRollo_Kanal2] eq &amp;quot;on&amp;quot; and [?meinRolloModul] ne &amp;quot;drive-down&amp;quot;) (set meinRolloModul extern closed) DOELSEIF ([meinRollo_Kanal2] eq &amp;quot;off&amp;quot; and [?meinRolloModul] eq &amp;quot;drive-down&amp;quot;) (set meinRolloModul extern stop)&lt;br /&gt;
&lt;br /&gt;
meinRollo_Kanal1 und meinRollo_Kanal2 sind die Hardwarekanäle die in dem Rollo-Modul zum hochfahren/runterfahren benutzt werden. &lt;br /&gt;
Das erste DOIF prüft ob das Rollo hoch fährt, ohne das das Rollo-Modul davon etwas weis. Ist dem so wird dem Rollo Modul mithilfe des set &amp;lt;extern&amp;gt; mitgeteilt das das Rollo bereits gestartet wurde. Das Modul fängt an die Zeit zu zählen und aktualisiert den Status der Oberfläche auf &amp;quot;fahre hoch&amp;quot;.&lt;br /&gt;
IM DOELSEIF wird abgefragt ob das Rollo steht, obwohl das Modul denkt das Rollo würde noch fahren. Ist dem so wird wieder mithilfe des set &amp;lt;extern&amp;gt; dem Modul mitgeteilt das das Rollo gestoppt wurde. Das Modul berechnet nun aufgrund der gefahrenen Zeit die aktuelle Position und aktualisiert den Status der Oberfläche auf die Position.&lt;br /&gt;
&lt;br /&gt;
Das gleiche wird dann im zweiten DOIF nochmal für das herunterfahren gemacht.&lt;br /&gt;
&lt;br /&gt;
Man kann nun das Rollo sowohl über die Oberfläche als auch per Taster bedienen und fhem und der reale Ist-Status sind synchron. Auch eine gleichzeitige Bedienung ist möglich, Das Rollo startet z.B. aufgrund einer Automatisierung morgens zum hochfahren und man klickt schnell auf den Taster neben dem Bett und stoppt das ganze wieder.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
Thread im {{Link2Forum|Topic=95832|LinkText=Forum}} seit das Modul Bestandteil der offiziellen FHEM Auslieferung ist&lt;br /&gt;
&lt;br /&gt;
Thread im {{Link2Forum|Topic=47202|LinkText=Forum}} bevor das Modul Bestandteil von FHEM war&lt;/div&gt;</summary>
		<author><name>Plaicy</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=ROLLO&amp;diff=33856</id>
		<title>ROLLO</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=ROLLO&amp;diff=33856"/>
		<updated>2020-09-05T08:05:40Z</updated>

		<summary type="html">&lt;p&gt;Plaicy: Umlaute ersätzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:ROLLO}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Rollo-Steuerung zur einfachen Anzeige/Programmierung&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModFTopic=95832&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef= ---- noch nicht Teil von FHEM ----&amp;gt;&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=44_ROLLO.pm&lt;br /&gt;
|ModOwner=KernSani}}&lt;br /&gt;
Das Modul [[ROLLO]] bietet eine einfache Möglichkeit, mit ein bis zwei Relais den Hoch-/Runterlauf eines Rolladen zu steuern und punktgenau anzuhalten. Außerdem wird die aktuelle Position in fhem abgebildet.&lt;br /&gt;
Über welche Hardware/Module die Ausgänge angesprochen werden ist dabei egal.&lt;br /&gt;
__TOC__&lt;br /&gt;
Das Modul unterstützt beliebige Konfigurationen welche Befehle ausgeführt werden müssen um die Hardware des Rollos zu steuern.&lt;br /&gt;
&lt;br /&gt;
* Die Rollo-Position wird in 10%-Schritten von 0% (offen) bis 100% (geschlossen) zwischengespeichert um auf der Oberfläche für jede Position ein Icon festlegen zu können. &lt;br /&gt;
&lt;br /&gt;
[[Datei:Rolladen Eintrag.PNG|right|thumb|400px|Verschiedene Ansichten des Rollo:offen, fährt gerade herunter, position 50, fährt gerade hoch, geschlossen]]&lt;br /&gt;
Vorteil dieses Moduls:&lt;br /&gt;
&lt;br /&gt;
Ist ein Rollo mit diesem Modul definiert kann man auf der Oberfläche per Klick das Rollo hoch/runter oder auf eine bestimmte Position fahren. Der aktuelle Status des Rollo (fährt hoch/runter,offen,geschlossen,etc.) wird angezeigt.&lt;br /&gt;
Die Oberflächenicons werden per devStateIcon gesteuert, Icons und Farben können für jeden Status individuell formatiert werden, die Standard Kommandos auf der Oberfläche (hier: offen, geschlossen, schlitz, Position) können ebenfalls per Attribut angepasst werden. Das Status-Icon ist anklickbar.&lt;br /&gt;
Beim Anlegen des Moduls werden die Attribute zur Darstellung in fhem mit Standardwerten angelegt, so dass man sich einiges an Tipparbeit sparen kann, aber trotzdem die Möglichkeit hat die Darstellung individuell anzupassen.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Das eigentliche ansteuern des Rollo muss mit FHEM Befehlen ausführbar sein, diese Modul ist &amp;quot;nur&amp;quot; eine Oberfläche/Bedienmodul, kein Hardwaremodul.&lt;br /&gt;
&lt;br /&gt;
Wenn ROLLO installiert wurde, bevor es Bestandteil von FHEM wurde und lange kein Update gemacht wurde, wirst du die &amp;quot;position&amp;quot; readings und das entsprechende set Kommando vermissen. &amp;quot;position&amp;quot; wurde durch &amp;quot;pct&amp;quot; ersetzt, um Kompatibilität mit anderen Modulen [https://fhem.de/commandref_DE.html#AutoShuttersControl Automatic Shutter Control - ASC] sicher zu stellen. Bitte passe deine NOTIFYs/DOIFs entsprechend an.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Dieses Modul ist in der offiziellen FHEM-Auslieferung enthalten.}}&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
 define &amp;lt;name&amp;gt; ROLLO&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Default-Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|rl_type ||attr &amp;lt;Rollo-Device&amp;gt; rl_type [normal|HomeKit] ||||Typunterscheidung zur unterstützung verschiedener Hardware. Abhängig vom gewählten Typ wird die Richtung von der die pct gerechnet wird festgelegt:&lt;br /&gt;
&lt;br /&gt;
    normal = pct 0 ist offen, pct 100 ist geschlossen&lt;br /&gt;
    HomeKit = pct 100 ist offen, pct 0 ist geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|rl_secondsDown||attr &amp;lt;Rollo-Device&amp;gt; rl_secondsDown &amp;lt;number&amp;gt; ||||Sekunden zum hochfahren&lt;br /&gt;
|-&lt;br /&gt;
|rl_secondsUp ||attr &amp;lt;Rollo-Device&amp;gt; rl_secondsUp &amp;lt;number&amp;gt; ||||Sekunden zum herunterfahren&lt;br /&gt;
|-&lt;br /&gt;
|rl_excessTop ||attr &amp;lt;Rollo-Device&amp;gt; rl_excessTop &amp;lt;number&amp;gt; ||||Zeit, die mein Rollo fahren muss, ohne dass sich die Rollo-pct ändert (bei mir fährt der Rollo noch in die Wand, ohne dass man es am Fenster sieht, die pct ist also schon bei 0%).&lt;br /&gt;
|-&lt;br /&gt;
|rl_excessBottom ||attr &amp;lt;Rollo-Device&amp;gt; rl_excessBottom &amp;lt;number&amp;gt; ||||(siehe excessTop)&lt;br /&gt;
|-&lt;br /&gt;
|rl_switchTime ||attr &amp;lt;Rollo-Device&amp;gt; rl_switchTime &amp;lt;number&amp;gt; ||||Zeit, die zwischen 2 gegensätzlichen Laufbefehlen pausiert werden soll, also wenn der Rollo z.B. gerade runter fährt und ich den Befehl gebe hoch zu fahren, dann soll 1 Sekunde gewartet werden bis der Motor wirklich zum stillstand kommt, bevor es wieder in die andere Richtung weiter geht. Dies ist die einzige Zeit, die nichts mit der eigentlichen Laufzeit des Motors zu tun hat, sondern ein Timer zwischen den Laufzeiten.&lt;br /&gt;
|-&lt;br /&gt;
|rl_resetTime ||attr &amp;lt;Rollo-Device&amp;gt; rl_resetTime &amp;lt;number&amp;gt; ||||Zeit, die beim Anfahren von Endpositionen (offen,geschlossen) der Motor zusätzlich an bleiben soll, um sicherzustellen, dass die Endposition wirklich angefahren wurde. Dadurch können Differenzen in der Positionsberechnung korrigiert werden.&lt;br /&gt;
|-&lt;br /&gt;
|rl_reactionTime ||attr &amp;lt;Rollo-Device&amp;gt; rl_reactionTime &amp;lt;number&amp;gt; ||||Zeit für den Motor zum reagieren&lt;br /&gt;
|-&lt;br /&gt;
|rl_autoStop ||attr &amp;lt;Rollo-Device&amp;gt; rl_autoStop [0|1] ||||Es muss kein Stop-Befehl ausgeführt werden, das Rollo stoppt von selbst.&lt;br /&gt;
|-&lt;br /&gt;
|rl_commandUp ||attr &amp;lt;Rollo-Device&amp;gt; rl_commandUp &amp;lt;string&amp;gt; ||||Es werden bis zu 3 beliebige Befehle zum hochfahren ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|rl_commandDown ||attr &amp;lt;Rollo-Device&amp;gt; rl_commandDown &amp;lt;string&amp;gt; ||||Es werden bis zu 3 beliebige Befehle zum runterfahren ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|rl_commandStop ||attr &amp;lt;Rollo-Device&amp;gt; rl_commandStop &amp;lt;string&amp;gt; ||||Befehl der zum Stoppen ausgeführt wird, sofern nicht commandStopDown bzw. commandStopUp definiert sind&lt;br /&gt;
|-&lt;br /&gt;
|rl_commandStopDown ||attr &amp;lt;Rollo-Device&amp;gt; rl_commandStopDown &amp;lt;string&amp;gt; ||||Befehl der zum stoppen ausgeführt wird, wenn der Rollo gerade herunterfährt. Wenn nicht definiert wird commandStop ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|rl_commandStopUp ||attr &amp;lt;Rollo-Device&amp;gt; rl_commandStopUp &amp;lt;string&amp;gt; ||||Befehl der zum Stoppen ausgeführt wird,wenn der Rollo gerade hochfährt. Wenn nicht definiert wird commandStop ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|rl_blockMode ||attr &amp;lt;Rollo-Device&amp;gt; rl_blockMode [blocked|force-open|force-closed|only-up|only-down|half-up|half-down|none] ||||wenn ich den Befehl blocked ausführe, dann wird aufgrund der blockMode-Art festgelegt wie mein Rollo reagieren soll:&lt;br /&gt;
&lt;br /&gt;
    blocked = Rollo lässt sich nicht mehr bewegen&lt;br /&gt;
    force-open = bei einem beliebigen Fahrbefehl wird Rollo hochgefahren&lt;br /&gt;
    force-closed = bei einem beliebigen Fahrbefehl wird Rollo runtergefahren&lt;br /&gt;
    only-up = Befehle zum runterfahren werden ignoriert&lt;br /&gt;
    only-down = Befehle zum hochfahren werden ignoriert&lt;br /&gt;
    half-up = es werden nur die Positionen 50-100 angefahren, bei pct &amp;lt;50 wird pct 50% angefahren,&lt;br /&gt;
    half-down = es werden nur die Positionen 0-50 angefahren, bei pct &amp;gt;50 wird pct 50 angefahren&lt;br /&gt;
    none = block-Modus ist deaktiviert&lt;br /&gt;
|-&lt;br /&gt;
|automatic-enabled ||attr &amp;lt;Rollo-Device&amp;gt; automatic-enabled [on|off] ||||Wenn auf off gestellt, haben Befehle über Modul ROLLO_Automatic keine Auswirkungen auf diesen Rollo&lt;br /&gt;
|-&lt;br /&gt;
|automatic-delay ||attr &amp;lt;Rollo-Device&amp;gt; automatic-delay &amp;lt;number&amp;gt; ||||Dieses Attribut wird nur für die Modulerweiterung ROLLADEN_Automatic benötigt.&lt;br /&gt;
Hiermit kann einge Zeitverzögerung für den Rolladen eingestellt werden, werden die Rolladen per Automatic heruntergefahren, so wird dieser um die angegebenen Minuten später heruntergefahren.&lt;br /&gt;
|-&lt;br /&gt;
|rl_forceDrive ||attr &amp;lt;Rollo-Device&amp;gt; rl_forceDrive [0|1] ||||open/closed wird ausgeführt, auch wenn das ROLLO bereits in der Zielposition ist&lt;br /&gt;
|-&lt;br /&gt;
|rl_noSetPosBlocked ||attr &amp;lt;Rollo-Device&amp;gt; rl_noSetPosBlocked [0|1] ||||Wenn deaktiviert, können Positionsn (pct) auch gesetzt werden, wenn der ROLLO geblockt ist. Nach dem unblocken wird die entsprechende Position angefahren.&lt;br /&gt;
|-&lt;br /&gt;
|||disableattr &amp;lt;Rollo-Device&amp;gt; disable [0|1] ||||Wenn deaktiviert, können keine set oder get commandos für den ROLLO ausgeführt werden.&lt;br /&gt;
|-&lt;br /&gt;
|||||||&lt;br /&gt;
|-&lt;br /&gt;
|||||||&lt;br /&gt;
|-&lt;br /&gt;
|||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !!set Befehl !!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|open ||set &amp;lt;Rollo-Device&amp;gt; open ||Fährt das Rollo komplett auf (pct 0)&lt;br /&gt;
|-&lt;br /&gt;
|closed ||set &amp;lt;Rollo-Device&amp;gt; closed||Fährt das Rollo komplett zu (pct 100)&lt;br /&gt;
|-&lt;br /&gt;
|up ||set &amp;lt;Rollo-Device&amp;gt; up ||Fährt das Rollo um 10 auf (pct +10)&lt;br /&gt;
|-&lt;br /&gt;
|down ||set &amp;lt;Rollo-Device&amp;gt; down ||Fährt das Rollo um 10 zu (pct -10)&lt;br /&gt;
|-&lt;br /&gt;
|half || set &amp;lt;Rollo-Device&amp;gt; half ||Fährt das Rollo zur Hälfte runter bzw. hoch (pct 50)&lt;br /&gt;
|-&lt;br /&gt;
|stop ||set &amp;lt;Rollo-Device&amp;gt; stop ||Stoppt das Rollo&lt;br /&gt;
|-&lt;br /&gt;
|drive ||set &amp;lt;Rollo-Device&amp;gt; drive up 5||Fährt das Rollo in die angegebene Richtung für die angegebene Zeit (in Sekunden)&lt;br /&gt;
|-&lt;br /&gt;
|blocked ||set &amp;lt;Rollo-Device&amp;gt; blocked ||wenn aktiviert, kann der ROLLO nur noch eingeschränkt gesteuert werden. Siehe Attribut block_mode für Details.&lt;br /&gt;
|-&lt;br /&gt;
|unblocked ||set &amp;lt;Rollo-Device&amp;gt; unblocked ||Aktiviert einen geblockten ROLLO wieder für die normale Benutzung&lt;br /&gt;
|-&lt;br /&gt;
|pct ||set &amp;lt;Rollo-Device&amp;gt; pct &amp;lt;value&amp;gt; ||Fährt das Rollo auf eine beliebige pct zwischen 0 (offen) - 100 (geschlossen)&lt;br /&gt;
|-&lt;br /&gt;
|reset ||set &amp;lt;Rollo-Device&amp;gt; reset &amp;lt;value&amp;gt; ||Sagt dem Modul in welcher pct sich der Rollo befindet&lt;br /&gt;
|-&lt;br /&gt;
|extern ||set &amp;lt;Rollo-Device&amp;gt; extern &amp;lt;value&amp;gt; ||Der Software mitteilen dass gerade Befehl X bereits ausgeführt wurde und nun z.B,. das berechnen der aktuellen pct gestartet werden soll&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Get ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !!set Befehl !!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|version ||get &amp;lt;Rollo-Device&amp;gt; version ||Gibt die version des Modul Rollos aus&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !!Wert !!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|command||open,stop,closed||&lt;br /&gt;
|-&lt;br /&gt;
|desired_pct||0-100||Zielposition die angefahren werden soll (nur sinnvoll während das Rollo fährt)&lt;br /&gt;
|-&lt;br /&gt;
|drive-type||modul,extern||bei dem Befehl &amp;quot;set rollo extern ..&amp;quot; wird dieses attribut auf &amp;quot;extern&amp;quot; gestellt, sonst immer &amp;quot;modul&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|last_drive||drive-up,drive-down||die zuletzt benutzte Fahrtrichtung&lt;br /&gt;
|-&lt;br /&gt;
|pct||0-100||exakte Position des Rollo&lt;br /&gt;
|-&lt;br /&gt;
|state||open,closed,position-[0-100]||die Position gerundet auf ganze 10% Schritte, identisch mit dem Internal STATE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
===Set===&lt;br /&gt;
 set RolladenWohnzimmer pct 50&lt;br /&gt;
 set RolladenWohnzimmer geschlossen&lt;br /&gt;
 set RolladenWohnzimmer offen &lt;br /&gt;
Drei Beispiele das Rollo-Modul anzuweisen verschiedene Positionen anzufahren.&lt;br /&gt;
&lt;br /&gt;
 set RolladenWohnzimmer extern stop&lt;br /&gt;
Das Rollo-Modul wird angewiesen den status auf &amp;quot;nicht fahren&amp;quot; zu setzen, die aktuelle Rollo-Position zu berechnen und als neue Position abzuspeichern. Der eigentliche Rollo-Stop-Befehl wird dabei aber nicht gesendet.&lt;br /&gt;
&lt;br /&gt;
 set RolladenWohnzimmer reset closed&lt;br /&gt;
In der Oberfläche von fhem wird für das Rollo die Position &amp;quot;geschlossen&amp;quot; gespeichert, ohne Berechnungen durchzuführen oder Hardware zu steuern. Wird evtl. benötigt wenn der Ist-Status von den Soll-Werten aus fhem abweicht.&lt;br /&gt;
&lt;br /&gt;
===Zusammenspiel mit externem Taster===&lt;br /&gt;
In einem Anwendungszenario hat ein Nutzer zusätzliche Taster an seinem Rollo-Motor über die er ihn ebenfalls steuern kann. &lt;br /&gt;
Die Taster selber senden keine Events an fhem, nur der Rollo-Motor.&lt;br /&gt;
Hier ein Beispiel wie das ganze für aussehen könnte und diese Taster in das ROLLO-Modul integriert werden:&lt;br /&gt;
&lt;br /&gt;
 define rollo_manuell_auf DOIF ([meinRollo_Kanal1] eq &amp;quot;on&amp;quot; and [?meinRolloModul] ne &amp;quot;drive-up&amp;quot;) (set meinRolloModul extern open) DOELSEIF ([meinRollo_Kanal1] eq &amp;quot;off&amp;quot; and [?meinRolloModul] eq &amp;quot;drive-up&amp;quot;) (set meinRolloModul extern stop)&lt;br /&gt;
 define rollo_manuell_ab  DOIF ([meinRollo_Kanal2] eq &amp;quot;on&amp;quot; and [?meinRolloModul] ne &amp;quot;drive-down&amp;quot;) (set meinRolloModul extern closed) DOELSEIF ([meinRollo_Kanal2] eq &amp;quot;off&amp;quot; and [?meinRolloModul] eq &amp;quot;drive-down&amp;quot;) (set meinRolloModul extern stop)&lt;br /&gt;
&lt;br /&gt;
meinRollo_Kanal1 und meinRollo_Kanal2 sind die Hardwarekanäle die in dem Rollo-Modul zum hochfahren/runterfahren benutzt werden. &lt;br /&gt;
Das erste DOIF prüft ob das Rollo hoch fährt, ohne das das Rollo-Modul davon etwas weis. Ist dem so wird dem Rollo Modul mithilfe des set &amp;lt;extern&amp;gt; mitgeteilt das das Rollo bereits gestartet wurde. Das Modul fängt an die Zeit zu zählen und aktualisiert den Status der Oberfläche auf &amp;quot;fahre hoch&amp;quot;.&lt;br /&gt;
IM DOELSEIF wird abgefragt ob das Rollo steht, obwohl das Modul denkt das Rollo würde noch fahren. Ist dem so wird wieder mithilfe des set &amp;lt;extern&amp;gt; dem Modul mitgeteilt das das Rollo gestoppt wurde. Das Modul berechnet nun aufgrund der gefahrenen Zeit die aktuelle Position und aktualisiert den Status der Oberfläche auf die Position.&lt;br /&gt;
&lt;br /&gt;
Das gleiche wird dann im zweiten DOIF nochmal für das herunterfahren gemacht.&lt;br /&gt;
&lt;br /&gt;
Man kann nun das Rollo sowohl über die Oberfläche als auch per Taster bedienen und fhem und der reale Ist-Status sind synchron. Ach eine gleichzeitige Bedienung ist möglich, Das Rollo startet z.B. aufgrund einer Automatisierung morgens zum hochfahren und man klickt schnell auf den Taster neben dem Bett und stoppt das ganze wieder.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
Thread im {{Link2Forum|Topic=95832|LinkText=Forum}} seit das Modul Bestandteil der offiziellen FHEM Auslieferung ist&lt;br /&gt;
&lt;br /&gt;
Thread im {{Link2Forum|Topic=47202|LinkText=Forum}} bevor das Modul Bestandteil von FHEM war&lt;/div&gt;</summary>
		<author><name>Plaicy</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:ROLLO&amp;diff=33855</id>
		<title>Diskussion:ROLLO</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Diskussion:ROLLO&amp;diff=33855"/>
		<updated>2020-09-05T07:58:54Z</updated>

		<summary type="html">&lt;p&gt;Plaicy: Werte/Datenbereich ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Werte/Datenbereich =&lt;br /&gt;
&lt;br /&gt;
Irgendwie ist da bei &amp;quot;Datentyp/Wertebereich&amp;quot; etwas kaputt gegangen. Da steht teilweise nur ein Wert und es gibt nur eine schließende eckige Klammer und keine öffnende. War da irgendwas spezielles mit den eckigen Klammern angedacht? Wenn nicht versuche ich mal die Informationen aus https://wiki.fhem.de/w/index.php?title=ROLLO&amp;amp;direction=prev&amp;amp;oldid=29111 wieder herzustellen. Außerdem ist die Angabe mit attr leicht überflüssig, da man die ja bei allen Attributen machen muss.--[[Benutzer:Plaicy|Plaicy]] ([[Benutzer Diskussion:Plaicy|Diskussion]]) 09:56, 5. Sep. 2020 (CEST)&lt;/div&gt;</summary>
		<author><name>Plaicy</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:ROLLO&amp;diff=33854</id>
		<title>Diskussion:ROLLO</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Diskussion:ROLLO&amp;diff=33854"/>
		<updated>2020-09-05T07:56:26Z</updated>

		<summary type="html">&lt;p&gt;Plaicy: Werte/Datenbereich&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Irgendwie ist da bei &amp;quot;Datentyp/Wertebereich&amp;quot; etwas kaputt gegangen. Da steht teilweise nur ein Wert und es gibt nur eine schließende eckige Klammer und keine öffnende. War da irgendwas spezielles mit den eckigen Klammern angedacht? Wenn nicht versuche ich mal die Informationen aus https://wiki.fhem.de/w/index.php?title=ROLLO&amp;amp;direction=prev&amp;amp;oldid=29111 wieder herzustellen.--[[Benutzer:Plaicy|Plaicy]] ([[Benutzer Diskussion:Plaicy|Diskussion]]) 09:56, 5. Sep. 2020 (CEST)&lt;/div&gt;</summary>
		<author><name>Plaicy</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Intertechno_Code_Berechnung&amp;diff=33853</id>
		<title>Intertechno Code Berechnung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Intertechno_Code_Berechnung&amp;diff=33853"/>
		<updated>2020-09-04T19:03:37Z</updated>

		<summary type="html">&lt;p&gt;Plaicy: Fix typo (&amp;quot;Dannn&amp;quot;)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Intertechno&#039;&#039;&#039; Systemkomponenten sind kostengünstige und weit verbreitete Funkschalter/-dimmer im 433 MHz Bereich, die man in fast jedem Baumarkt unter den Markennamen Intertechno, düwi, KlikAanKlikUit usw. erhalten kann. &lt;br /&gt;
&lt;br /&gt;
Es gibt eine Anzahl weiterer Hersteller/Handelsmarken mit ähnlicher Kodierung oder Einstellmöglichkeiten mit DIP Schaltern, die ebenfalls mit dem Intertechno Code geschaltet werden können. Dazu zählen von Usern bereits erfolgreich getestete Geräte von Elro AB440, FLS-100/m-e, Wetekom/Westfalia und weitere, theoretisch mögliche aber ungetestete Systeme wie Unitec oder Arctech Steckdosen (siehe [http://avr.börke.de/E-Funk.htm Börkes-HP])&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen in FHEM ==&lt;br /&gt;
Schalten kann man die Intertechno Funkkomponenten in FHEM über verschiedene Wege. So z.B. über CUL/CUNO, Tellstick, [[AVR-NET-IO]].&lt;br /&gt;
&lt;br /&gt;
Hier beschrieben ist die Ansteuerung über CUL/CUNO, dessen Firmware für Intertechno erweitert wurde (Danke an Olaf Droegehorn). Momentan ist in CUL/CUNO das SENDEN von Intertechno Funk implementiert. Die Firmware muss mindestens den Stand 1.44 haben (Kontrolle der Version in den FHEM Detaildaten zum [[CUL]]/[[CUNO]]). Die CUL433/CUNO433 haben dabei volle Reichweite, die Versionen CUL868/CUNO868 funktionieren ebenfalls, haben aufgrund der nicht optimalen Antennenlänge und falschen Abstimmung für den Frequenzbereich aber nur eine eingeschränkte Reichweite.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
Die Definition des IT Gerätes in FHEM sieht für &#039;&#039;&#039;alte Geräte&#039;&#039;&#039; so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
define myITSwitch IT &amp;lt;housecode&amp;gt;&amp;lt;group_switch&amp;gt; &amp;lt;on-code&amp;gt; &amp;lt;off-code&amp;gt; [&amp;lt;dimup-code&amp;gt; &amp;lt;dimdown-code&amp;gt;]&lt;br /&gt;
attr myITSwitch IODev CUL_x (CUNO_x)&lt;br /&gt;
attr myITSwitch model itswitch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die weitere Anleitung soll die Bildung der Bitfolge für die Zusammensetzung des Schaltcodes erklären. &lt;br /&gt;
Wichtig zu wissen ist auch, dass es sich um einen 3state code handelt, d.h. jedes Bit kann &#039;&#039;&#039;0,1 oder F&#039;&#039;&#039; sein!&lt;br /&gt;
&lt;br /&gt;
Die selbst &#039;&#039;&#039;lernenden&#039;&#039;&#039; neue &#039;&#039;&#039;Geräte&#039;&#039;&#039; definiert man in FHEM so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; IT &amp;lt;26-Bit Adresse&amp;gt; &amp;lt;1-Bit Gruppen Bit&amp;gt; &amp;lt;4-Bit Gerät&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dabei kann man die 26-Bit Adresse frei wählen, so dass Kollisionen mit Nachbarn sehr unwahrscheinlich werden.&lt;br /&gt;
Einen GRR-3500 der über einen CUL gesteuert werden soll definiert man z.B. so&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
define sw_it_outdoor IT 01010101010101010101010101 0 0000&lt;br /&gt;
attr myITSwitch IODev CUL_0&lt;br /&gt;
attr myITSwitch model itswitch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Danach die {{Taste|CODE}}-Taste am Funkschalter betätigen (die LED blinkt) und über FHEM den Einschaltcode senden.&lt;br /&gt;
&lt;br /&gt;
== Original Intertechno System ==&lt;br /&gt;
&lt;br /&gt;
Durch Kombination von Hauscode und Geräetecode können maximal 256 Geräte verwendet werden. Dann würde allerdings alle Hauscodes belegt, was eventuell zu Störungen mit Nachbarinstallationen führen könnte.&lt;br /&gt;
&lt;br /&gt;
=== Hauscode (die ersten vier Stellen (0-3) ===&lt;br /&gt;
Der Hauscode wird auf dem Drehschalter auf der Rückseite eingestellt und hat die Bezeichnung &#039;&#039;&#039;A-P&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Img_3324_small.png|thumb|Intertechno Schalter]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Drehschalter !! Stelle 0-3&lt;br /&gt;
|-&lt;br /&gt;
| A || 0000&lt;br /&gt;
|-&lt;br /&gt;
| B || F000&lt;br /&gt;
|-&lt;br /&gt;
| C || 0F00&lt;br /&gt;
|-&lt;br /&gt;
| D || FF00&lt;br /&gt;
|-&lt;br /&gt;
| E || 00F0&lt;br /&gt;
|-&lt;br /&gt;
| F || F0F0&lt;br /&gt;
|-&lt;br /&gt;
| G || 0FF0&lt;br /&gt;
|-&lt;br /&gt;
| H || FFF0&lt;br /&gt;
|-&lt;br /&gt;
| I || 000F&lt;br /&gt;
|-&lt;br /&gt;
| J || F00F&lt;br /&gt;
|-&lt;br /&gt;
| K || 0F0F&lt;br /&gt;
|-&lt;br /&gt;
| L || FF0F&lt;br /&gt;
|-&lt;br /&gt;
| M || 00FF&lt;br /&gt;
|-&lt;br /&gt;
| N || F0FF&lt;br /&gt;
|-&lt;br /&gt;
| O || 0FFF&lt;br /&gt;
|-&lt;br /&gt;
| P || FFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gruppen-/Gerätecode (Stelle 4-7) ===&lt;br /&gt;
Der zweite Drehschalter ist mit den Zahlen von 1-16 beschriftet. Das ist eine Zusammensetzung von Gruppe und Gerätecode und ergibt die nächsten 4 Stellen. Die dritte Spalte in der Tabelle zeigt die Zuordnung einer Intertechno YCT-100 / ITS-150 Fernbedienung. Diese ist mit Drehschalter auf der Rückseite (A-P), einem Gruppenschalter (1-4) , und je vier  ein-/aus-Tasten belegt.&lt;br /&gt;
&lt;br /&gt;
[[File:Img_3325_small.png|right|thumb|Intertechno Fernbedienung]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Drehschalter !! Stelle 4-7 !! Fernbedienung Gruppe/Taste&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0000 || 1 - 1&lt;br /&gt;
|-&lt;br /&gt;
| 02 || F000 || 1 - 2&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0F00 || 1 - 3&lt;br /&gt;
|-&lt;br /&gt;
| 04 || FF00 || 1 - 4&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 00F0 || 2 - 1&lt;br /&gt;
|-&lt;br /&gt;
| 06 || F0F0 || 2 - 2&lt;br /&gt;
|-&lt;br /&gt;
| 07 || 0FF0 || 2 - 3&lt;br /&gt;
|-&lt;br /&gt;
| 08 || FFF0 || 2 - 4&lt;br /&gt;
|-&lt;br /&gt;
| 09 || 000F || 3 - 1&lt;br /&gt;
|-&lt;br /&gt;
| 10 || F00F || 3 - 2&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0F0F || 3 - 3&lt;br /&gt;
|-&lt;br /&gt;
| 12 || FF0F || 3 - 4&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 00FF || 4 - 1&lt;br /&gt;
|-&lt;br /&gt;
| 14 || F0FF || 4 - 2&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 0FFF || 4 - 3&lt;br /&gt;
|-&lt;br /&gt;
| 16 || FFFF || 4 - 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Stellen 8-9 (Festwert 0F) ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Die Positionen 8-9 sind immer fest auf &#039;&#039;&#039;0F&#039;&#039;&#039;zu stellen&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stellen 10-11 (Ein/Aus) ===&lt;br /&gt;
Bei den beiden letzten Stellen steht als Codierung für ON = FF und OFF = F0.&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
Drehschalter/Hauscode auf &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; Schalter 1 -&amp;amp;gt; 000000000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 1)&lt;br /&gt;
  Schalter 2 -&amp;amp;gt; 0000F0000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 2)&lt;br /&gt;
  Schalter 3 -&amp;amp;gt; 00000F000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 3)&lt;br /&gt;
  Schalter 4 -&amp;amp;gt; 0000FF000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 4)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drehschalter/Hauscode auf &#039;&#039;&#039;L&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; Schalter 11 -&amp;amp;gt; FF0F0F0F0F FF F0 (entspricht Fernbedienung Gruppe III und Schalter 3)&lt;br /&gt;
  Schalter 16 -&amp;amp;gt; FF0FFFFF0F FF F0 (entspricht Fernbedienung Gruppe IV und Schalter 4)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
komplett für die fhem cfg also z.B. Hauscode A und Gruppe 1 Gerät/Schalter 1 und CUL Bezeichnung CUL1:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; define schalter1 IT 000000000F FF F0&lt;br /&gt;
  attr schalter1 IODev CUL1&lt;br /&gt;
  attr schalter1 model itswitch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Selbstlernende Intertechno Funksteckdosen (z.B. ITR-1500) ===&lt;br /&gt;
Die selbst lernenden Intertechno Funksteckdosen haben ein neues erweitertes Protokoll bei dem ein 32-Bit Wort gesendet wird. Sie sind aber weiterhin kompatibel zum bisherigen 12-Bit Protokoll. In der culfw wird das alte Protokoll mit &amp;quot;Intertechno V1&amp;quot; und das neue mit &amp;quot;Intertechno V3&amp;quot; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
==== Mit altem Protokoll anlernen ====&lt;br /&gt;
{{Randnotiz|RNTyp=Fehl|RNText=Schon aus Gründen der Störsicherheit ist davon abzuraten bei neuen selbst lernenden Intertechno Geräten den alten 12-Bit Code zu verwenden. Dieser wird nur unterstützt um rückwärts kompatibel zu sein.}}&lt;br /&gt;
Zum Anlernen der selbst lernenden Funksteckdosen muss ein gültiger(!) ON-Befehl in den ersten fünf Sekunden nach dem Einstecken der Funksteckdose in eine normalen Steckdose gesendet werden. Die Funksteckdosen haben drei Speicherplätze, so dass man beispielsweise ein ITR-1500 Set zuerst mit der Fernbedienung anlernen und anschließend eigene Codes von FHEM senden lassen kann. Damit man einen gültigen Code sendet, sucht man sich einfach eine beliebige Kombination aus der obigen Tabelle aus (z.B. C-1, C-2 und C-3) und ergänzt entsprechend um die immer identischen Stellen 8 und 9 (0F) und den ON- und OFF-Code (FF/F0).&lt;br /&gt;
Das Senden der Codes von FHEM erfolgt am einfachsten, indem man sich die Steckdosen vorher in der Konfiguration so anlegt, wie man sie haben möchte und anschließend über die Weboberfläche den ON-Befehl gibt.&lt;br /&gt;
&lt;br /&gt;
Mitunter funktioniert das reine Senden des ON Befehls aber nicht, da einige dieser Steckdosen einen längeren ON Befehl benötigen und die Sendedauer bei FHEM/CUL/CUNO nicht beeinflusst werden kann. In diesem Fall nimmt man eine YCT-100 oder ITS-150 Fernbedienung, an der die gewünschte Adresse eingestellt werden kann. Zum Anlernen drückt man nun etwas länger auf den passenden Einschaltknopf, danach kann die Dose von FHEM normal geschaltet werden.&lt;br /&gt;
&lt;br /&gt;
==== Angelernten Code löschen ====&lt;br /&gt;
Hier gibt es zwei Möglichkeiten.&lt;br /&gt;
# Man sendet wie beim Anlernen innerhalb der ersten 5 Sekunden einen OFF-Befehl. Die Funksteckdosen quittiert diesen mit zweimaligem einschalten. Anschließend reagiert sie auf diesen Code nicht mehr.&lt;br /&gt;
# Manche neueren Intertechno Geräte (z.B. GRR-3500) haben eine {{Taste|CODE}}-Taste. Durch kurzes Drücken wird die Funksteckdose für 5 Sekunden in den Betrieb zum Anlernen gesetzt. Hält man diese Taste bis die LED hektisch blinkt, lässt sie dann los und drückt sie noch einmal kurz, so wird der gesamte Speicher für angelernte Codes gelöscht. Die Funksteckdose quittiert das wie üblich durch zweimaliges Einschalten.&lt;br /&gt;
&lt;br /&gt;
==== Mit neuem Protokoll anlernen ====&lt;br /&gt;
Die neuen Funksteckdosen können laut Werbung &#039;&#039;&amp;quot;67 Millionen verschiedene Codes&amp;quot;&#039;&#039;, das sind 26-Bits (2^26 = 67108864). Da hat die Werbung tatsächlich mal untertrieben. Tatsächlich arbeitet das neue Protokoll mit einem 32-Bit Wort. Jede neue Fernbedienung (z.B. ITT-1500) bekommt ab Werk einen fest einprogrammierten (und hoffentlich weltweit eindeutigen) ID-Code aus 26 Bits. Daran hängt sie ein 2-Bit Kommando und eine 4-Bit Geräte bzw. Tastenpaar Nummer:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-style:solid; border-width:4px&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;border-style:solid; border-width:4px&amp;quot; | 26-Bit ID des steuernden Geräts (Fernbedienung)&lt;br /&gt;
 | style=&amp;quot;border-style:solid; border-width:4px&amp;quot; | 2-Bit Kommando &lt;br /&gt;
 | style=&amp;quot;border-style:solid; border-width:4px&amp;quot; | 4-Bit Kanal-ID (Tastenpaar)&lt;br /&gt;
 |-&lt;br /&gt;
|}&lt;br /&gt;
Das 2-Bit Kommando ist ein ON oder OFF Befehl an ein einzelnes Gerät oder eine Gruppe.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Befehl !! Bedeutung&lt;br /&gt;
 |-&lt;br /&gt;
 | 0 0 || Ein Gerät einschalten&lt;br /&gt;
 |-&lt;br /&gt;
 | 0 1 || Ein Gerät ausschalten&lt;br /&gt;
 |-&lt;br /&gt;
 | 1 0 || Alle Geräte (dieser Gruppe) einschalten&lt;br /&gt;
 |-&lt;br /&gt;
 | 1 1 || Alle Geräte (dieser Gruppe) ausschalten&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
Die ITT-1500 hat zwar eine {{Taste|ALL OFF}}-Taste aber keine {{Taste|ALL ON}}.&lt;br /&gt;
Ob das Einschalten als Gruppe generell unterstützt wird ist nicht bekannt.&lt;br /&gt;
Einen gültiger Einschaltbefehl kann man am [[CUL]] z.B. mit diesem Kommando senden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
is01010010101011101000000110010011&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Im Gegensatz zum alten Protokoll (Intertechno V1) wird das Binärwort hier nicht mit 0 und &#039;&#039;&#039;F&#039;&#039;&#039; sondern 0 und &#039;&#039;&#039;1&#039;&#039;&#039; gesendet.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-style:solid; border-width:4px&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;border-style:solid; border-width:4px&amp;quot; | &#039;&#039;&#039;is&#039;&#039;&#039; &#039;&#039;(Sende Intertechno Kommando)&#039;&#039;&lt;br /&gt;
 | style=&amp;quot;border-style:solid; border-width:4px&amp;quot; | &#039;&#039;&#039;01010010101011101000000110&#039;&#039;&#039; &#039;&#039;(Gerätecode Fernbedienung)&#039;&#039;&lt;br /&gt;
 | style=&amp;quot;border-style:solid; border-width:4px&amp;quot; | &#039;&#039;&#039;01&#039;&#039;&#039; &#039;&#039;(Kommando ON)&#039;&#039;&lt;br /&gt;
 | style=&amp;quot;border-style:solid; border-width:4px&amp;quot; | &#039;&#039;&#039;0011&#039;&#039;&#039; &#039;&#039;(Tastenpaar 4)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
|}&lt;br /&gt;
Die culfw unterscheidet anhand der Kommandolänge ob es sich um einen alten (12 Zeichen) oder neuen (32 Zeichen) Intertechno Befehl handelt.&lt;br /&gt;
Genauso unterscheidet das IT-Modul in FHEM die beiden Formate:&lt;br /&gt;
 define &amp;lt;name&amp;gt; IT &amp;lt;10-bit-housecode&amp;gt; &amp;lt;off-code&amp;gt; &amp;lt;on-code&amp;gt; [&amp;lt;dimup-code&amp;gt;] [&amp;lt;dimdown-code&amp;gt;]&lt;br /&gt;
und &lt;br /&gt;
 define &amp;lt;name&amp;gt; IT &amp;lt;26 bit Address&amp;gt; &amp;lt;1 bit group bit&amp;gt; &amp;lt;4 bit unit&amp;gt;&lt;br /&gt;
und setzt das Reading &amp;lt;code&amp;gt;protocol&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;V3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== FLS 100 ==&lt;br /&gt;
[[File:FLS100.jpg|right|thumb|FLS100 - konfiguriert auf IV/3]]&lt;br /&gt;
&lt;br /&gt;
Beim FLS 100 von m-e.de gibt es nur 4 mögliche Einstellungen: &#039;&#039;&#039;I, II, III und IV&#039;&#039;&#039;. Dies entspricht der Gruppe auf der Fernbedienung.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Drehschalter !! Stelle 0-3&lt;br /&gt;
|-&lt;br /&gt;
| I || 0FFF &lt;br /&gt;
|-&lt;br /&gt;
| II || F0FF&lt;br /&gt;
|-&lt;br /&gt;
| III || FF0F&lt;br /&gt;
|-&lt;br /&gt;
| IV || FFF0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die nächsten vier Stellen geben die Geräte ID an; diese ist identisch mit der Taste an der Fernbedienung.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Drehschalter !! Stelle 4-7 !! Fernbedienung Taste&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0FFF || 1&lt;br /&gt;
|-&lt;br /&gt;
| 2 || F0FF || 2&lt;br /&gt;
|-&lt;br /&gt;
| 3 || FF0F || 3&lt;br /&gt;
|-&lt;br /&gt;
| 4 || FFF0 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Beim FLS 100 ist nur die letzte Stelle relevant, mit ON: F oder OFF: 0&lt;br /&gt;
&lt;br /&gt;
== Renkforce RSL366R ==&lt;br /&gt;
Die Renkfoce (Typ RSL366R) Funksteckdosen sind baugleich der oben genannten FLS 100.&lt;br /&gt;
Bei Conrad auch im Set mit Artikel Nummer 1208454 zu finden. Stand 2017-12-03&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen haben sich bei mir als Funktionsfähig erwiesen:&lt;br /&gt;
(Achtung 0FFF0FFF muss auf die Einstellungen am Drehschalter siehe oben angepasst werden)&lt;br /&gt;
Erste 4 Stellen sind der FB Gruppe und die darauf folgenden 4 Stellen sind die Fernbedienungstaste&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; define Renkforce IT 0FFF0FFF FFFF 0000&lt;br /&gt;
  attr model itswitch&lt;br /&gt;
  attr ITrepetition 15&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ITrepetition ist auszuprobieren, wann die Steckdose zuverlässig schaltet. Bei mir war es der Wert 15&lt;br /&gt;
&lt;br /&gt;
Nachteil: Es sind maximal 16 Funksteckdosen dieses Typs einsetzbar.&lt;br /&gt;
Es gibt keinen Rückkanal.&lt;br /&gt;
&lt;br /&gt;
== REV Telecontrol ==&lt;br /&gt;
[[File:Rev-funksteckdose-telecontrol-3500-w-008345.png|right|thumb|REV Telecontrol]]&lt;br /&gt;
&lt;br /&gt;
Die REV Telecontrol haben einen Dreh-Wahlschalter auf der Rückseite, mit dem sich der Hauscode (A - D) und der Gerätecode (1 - 3) bestimmen lässt. &lt;br /&gt;
&lt;br /&gt;
Die Codierung ist dabei:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Hauscode !! Stelle 1-4&lt;br /&gt;
|-&lt;br /&gt;
| A || 1FFF&lt;br /&gt;
|-&lt;br /&gt;
| B || F1FF&lt;br /&gt;
|-&lt;br /&gt;
| C || FF1F&lt;br /&gt;
|-&lt;br /&gt;
| D || FFF1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Gerätecode !! Stelle 5-7&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1FF&lt;br /&gt;
|-&lt;br /&gt;
| 2 || F1F&lt;br /&gt;
|-&lt;br /&gt;
| 3 || FF1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dazu (Stelle 8+9+10) noch drei statische Werte: 0FF.&lt;br /&gt;
&lt;br /&gt;
Der Code für &#039;&#039;&#039;An&#039;&#039;&#039; ist FF, für &#039;&#039;&#039;Aus&#039;&#039;&#039; 00.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
:&amp;lt;code&amp;gt;define My_Switch IT 1FFF1FF0FF FF 00 für A1&amp;lt;/code&amp;gt;&lt;br /&gt;
Erfolgreich getestet mit CULfw V 1.49 CUL868.&lt;br /&gt;
&lt;br /&gt;
== Elro AB440 ==&lt;br /&gt;
=== Möglichkeit 1: zu Intertechno-Codes umdippen ===&lt;br /&gt;
[[File:ELRO-AB440_Funkschalter.jpg|right|thumb|Élro AB440 Funkschalter]]&lt;br /&gt;
&lt;br /&gt;
Günstige ELRO Funkschalter/Dimmer der Serie 440 lassen sich auch problemlos auf Intertechno Codierung &amp;quot;umdippen&amp;quot; und damit voll kompatibel mit allen möglichen A-P / 1-16 Intertechno Schaltcodes von FHEM aus nutzen. Dazu müssen die Dipschalter-Stellungen entsprechend Intertechno umgerechnet und gesetzt werden (1=ON, 0=OFF). &lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Intertechno  !! Elro Hauscode&amp;lt;br&amp;gt;1234  !! Elro Gerätecode&amp;lt;br&amp;gt;5ABCDE &lt;br /&gt;
|-&lt;br /&gt;
| A1  || 1111 || 111110 &lt;br /&gt;
|-&lt;br /&gt;
| A2  || 1111 || 011110 &lt;br /&gt;
|-&lt;br /&gt;
| A3  || 1111 || 101110 &lt;br /&gt;
|-&lt;br /&gt;
| A4  || 1111 || 001110 &lt;br /&gt;
|-&lt;br /&gt;
| A5  || 1111 || 110110 &lt;br /&gt;
|-&lt;br /&gt;
| A6  || 1111 || 010110 &lt;br /&gt;
|-&lt;br /&gt;
| A7  || 1111 || 100110 &lt;br /&gt;
|-&lt;br /&gt;
| A8  || 1111 || 000110 &lt;br /&gt;
|-&lt;br /&gt;
| A9  || 1111 || 111010 &lt;br /&gt;
|-&lt;br /&gt;
| A10  || 1111 || 011010 &lt;br /&gt;
|-&lt;br /&gt;
| A16  || 1111 || 000010 &lt;br /&gt;
|-&lt;br /&gt;
| C1  || 1011 || 111110 &lt;br /&gt;
|-&lt;br /&gt;
| C2  || 1011 || 011110 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Weitere Erklärungen sind z.B. im [http://isn-systems.com/tools/it2elro Tool] der Fa. ISN-systems online verfügbar (berechnen lassen etc.).&lt;br /&gt;
&lt;br /&gt;
Einziger Nachteil: Die originale Elro Fernbedienung funktioniert dann nicht mehr uneingeschränkt mit den Funkschaltern (eine Intertechno Fernbedienung funktioniert uneingeschränkt). Wenn man den Hauscode an der Fernbedienung einstellt, kann man durch Drücken von z.T. mehreren Tasten gleichzeitig auch Intertechno schalten. Das ist aber nur was für den Notfall oder für Handakrobaten.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;15/16 -&amp;amp;gt; D&lt;br /&gt;
 13/14 -&amp;amp;gt; A+D&lt;br /&gt;
 11/12 -&amp;amp;gt; B+D&lt;br /&gt;
 09/10 -&amp;amp;gt; A+B+D&lt;br /&gt;
 07/08 -&amp;amp;gt; C+D&lt;br /&gt;
 05/06 -&amp;amp;gt; A+C+D&lt;br /&gt;
 03/04 -&amp;amp;gt; B+C+D&lt;br /&gt;
 01/02 -&amp;amp;gt; A+B+C+D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Möglichkeit 2: aus der vorhanden DIP-Schalterstellung den entsprechenden 10-digit InterTechno Code bestimmen ===&lt;br /&gt;
Das ist prinzipiell ganz einfach. Hat man folgende DIP-Schalter-Stellung so muss man von links nach rechts einfach für jeden DIP gleich &amp;quot;ON&amp;quot; eine &amp;quot;0&amp;quot; und für &amp;quot;OFF&amp;quot; ein &amp;quot;F&amp;quot; definieren. Für die dargestellte DIP-Einstellung ergibt sich damit der darunterstehende InterTechno Code:&lt;br /&gt;
&lt;br /&gt;
[[File:ELRO_0100101111.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0F00F0FFFF&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analog dazu ergeben sich für den gleichen Hauscode (Schalter 1-5) folgende Codes für die Funksteckdosen B bis E, wobei die Dose E mit der Originalfernbedienung nicht adressierbar ist, sich mit FHEM aber wunderbar schalten lässt.&lt;br /&gt;
&lt;br /&gt;
[[File:ELRO_0100110111.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0F00FF0FFF&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ELRO_0100111011.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0F00FFF0FF&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ELRO_0100111101.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0F00FFFF0F&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ELRO_0100111110.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0F00FFFFF0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dazu noch die Codes für AN = FF und AUS = F0 schaut eine vollständige Definition eines ELRO440 Funkschalters dann bsw. so aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; define ELRO_10110_A IT 0F00F0FFFF FF F0&lt;br /&gt;
  attr ELRO_10110_A IODev CUL_0&lt;br /&gt;
  attr ELRO_10110_A alias Stehlampe&lt;br /&gt;
  attr ELRO_10110_A fp_Grundriss 340,50,1,Stehlampe&lt;br /&gt;
  attr ELRO_10110_A group Schalter&lt;br /&gt;
  attr ELRO_10110_A model itswitch&lt;br /&gt;
  attr ELRO_10110_A room Wohnzimmer&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:b1-Funksteckdose-von-Toom.jpg|right|thumb|b1 Funksteckdose von Toom]]&lt;br /&gt;
== b1 / Toom ==&lt;br /&gt;
Das &amp;quot;Funksteckdosen-Set&amp;quot; der Marke b1 aus dem Toom-Baumarkt (3 Funksteckdosen + 1 Fernbedienung mit 4x ein/aus) funktioniert exakt wie ELRO, auch die DIP-Schalter sind genauso belegt. &lt;br /&gt;
&lt;br /&gt;
== Wetekom/Westfalia ==&lt;br /&gt;
[[File:Westfalia-Funksteckdose.jpg|right|thumb|Westfalia Funksteckdose ZTC-S316A.]]&lt;br /&gt;
Der eingestellte Hauscode ist F00F0FFF0F.&lt;br /&gt;
&lt;br /&gt;
In den Westfalia-Baumärkten gibt es Funksteckdosen mit Westfalia-Branding. Auf der Bedienungsanleitung steht aber Wetekom.&lt;br /&gt;
&lt;br /&gt;
Die Funksteckdosen selbst haben zehn DIP-Switches: 1234FEDCBA, während die Fernbedienung nur sechs hat: ABCDEF. Damit die Fernbedienung mit den Funksteckdosen funktioniert, darf man nur einen der DIP-Switches 1234 pro Funksteckdose auf ON schalten.&lt;br /&gt;
&lt;br /&gt;
Die Schaltung der DIP-Switches ABCDEF4321 entspricht direkt und in dieser Reihenfolge (also andersrum als direkt an der Funksteckdose) dem Hauscode und zwar entspricht ein Switch auf OFF einem F im Hauscode und ein Switch auf ON einer 0 im Hauscode.&lt;br /&gt;
&lt;br /&gt;
Die Steckdosen werden dann mit 01 ein- und mit 10 ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
define wf_steckdose IT F00F0FFF0F 01 10&lt;br /&gt;
&lt;br /&gt;
== Pollin Funksteckdosen ==&lt;br /&gt;
&lt;br /&gt;
Vom Aussehen sind die Steckdosen von Pollin (z.B. 3fach Set 550666) mit den Westfalia ZTC identisch, aber:&lt;br /&gt;
&lt;br /&gt;
* die DIP Schalter sind beschriftet von 0 bis 10;&lt;br /&gt;
* der Adresscode entspricht dem invertierten ELRO 440 Code -&amp;gt;also  (0=ON, 1=OFF)&lt;br /&gt;
* der Code für &amp;quot;An&amp;quot; ist 0F, für &amp;quot;Aus&amp;quot; F0&lt;br /&gt;
&lt;br /&gt;
Beispiel für Adresse C2:&lt;br /&gt;
&lt;br /&gt;
define IT_C2 IT 0F00F0000F 0F F0&lt;br /&gt;
&lt;br /&gt;
== me micro-electric AS 73 ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Me_AS_73.JPG|right|thumb|micro-electric Funksteckdose AS 73]]&lt;br /&gt;
&lt;br /&gt;
Die micro-electric Funksteckdosen haben 10 DIP-Schalter: 123456ABCD.&lt;br /&gt;
&lt;br /&gt;
Der Hauscode wird an Sender und Steckdose mit 1-6 eingestellt, der Empfängercode A-D entspricht den Kanälen auf dem Handsender.&lt;br /&gt;
&lt;br /&gt;
DIP-Schalterstellung OFF entspricht F und ON entspricht 0.&lt;br /&gt;
&lt;br /&gt;
Die Steckdosen werden mit F0 ein- und mit 0F ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
Empfängercodes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Kanal  !! Position 7-10&lt;br /&gt;
|- &lt;br /&gt;
| A  || 0FFF  &lt;br /&gt;
|-&lt;br /&gt;
| B  || F0FF  &lt;br /&gt;
|-&lt;br /&gt;
| C  || FFF0 (Achtung: bei C und D sind die Codes vertauscht)  &lt;br /&gt;
|-&lt;br /&gt;
| D  || FF0F  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Schalter_ME_A IT 0F0F000FFF F0 0F&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Schalter_ME_A IODev CUL1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Schalter_ME_A model itswitch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conrad / McPower Funkschaltset 3+1 ==&lt;br /&gt;
Dieses Funkschaltset wird unter mehreren Namen in verschiedenen Bau- und Heimwerkermärkten sowie bei Conrad (Best Nr. 640475 - 62) vertrieben. Teilweise auch mit unterschiedlichen Schaltleistungen.&lt;br /&gt;
Die Konfiguration funktioniert genauso wie beim [[Intertechno_Code_Berechnung#FLS_100|FLS100]]&lt;br /&gt;
&lt;br /&gt;
== CMI / OBI / LUX IP44-Funkschaltset 2+1 ==&lt;br /&gt;
[[File:RCS_14G_Funksteckdose_Obi_klein.png|right|thumb|Rückansicht der OBI / Lux Funksteckdose]]&lt;br /&gt;
Dieses Set wird u.a. bei OBI verkauft, als Hersteller wird die Emil Lux GmbH angegeben. Typennummer RCS-14G, Artikel Nummer 308555&lt;br /&gt;
Die Steckdosen sind IP44 geschützt und damit auch für den Außeneinsatz geeignet.&lt;br /&gt;
Die Steckdosen verfügen lediglich über einen Kanal-Schalter von 1-4. Diese Kanal-Nummern korrespondieren mit der folgenden Übersetzung:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Kanal  !! Code (Stelle 1-10)&lt;br /&gt;
|- &lt;br /&gt;
| 1  || 000FF0F0FF  &lt;br /&gt;
|-&lt;br /&gt;
| 2  || 000FFF00FF &lt;br /&gt;
|-&lt;br /&gt;
| 3 || 000F0FF0FF   &lt;br /&gt;
|-&lt;br /&gt;
| 4  || 0000FFF0FF  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Steckdosen werden dann mit FF ein- und mit F0 ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Schalter_OBI_Code_1 IT 000FF0F0FF FF F0&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Schalter_OBI_Code_1 IODev CUL1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Schalter_OBI_Code_1 model itswitch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Noch nicht aufgeführte Geräte ==&lt;br /&gt;
Wer ein Intertechno-ähnliches Gerät besitzt, das in dieser Liste noch nicht aufgeführt ist, muss die Kodierung selbst bestimmen. Dazu gibt es verschiedene Möglichkeiten, die in diesem Abschnitt aufgeführt werden. Die Ergebnisse bitte hier eintragen, um Nachfolgern die Arbeit zu ersparen!&lt;br /&gt;
&lt;br /&gt;
=== Audio-Eingang zur Messung ===&lt;br /&gt;
Hier wird die Fernbedienung oder der Empfänger mit einer entsprechenden Schaltung an den Mikrofon-Eingang eines Rechners angeschlossen und mit einem Audio-Programm werden die Signalverläufe aufgenommen. Diese Methode wird [http://avr.börke.de/E-Funk.htm hier] näher erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Platine analysieren ===&lt;br /&gt;
[[File:Westfalia-Funkfernbedienung-hinten.jpg|right|thumb|Platine der Westfalia Funkfernbedienung ZTC-TC von hinten.]]&lt;br /&gt;
[[File:Westfalia-Funkfernbedienung-vorne.jpg|right|thumb|Platine der Westfalia Funkfernbedienung ZTC-TC von vorne.]]&lt;br /&gt;
&lt;br /&gt;
Platine der Fernbedienung oder des Empfängers betrachten und so die Beschaltung des Decoder/Encoder Chips ermitteln. Bei der Wetekom-Fernbedienung wird beispielsweise der Chip LP801b verwendet, der funktional identisch zum PT2262 ist. Im [http://www.escol.com.my/Datasheets_specs/pt2262_1.pdf Datenblatt des PT2262] kann man dann die Beschaltung nachsehen. Nun betrachtet man den Verlauf der Leiterbahnen auf der Platine, um die Beschaltung des Chips zu ermitteln. So kann man beispielsweise bei der Wetekom-Fernbedienung sehen, dass die DIP-Switches A bis F auf die Eingänge A0 bis A5 geschaltet sind. Außerdem sieht man, mit welchen Eingängen die einzelnen Taster verbunden sind.&lt;br /&gt;
&lt;br /&gt;
Nun kann man messen, zwischen welchen Chip-Eingängen und Batteriepolen eine Spannung anliegt, bzw. (ohne Batterie) zwischen welchen Chip-Eingängen und Batteriepolen es einen Durchgang gibt, um zu ermitteln, wie die DIP-Switches schalten. Im Fall der Wetekom-Fernbedienung liegt keine Spannung zwischen den Eingängen und den beiden Batteriepolen an, wenn die DIP-Switches auf OFF stehen: Der Eingang liegt also auf F (Float). Wenn die DIP-Switches auf ON stehen, liegt nur eine Spannung zwischen dem Pluspol der Batterie und dem Eingang an, es gibt also einen Durchgang zwischen dem Minuspol und dem Eingang, so dass der Eingang auf V_SS liegt und damit 0 eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Bei den Eingängen D0 und D1 sieht man, dass der Batterie-Pluspol immer über einen Widerstand mit dem Dateneingang verbunden ist, also normalerweise 1 anliegt. Ist aber ein Ein-Taster gedrückt, wird der Eingang D1 direkt mit dem Minuspol der Batterie verbunden, bei den Aus-Tastern der Eingang D0 (die Verbindung der Aus-Taster ist auf den Bildern nicht besonders gut zu erkennen). Durch diese Verbindung wird der Eingang auf V_SS heruntergezogen und damit ist 0 eingestellt.&lt;br /&gt;
&lt;br /&gt;
=== Mit [[CUL]] im Debug-Modus Rohsignale empfangen und analysieren ===&lt;br /&gt;
* Wurde im {{Link2Forum|Topic=5599|LinkText=Forum}} diskutiert.&lt;br /&gt;
Ein 433MHz CUL kann mit dem Befehl &amp;lt;code&amp;gt;X67&amp;lt;/code&amp;gt; Intertechno Kommandos mitlesen.&lt;br /&gt;
Allerdings funktioniert das bei der &amp;quot;üblichen&amp;quot; Firmware nur lückenhaft.&lt;br /&gt;
Dazu wurde bereits eine spezielle Variante der culfw entwickelt (siehe {{Link2Forum|Topic=24436|Message=105|LinkText=Forum}}).&lt;br /&gt;
Die Ausgaben sind aber dann als doppelt so langes Binärwort im Hex-Format.&lt;br /&gt;
Man muss quasi jedes zweite Bit streichen, da die einzelnen Bits als steigende bzw. fallende Flanken übertragen werden.&lt;br /&gt;
Man kann aber damit auch einer neuen ITT-1500 ihre Kommandos und vor allem ihre 26-Bit ID entlocken.&lt;br /&gt;
&lt;br /&gt;
==== Mit CUL868 433MHz mitlesen ====&lt;br /&gt;
Man kann auch mit der 868MHz Version des CUL Fernbedienungen von Intertechno mitlesen.&lt;br /&gt;
Dazu die gewünschte Trägerfrequenz 433.92MHz * 2^16 / 26MHz = 1093745 = 0x10B071 als 24-Bit Teiler in die Register &amp;lt;code&amp;gt;FREQ[2-0]&amp;lt;/code&amp;gt; schreiben und einen Reset ausführen.&lt;br /&gt;
 W0F10&lt;br /&gt;
 W10B0&lt;br /&gt;
 W1171&lt;br /&gt;
 B&lt;br /&gt;
Danach kann man mit &amp;lt;code&amp;gt;X67&amp;lt;/code&amp;gt; auf der Frequenz mitlesen. Mit &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; kann der EEPROM wieder auf den Default 0x21656A, 868.30MHz gestellt werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Intertechno]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:433MHz]]&lt;/div&gt;</summary>
		<author><name>Plaicy</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHT80b&amp;diff=33726</id>
		<title>FHT80b</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHT80b&amp;diff=33726"/>
		<updated>2020-08-27T17:33:23Z</updated>

		<summary type="html">&lt;p&gt;Plaicy: fix typo in Urlaub&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=FHT80b.jpg&lt;br /&gt;
|Bildbeschreibung=FHT80b&lt;br /&gt;
|HWProtocol=FHT&lt;br /&gt;
|HWType=Empfänger&lt;br /&gt;
|HWCategory=FHT&lt;br /&gt;
|HWComm=868,35 MHz&lt;br /&gt;
|HWChannels=1&lt;br /&gt;
|HWVoltage=3 V&lt;br /&gt;
|HWPowerConsumption=(ca. 2 Jahre)&lt;br /&gt;
|HWPoweredBy=2x AA&lt;br /&gt;
|HWSize=100 x 60 x 60 mm&lt;br /&gt;
|HWDeviceFHEM=11_FHT8V.pm&lt;br /&gt;
|HWManufacturer=ELV / eQ-3}}&lt;br /&gt;
&lt;br /&gt;
Der [[FHT80b]] ist ein programmierbarer Raumthermostat, der bis zu 8 Stellantriebe [[FHT8v]] steuern kann.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung: Dieses Gerät ist abgekündigt (wird nicht mehr hergestellt).&#039;&#039;&#039;{{Link2Forum|Topic=60219}}&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Lokal programmierbare Tages- und Nachttemperatur, die pro Tag mit 4 Schaltpunkten programmiert werden kann.&lt;br /&gt;
Zusätzliche Anbindung eines Tür/Fensterkontaktes [[FHT80TF]] zur Absenkung der Temperatur auf separat einstellbaren Wert bei offenem Fenster (windowopen-temp). &lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
!  Parameter &lt;br /&gt;
!  Wertbeispiel &lt;br /&gt;
!  Erklärung&lt;br /&gt;
|- &lt;br /&gt;
| actuator &lt;br /&gt;
|  0% &lt;br /&gt;
|  Position des Stellantriebes in&amp;amp;#160;%&lt;br /&gt;
|- &lt;br /&gt;
| battery &lt;br /&gt;
|  ok &amp;lt;br /&amp;gt; low&lt;br /&gt;
|  Ladezustand der Batterien&lt;br /&gt;
|- &lt;br /&gt;
| mode         &lt;br /&gt;
|  auto &amp;lt;br /&amp;gt; manual &amp;lt;br /&amp;gt; holiday_short &amp;lt;br /&amp;gt;&lt;br /&gt;
|  Funktionsmodus (auto, manuell oder Urlaub/Party)&lt;br /&gt;
|- &lt;br /&gt;
| state      &lt;br /&gt;
|  measured-temp: 20.9 &lt;br /&gt;
|  Ist-Temperatur in ° (C oder F in FHT80B wählbar)&lt;br /&gt;
|- &lt;br /&gt;
| desired-temp &lt;br /&gt;
|  21.0  &lt;br /&gt;
|  Solltemperatur in ° (C oder F in FHT80B wählbar)&lt;br /&gt;
|- &lt;br /&gt;
| holiday1 &lt;br /&gt;
|  126 &lt;br /&gt;
|  Endzeit der Urlaubs-/Partyfunktion. Uhrzeit in Minuten seit 00:00 geteilt 10 (im Beispiel 21:00 Uhr)&lt;br /&gt;
|- &lt;br /&gt;
| holiday2 &lt;br /&gt;
|  31 &lt;br /&gt;
|  Tag im Monat an der die Urlaubs-/Partyfunktion endet &lt;br /&gt;
|- &lt;br /&gt;
| lowtemp &lt;br /&gt;
|  ok &amp;lt;br /&amp;gt; warn&lt;br /&gt;
|  Untertemperatur-Alarm: Im Raum wird der Temperatur-Sollwert nicht erreicht&lt;br /&gt;
|- &lt;br /&gt;
| manu-temp &lt;br /&gt;
| &lt;br /&gt;
|  Solltemperatur bei Manuell-Modus&lt;br /&gt;
|- &lt;br /&gt;
| night-temp  &lt;br /&gt;
| &lt;br /&gt;
|  Solltemperatur bei Absenkung&lt;br /&gt;
|- &lt;br /&gt;
| warnings &lt;br /&gt;
|  none &amp;lt;br /&amp;gt; Battery low &amp;lt;br /&amp;gt; Temperature too low &amp;lt;br /&amp;gt; Fault on window sensor&lt;br /&gt;
|  Auflistung der Fehler&lt;br /&gt;
|- &lt;br /&gt;
| window     &lt;br /&gt;
|  closed &amp;lt;br /&amp;gt; open &lt;br /&gt;
|  Statusmeldungen vom FHT80-TF&lt;br /&gt;
|- &lt;br /&gt;
| windowsensor &lt;br /&gt;
|  ok &amp;lt;br /&amp;gt;  fault&lt;br /&gt;
| fault, wenn ein angemeldeter Fenstermelder nicht erreicht werden kann.&lt;br /&gt;
|- &lt;br /&gt;
| windowopentemp &lt;br /&gt;
| 9.0 &lt;br /&gt;
|  Solltemperatur bei offenem Fenster&lt;br /&gt;
|- &lt;br /&gt;
| year &amp;lt;br /&amp;gt;&lt;br /&gt;
month&amp;lt;br /&amp;gt;&lt;br /&gt;
day&amp;lt;br /&amp;gt;&lt;br /&gt;
hour&amp;lt;br /&amp;gt;&lt;br /&gt;
minute&lt;br /&gt;
| &lt;br /&gt;
|  Zeitangaben für interne Uhr&lt;br /&gt;
|- &lt;br /&gt;
| mon-from1 &amp;lt;br /&amp;gt;&lt;br /&gt;
mon-from2 &amp;lt;br /&amp;gt;&lt;br /&gt;
mon-to1 &amp;lt;br /&amp;gt;&lt;br /&gt;
mon-to2 &amp;lt;br /&amp;gt;&lt;br /&gt;
tue-from1 &amp;lt;br /&amp;gt;&lt;br /&gt;
tue-from2 &amp;lt;br /&amp;gt;&lt;br /&gt;
tue-to1 &amp;lt;br /&amp;gt;&lt;br /&gt;
tue-to2 &amp;lt;br /&amp;gt;&lt;br /&gt;
wed-from1 &amp;lt;br /&amp;gt;&lt;br /&gt;
wed-from2 &amp;lt;br /&amp;gt;&lt;br /&gt;
wed-to1 &amp;lt;br /&amp;gt;&lt;br /&gt;
wed-to2 &amp;lt;br /&amp;gt;&lt;br /&gt;
thu-from1 &amp;lt;br /&amp;gt;&lt;br /&gt;
thu-from2 &amp;lt;br /&amp;gt;&lt;br /&gt;
thu-to1 &amp;lt;br /&amp;gt;&lt;br /&gt;
thu-to2 &amp;lt;br /&amp;gt;&lt;br /&gt;
fri-from1 &amp;lt;br /&amp;gt;&lt;br /&gt;
fri-from2 &amp;lt;br /&amp;gt;&lt;br /&gt;
fri-to1 &amp;lt;br /&amp;gt;&lt;br /&gt;
fri-to2 &amp;lt;br /&amp;gt;&lt;br /&gt;
sat-from1 &amp;lt;br /&amp;gt;&lt;br /&gt;
sat-from2 &amp;lt;br /&amp;gt;&lt;br /&gt;
sat-to1 &amp;lt;br /&amp;gt;&lt;br /&gt;
sat-to2 &amp;lt;br /&amp;gt;&lt;br /&gt;
sun-from1 &amp;lt;br /&amp;gt;&lt;br /&gt;
sun-from2 &amp;lt;br /&amp;gt;&lt;br /&gt;
sun-to1 &amp;lt;br /&amp;gt;&lt;br /&gt;
sun-to2 &lt;br /&gt;
|  06:00 &lt;br /&gt;
|  Angabe von Schaltzeiten im Format HH:MM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Vor dem Einsatz muss der FHT80b mit der Zentrale (z.B. CUL) gepairt werden. Geschieht dies nicht, können nach einer Definition in FHEM zwar Daten des FHT80b empfangen werden (z.&amp;amp;nbsp;B. Raumtemperatur), es können jedoch keine Befehle gesendet werden. Zum pairen den FHT80b in Sonderfunktionen &amp;quot;cENT&amp;quot; auf &amp;quot;n/a&amp;quot; stellen, danach sofort einen Befehl (egal welchen) an die FHT80b senden. Wenn ca. zwei Minuten später Sonderfunktion cENT auf &amp;quot;ON&amp;quot; steht, war das Pairing erfolgreich. &lt;br /&gt;
&lt;br /&gt;
Weitere Hinweise: [[FHT mit RFR CUL pairen]]&lt;br /&gt;
&lt;br /&gt;
Außerdem muss das FHT per Hand oder Autocreate angelegt werden. Die Adresse des FHT wird beim Anlegen mit Autocreate in FHEM hexadezimal angegeben, im Gerät jedoch dezimal. Dabei muss die Adresse paarweise umgerechnet werden.  Beispiel: FHEM habe ein FHT mit der Adresse 162c angelegt. Dies entspricht dann&lt;br /&gt;
 hex 16 = 22 dez&lt;br /&gt;
 hex 2c = 44 dez&lt;br /&gt;
dem FHT mit der am FHT eingestellten Adresse 2244.&lt;br /&gt;
Genauso gut kann man aber auch eine am FHT eingestellte Adresse nach der selben paarweisen Methode in Hex umrechnen und in FHEM das FHT dann per Hand anlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das FHT80b akzeptiert Befehle vom FHZ1X00 (oder CUL/CUN) nur alle 115+x Sekunden (x&amp;amp;nbsp;=&amp;amp;nbsp;0.5*letztes Byte des FHT-Hauscodes (auch &#039;&#039;FHT-ID&#039;&#039; genannt), Beispiel: FHT-ID 1234, Sendeintervall = 115+0,5*4 = 117 Sekunden)&lt;br /&gt;
Praktisch ergeben sich so ca. zwei Minuten.&lt;br /&gt;
Wenn man also mit FHEM z.B. fünf desired-temp Wechsel sendet, so wird es selbst unter optimalen Bedingungen 9-10 Minuten dauern, bis der letzte ausgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Dies muss insbesondere beim Debuggen von Automationszenarien berücksichtigt werden. Nicht absetzbare Kommandos werden im einem Puffer der FHZ1x00/CUL/CUN gespeichert, obwohl sie im FHEM Log als abgesetzt erscheinen. Bei größeren Installationen kann auch der Puffer überlaufen ([[EOB]] Fehlermeldung im FHEM Log). Die Puffer sind unterschiedlich gross. Am kleinsten ist er bei den FHZ1x00 mit ca. 40 Byte, was für ca. acht FHT Befehle reicht. Am grössten ist er im CULv3 oder CUN mit 200 Bytes, das reicht für ca. 40 Befehle.&lt;br /&gt;
&lt;br /&gt;
Bei zu kleinem Puffer bietet FHEM die Möglichkeit, einen Softpuffer (fhtsoftbuffer) zu konfigurieren (dieser wirkt jedoch nur bei FHZ1X00PC Zentralen). Insgesamt ist fhtsoftbuffer nur dann sinnvoll einsetzbar, wenn die Funklage an sich gut ist und der Puffer zügig abgearbeitet wird. Softbuffer sollte &#039;&#039;&#039;nicht&#039;&#039;&#039; eingesetzt werden, wenn die Übertragung der FHT Befehle gestört ist, da sich dann schnell sehr lange Befehlsketten im Puffer aufbauen können, deren Abarbeitung  sehr viel Zeit in Anspruch nehmen kann. Dies kann dazu führen, dass Kommandos an FHTs erst Stunden später ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Um mehr Befehle an ein FHT80b senden zu können, können bis zu 8 Befehle zusammengefasst werden, diese belegen dann nur einen &amp;quot;Zeitslot&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
:&amp;lt;code&amp;gt;set heizung_wohn desired-temp 20.5 day-temp 19.0 night-temp 16.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;set hzg_WC mon-from1 07:00 mon-to1 10:00 mon-from2 14:00 mon-to2 23:00&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Kommunikation des FHT80b mit den Stellantrieben und dem Türkontakt erfolgt ebenso in Zeitabständen von ca. zwei Minuten. In den Pausen sind die Sender und Empfänger von FHT80b und FHT8v abgeschaltet, um Batteriestrom zu sparen.&lt;br /&gt;
&lt;br /&gt;
Die Übermittlung der aktuellen Temperaturdaten an die Zentrale (FHZ, [[CUN]]) erfolgt alle 15 Minuten.&lt;br /&gt;
&lt;br /&gt;
Die Kommunikation mit der Zentrale ist bidirektional, d.h. die Funkzentrale sendet auch Daten an die FHT80b zurück (insbesondere Acknowledge Meldungen etc). Dies führt dazu, dass im Zusammenhang mit der Sendzeitbegrenzung die Anzahl der [[Maximal nutzbare Geräte|maximal nutzbaren Geräte]] begrenzt ist. Theoretisch lassen sich bis zu 17, in der Praxis eher nur ca. 10 FHT80b sinnvoll mit einer Zentrale steuern.&lt;br /&gt;
&lt;br /&gt;
== Verschiedene Betriebsarten mit FHEM ==&lt;br /&gt;
Da das FHT80 selbst ein Heizprogramm speichern und daher eigentlich auch autark arbeiten kann, stellt sich die Frage, wie FHT80 am Besten in FHEM integriert werden sollte. Es gibt dazu drei wesentliche Szenarien:&lt;br /&gt;
&lt;br /&gt;
* das FHT80 heizt nur über seine eigenen Heizprogramme, steht also im Automatik Modus. Diese werden jedoch nicht umständlich am FHT80 selber einprogrammiert sondern über FHEM gesetzt. Auch alle gewünschten Änderungen werden über eine Anpassung der im FHT gespeicherten Programme und Setzen von day-temp und night-temp realisiert. Vorteil: Volle Funktionalität auch ohne FHEM, daher ausfallsicher. Nachteil: Änderungen erzeugen hohe Funklast, da ganze Wochenprogramme übertragen werden müssen. Führt bei mehr als fünf bis sechs FHTs idR. zu [[EOB]] und [[LOVF]] Problemen. Außerdem: Beschränkung auf die FHT80 typisch geringe Zahl von Schaltpunkten (vier pro Tag), mehrstufige Temperaturänderungen sind umständlich. Abhängigkeiten in FHEM (Anwesenheitskontrolle, Bedingungen wie Nutzungserkennung durch Bewegungssensoren etc.) sind schwerer umsetzbar. &lt;br /&gt;
&lt;br /&gt;
* das FHT80 heizt über seine eigenen Heizprogramme, steht also im Automatik Modus. Zusätzlich sendet FHEM z.B. desired-temp Meldungen und greift so in das Heizprofil ein. Vorteil: Grundfunktionalität auch ohne FHEM, daher ausfallsicher: Das Wochenprogramm des FHT80 wird als Grundprogramm und Fallback genutzt. Zusätzliche Heizpunkte oder höhere/niedrigere Temperaturen werden durch FHEM gesteuert. Geringere Funklast, sofern das Grundprogramm selten geändert wird. Beliebige Schaltpunkte, beliebige Temperaturänderungen leicht einstellbar. Nachteil: Komplex. Das Heizverhalten hängt sowohl vom lokalen Programm im FHT80 ab, als auch von Kommandos die FHEM sendet. Das macht die Steuerung  unübersichtlich. Problematisch ist insbesondere, wenn lokale Schaltpunkte kurz vorher gesendete FHEM Kommandos negieren. Dies macht z.B. das Herunterfahren der Heizung bei ungeplanter Abwesenheit schwierig.&lt;br /&gt;
&lt;br /&gt;
* das FHT80 wird in den manuellen Mode geschaltet und nur über FHEM mittels desired-temp Kommandos gesteuert. Vorteil: Da FHEM volle Kontrolle hat, einfache Umsetzung von Abhängigkeiten (Anwesenheitskontrolle, Bedingungen wie Nutzungserkennung durch Bewegungssensoren etc.). Beliebige Schaltpunkte, beliebige Temperaturänderungen leicht einstellbar. Unkomplex: Temperatur hängt nur vom letzt-gesendeten desired-temp Kommando ab. Nachteil: Bei Ausfall von FHEM wird das FHT80 quasi funktionslos und hält nur die letzte eingestellte Temperatur. Es könnten allerdings im FHT gespeicherte Heizprogramme durch manuelles Umschalten am FHT80 auf den Automatikmodus (Tastendruck) aktiviert werden.&lt;br /&gt;
&lt;br /&gt;
Da das FHT80 auch per FHEM-Befehl zwischen manuellem und automatischem Modus umgestellt werden kann, sind auch Mischformen speziell zwischen den letzten beiden Varianten einsetzbar. Dies wird z.B. im Code Snippet [[FHT80b Automatik setzen]] genutzt.&lt;br /&gt;
&lt;br /&gt;
== Log-Auszug ==&lt;br /&gt;
FHT80b sendet ca. alle zwei Minuten Steuerbefehle an ggf. angeschlossene Ventilstellantriebe. Der einzustellende Wert liegt zwischen 0% und 100% und wird von FHT80b auf Basis der am Gerät eingestellten Solltemperatur und der vom Gerät gemessenen Ist-Temperatur berechnet:&lt;br /&gt;
&lt;br /&gt;
 FHT &amp;amp;lt;device-name&amp;amp;gt; actuator: 0%&lt;br /&gt;
&lt;br /&gt;
Außerdem sendet FHT80b ca. 4 mal pro Stunde folgenden Statusbericht:&lt;br /&gt;
&lt;br /&gt;
 FHT &amp;amp;lt;device-name&amp;amp;gt; actuator: 0%&lt;br /&gt;
 FHT &amp;amp;lt;device-name&amp;amp;gt; measured-temp: 23.1 (Celsius)&lt;br /&gt;
 FHT &amp;amp;lt;device-name&amp;amp;gt; battery: ok&lt;br /&gt;
 FHT &amp;amp;lt;device-name&amp;amp;gt; lowtemp: ok&lt;br /&gt;
 FHT &amp;amp;lt;device-name&amp;amp;gt; window: closed&lt;br /&gt;
 FHT &amp;amp;lt;device-name&amp;amp;gt; windowsensor: ok&lt;br /&gt;
 FHT &amp;amp;lt;device-name&amp;amp;gt; warnings: none&lt;br /&gt;
&lt;br /&gt;
Die dazu nötige bidirektionale Kommunikation kann mit FHEM &lt;br /&gt;
mitprotokolliert werden (&amp;quot;set CUL raw X61&amp;quot; vorher nicht vergessen). Hier ein &lt;br /&gt;
beispielhafter Mitschnitt: &lt;br /&gt;
&lt;br /&gt;
 2008-09-28 13:04:18 FHT wz actuator: 0% &lt;br /&gt;
 2008-09-28 13:04:18 FHT wz actuator: 0% &lt;br /&gt;
 2008-09-28 13:04:18 FHT wz start-xmit: 17 &lt;br /&gt;
 2008-09-28 13:04:18 FHT wz FHZ:start-xmit: 17 &lt;br /&gt;
 2008-09-28 13:04:19 FHT wz measured-low: 21.9 (Celsius) &lt;br /&gt;
 2008-09-28 13:04:19 FHT wz FHZ:measured-low: 21.9 (Celsius) &lt;br /&gt;
 2008-09-28 13:04:19 FHT wz measured-high: 0 &lt;br /&gt;
 2008-09-28 13:04:19 FHT wz FHZ:measured-high: 0 &lt;br /&gt;
 2008-09-28 13:04:19 FHT wz ack: 0 &lt;br /&gt;
 2008-09-28 13:04:20 FHT wz FHZ:ack: 0 &lt;br /&gt;
 2008-09-28 13:04:20 FHT wz warnings: none &lt;br /&gt;
 2008-09-28 13:04:20 FHT wz FHZ:warnings: none &lt;br /&gt;
 2008-09-28 13:04:20 FHT wz ack: 0 &lt;br /&gt;
 2008-09-28 13:04:20 FHT wz FHZ:ack: 0 &lt;br /&gt;
 2008-09-28 13:04:20 FHT wz end-xmit: 0 &lt;br /&gt;
 2008-09-28 13:04:20 FHT wz FHZ:end-xmit: 0&lt;br /&gt;
&lt;br /&gt;
Jede Zeile steht für ein Telegramm (und nicht für 3, wie beim FS20). &lt;br /&gt;
&lt;br /&gt;
FHZ:xxx Telegramme wurden von der FHZ (oder CUN/CUL) gesendet, die anderen vom FHT. &lt;br /&gt;
&lt;br /&gt;
FHEM fasst measured-low und measured-high zu measured-temp zusammen, es werden also im normalen log (telnet: inform timer) zwei Zeilen weniger gemeldet. &lt;br /&gt;
&lt;br /&gt;
17 ist der Hauscode der protokollierten FHZ. Wenn die FHZ nicht mit dem richtigen Hauscode antwortet, dann geht die Kommunikation nicht weiter. &lt;br /&gt;
&lt;br /&gt;
Wenn das FHT nicht an der FHZ angemeldet ist (d.h., das FHT hat nicht den Hauscode des FHZ gespeichert), werden keine Temperaturdaten übermittelt.  Set Prog:Cent:N/A setzt den FHT Hauscode auf 100, dann sollte jede FHZ auf &amp;quot;start-xmit&amp;quot; antworten, und das FHT merkt den ersten. Noch besser ist es, dem FHT via FHEM  etwas zu senden, dann muss nicht auf die nächste Temperaturmeldung (bis zu 15 Minuten) gewartet werden. &lt;br /&gt;
&lt;br /&gt;
Mehr dazu auch hier: [[FHT mit RFR CUL pairen]]&lt;br /&gt;
&lt;br /&gt;
Falls die Gegenseite nicht wie erwartet antwortet, wird nach einem Timeout das Telegramm einmal wiederholt. Falls immer noch keine korrekte Antwort vorliegt, wird nach 115+x Sekunden der ganze Vorgang einmal wiederholt. &lt;br /&gt;
&lt;br /&gt;
Durch diese recht umfangreiche Kommunikation entsteht im Zusammenhang mit der Sendezeitbeschränkung die maximale Anzahl nutzbarer Geräte von ca. einem Dutzend.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* Es gibt zwei weitere, gleich aussehende Geräte mit geringerem Funktionsumfang. Der [[FHT8b]] hat keine Verbindung zu Fensterkontakten. Der [[FHT8]] hat keinen bidirektionalen Funk und  kann nicht mit einer Zentrale/FHEM verbunden werden.&lt;br /&gt;
* Die Sendefrequenzen einiger FHT80b sind nicht besonders genau auf den eigentlichen Wert von 868,35 MHz justiert und streuen bei verschiedenen Geräten. Die FHZ 1x00PC Geräte sind gegenüber leichten Abweichungen der Frequenz durch eine etwas höhere Empfangsbandbreite eher unempfindlich. Die [[CUL]] oder [[CUNO]] halten die eingestellte Frequenz dagegen trennschärfer ein, sodass es zu Empfangsproblemen kommen kann. Können Signale eines FHT nicht empfangen werden, kann es sinnvoll sein, probeweise die Frequenz des CUL zu ändern (in 0,05 MHz Schritten), oder die Bandbreite aufzuweiten, z.B. auf 464 kHz.&lt;br /&gt;
* In seltenen Fällen fehlerhafte Aktuator Meldungen, siehe [[Lime-Protection Bug]] &lt;br /&gt;
* FHTs hören in der Regel nach 5-10 Tagen auf, von sich aus Daten zur Zentrale zu senden, wenn sonst keine Kommunikation mit dem FHT stattfindet. Ein regelmäßiges z.B. wöchentliches Stellen der Uhrzeit oder wöchentliches Abfragen der wichtigsten Parameter (report2 = 255) vorteilhaft zu eher &amp;quot;funklastarmen&amp;quot; Zeiten schafft Abhilfe; z.B.:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;define fht_reportZimmer1 at *04:00:00 {if ($wday == 1) { fhem(&amp;quot;set hzg_Zimmer1 report2 255&amp;quot;) } }&amp;lt;/code&amp;gt;&lt;br /&gt;
* Die o.g. Situation bringt häufig auch die Actuator-Meldung &amp;quot;&#039;&#039;&#039;unknown_69&#039;&#039;&#039;&amp;quot; mit sich. Eine Beschreibung zur Behebung findet sich in {{Link2Forum|Topic=6755|Message=28860|LinkText=diesem Forums-Post}}.&lt;br /&gt;
* Der Betrieb von FHTs mit einen [[RFR CUL]] kann zu besonderen Problemen führen, siehe [[RFR CUL und FHT80]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Funk-Heizkörperregler_Kurz-Bedienungsanleitung_FHT|Kurz-Bedienungsanleitung]]&lt;br /&gt;
* Anleitung [http://www.eq-3.de/Downloads/eq3/downloads_produktkatalog/andere_produkte_bda/FHT80B_UM_G_080812.pdf hier (eQ-3)] oder {{DocLink|elv|/Assets/Produkte/8/856/85643/Downloads/85643_FHT80B_UM.pdf hier (ELV)}} als PDF&lt;br /&gt;
* Baugleich auch als Set (&#039;&#039;&#039;FHT80b&#039;&#039;&#039;, [[FHT80TF]]) von Medion (bei Aldi oder ebay): [http://www.discounter-archiv.de/de/archiv/ALDI-Nord/2011-01-06/Automatische-Funk-Heizkoerpersteuerung/692135/ Lifetec MD12050]&lt;br /&gt;
* [[Kommunikationsprobleme mit FHT]] &lt;br /&gt;
* [[Was ist der Hauscode?]]&lt;br /&gt;
&lt;br /&gt;
Eine Reihe von Code Snippets zum Thema FHT80b:&lt;br /&gt;
* [[FHT80b Einstellungen]]&lt;br /&gt;
* [[FHT80b Automatik setzen]]&lt;br /&gt;
* [[FHT: Datum und Zeit von FHEM  setzen lassen]] &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHT Components]]&lt;br /&gt;
[[Kategorie:Heizungssteuerung]]&lt;br /&gt;
[[Kategorie:868MHz]]&lt;/div&gt;</summary>
		<author><name>Plaicy</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=30752</id>
		<title>AutoShuttersControl</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AutoShuttersControl&amp;diff=30752"/>
		<updated>2019-06-13T21:40:39Z</updated>

		<summary type="html">&lt;p&gt;Plaicy: Fix typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung von Rollläden&lt;br /&gt;
|ModCategory=Automatisierung&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=73_AutoShuttersControl.pm&lt;br /&gt;
|ModOwner=CoolTux ({{Link2FU|13684|Forum}}/[[Benutzer Diskussion:CoolTux|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Mit [[AutoShuttersControl]] oder kurz ASC können typische Aufgabenstellungen im Zusammenhang mit Rollläden u.ä. automatisiert werden, wie zum Beispiel das Öffnen bei Sonnenaufgang, Schließen bei Sonnenuntergang oder das Anfahren von Lüftungspositionen beim Öffnen des zugehörigen Fensters. &lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
{{Hinweis|Das Modul befindet sich derzeit noch in der Entwicklung; der jeweils aktuelle Stand ist  diesem {{Link2Forum|Topic=90751|LinkText=&amp;quot;Thread im Forum&amp;quot;}} zu entnehmen.}}&lt;br /&gt;
Zur Nutzung des Moduls sollten folgende andere FHEM-Devices vorhanden sein:&lt;br /&gt;
* Rollläden&lt;br /&gt;
* Fensterkontakte und &lt;br /&gt;
* Bewohnerstatus auf Basis von Residents/Roomates in englisch. Ersatzweise andere Devices, z.B. Dummys, welche als &#039;&#039;state&#039;&#039; &#039;&#039;home&#039;&#039;, &#039;&#039;asleep&#039;&#039;, &#039;&#039;gotosleep&#039;&#039; und &#039;&#039;awoken&#039;&#039; setzen sowie ein Reading &#039;&#039;lastState&#039;&#039;.&lt;br /&gt;
* Optional:&lt;br /&gt;
** Ein Helligkeitssensor (Steuerung nach Helligkeit und Beschattung)&lt;br /&gt;
** Ein Device zur Bestimmung des Sonnenstands (nur für Beschattung). Unterstützt werden derzeit [[Modul Astro|Astro]] und [[Twilight]]&amp;lt;ref&amp;gt;Dabei müssen ggf. in [[Global|global]] auch Angaben zu &#039;&#039;longitude&#039;&#039; und &#039;&#039;latitude&#039;&#039; vorhanden sein&amp;lt;/ref&amp;gt;. &lt;br /&gt;
** Wenn Feiertage berücksichtigt werden sollen: Ein oder mehrere {{Link2CmdRef|Anker=holiday2we|Lang=en|Label=holiday2we}}-Angaben in [[Global|global]] samt entsprechender [[Wochenende, Feiertage und Schulferien#Feiertage mittels holiday-Datei|holiday]]-Dateien&amp;lt;ref&amp;gt;Es kann auch z.B. ein Dummy-Device verwendet werden, dieses sollte dann aber neben dem eigentlichen Feiertags-&#039;&#039;state&#039;&#039; auch in einem Reading &#039;&#039;tomorrow&#039;&#039; Angaben zu anstehenden Feiertagen enthalten.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Bitte verfahren Sie entsprechend, wenn Urlaubs- oder Ferientage wie Feiertage behandelt werden sollen.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung des Moduls bzw. dessen Funktionalität erfolgt in mehreren Schritten:&lt;br /&gt;
* Definition des ASC-Devices&lt;br /&gt;
* Einstellung zentraler Vorgaben am ASC-Device&lt;br /&gt;
* Markieren der zukünftig zu steuernden Rollladen-Devices&lt;br /&gt;
* Einbinden der Rollladen-Devices in das ASC-Device&lt;br /&gt;
* Einstellen der individuellen Vorgaben je Rollladen (am Rollladen-Device)&lt;br /&gt;
Dabei geht man am einfachsten schrittweise vor und erweitert die Funktionalität nach und nach um die gewünschten Funktionen. Dann benötigt man jeweils nur einen kleinen Teil der vielen per Attribut einstellbaren Optionen, und kann die Auswirkungen der jeweiligen Änderung besser nachvollziehen. &lt;br /&gt;
&lt;br /&gt;
== Einrichtung ==&lt;br /&gt;
{{Hinweis|ASC kann auch verwendet werden, um lediglich Teilaufgaben der Rollladensteuerung zu erfüllen, also z.B. nur das morgendliche Öffnen der Rollläden. Allerdings geht dabei ein erheblicher Teil des Komforts verloren, der dadurch entsteht, dass die Steuerung innerhalb der vollintegrierten Lösung jeweils nachvollzieht, aus welchem Grund eine Fahrt erfolgt war und dies ggf. bei der nächsten Aktion berücksichtigt.}}&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Zunächst sollten die in den [[#Basics|Basics]] beschriebenen Geräte vorhanden und funktionsfähig sein. &lt;br /&gt;
&lt;br /&gt;
=== Define des ASC-Devices ===&lt;br /&gt;
Es genügt ein einfaches define ohne weitere Parameter.&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AutoShuttersControl&amp;lt;/code&amp;gt;&lt;br /&gt;
Dies bewirkt neben der Anlage des Devices selbst auch, dass als weiteres globales Attribut &#039;&#039;ASC&#039;&#039; verfügbar wird.&lt;br /&gt;
&lt;br /&gt;
=== Einstellung zentraler Vorgaben ===&lt;br /&gt;
Es stehen am ASC-Device einige Attribute zur Verfügung, über die sich das Verhalten des ASC-Devices insgesamt steuern lässt, z.B. zur Vermeidung von morgendlichen oder abendlichen Fahrten sowie bei Gefahr von Schäden an den Rollläden durch Frost oder zur Reaktion auf Fensterkontakte. Details sind der Commandref zu entnehmen.&lt;br /&gt;
Diese Attribute können auch nachträglich noch geändert werden.&lt;br /&gt;
&lt;br /&gt;
=== Markieren zu steuernder Rollladen-Devices ===&lt;br /&gt;
Um einen oder mehrere Rollläden durch das ASC-Device zu steuern, wird für jeden Rollladen jeweils das neue globale Attribut &#039;&#039;ASC&#039;&#039; gesetzt. Der Wert ist mit 1 oder 2 festzulegen, wobei &#039;&#039;&#039;1&#039;&#039;&#039; bedeutet, dass &lt;br /&gt;
* die Offen-Position kleiner ist als die Geschlossen-Position, also typischerweise 0 &#039;&#039;offen&#039;&#039; bedeutet und 100 für &#039;&#039;geschlossen&#039;&#039; steht&lt;br /&gt;
* eine bestimmte Position mit &#039;&#039;&#039;position&#039;&#039;&#039; angefahren wird, also z.B. &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; position 70&amp;lt;/code&amp;gt;.&lt;br /&gt;
Dies ist z.B. die  passende Wahl für ROLLO-Devices&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;2&#039;&#039;&#039; steht für ein umgekehrtes Verhalten und den Befehlsteil &#039;&#039;pct&#039;&#039;, also &#039;&#039;offen&#039;&#039; für &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; pct 100&amp;lt;/code&amp;gt;. Typischer Vertreter dieses Typs sind HomeMatic (CUL_HM-) Geräte oder die Shelly2-Aktoren.&lt;br /&gt;
&lt;br /&gt;
=== Einbinden in das ASC-Device ===&lt;br /&gt;
Nachdem man das obige Attribut bei einem oder mehreren Rollladen-Devices gesetzt hat, kann mit &lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; scanForShutters&amp;lt;/code&amp;gt; ein Suchlauf gestartet werden, mit dem dann diese Rollläden durch das Modul gefunden und in die Steuerungslogik eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
=== Einstellen der individuellen Vorgaben ===&lt;br /&gt;
Nach der Einbindung sind an den Rollladen-Devices weitere Attribute verfügbar, mit denen die für den jeweiligen Rollladen geltenden Einstellungen vorgenommen werden können. &lt;br /&gt;
Die Beschreibung der Attribute ist in der commandref enthalten.&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
&lt;br /&gt;
===Readings im ASC-Device selbst ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|..._nextAstroTimeEvent || ||Uhrzeit des nächsten Astro-Events, Sonnenauf- oder Sonnenuntergang oder feste Zeit pro Rollonamen &lt;br /&gt;
|-&lt;br /&gt;
|..._lastPosValue || ||zuletzt abgesetzter Fahrbefehl pro Rollonamen&lt;br /&gt;
|-&lt;br /&gt;
|..._lastDelayPosValue || ||zuletzt abgesetzter Fahrbefehl, welcher beim nächsten zulässigen Event ausgeführt wird&lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off || aktiviert den globalen Partymodus. Alle Rollläden, welche das Attribut &#039;&#039;AutoShuttersControl_Partymode&#039;&#039; bei sich auf &#039;&#039;on&#039;&#039; gestellt haben, werden nicht mehr gesteuert. Der letzte Schaltbefehl, welcher durch ein Fensterevent oder Bewohnerstatus an die Rollläden gesendet wurde, wird erst beim off-setzen (set &amp;lt;ASC-Device&amp;gt; partyMode off) ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|lockOut || on, off ||für das Aktivieren des Aussperrschutzes gemäß des entsprechenden Attributs &#039;&#039;AutoShuttersControl_lock-out&#039;&#039; im jeweiligen Rolladen (siehe Beschreibung bei den Attributen für die Rolladendevices)&lt;br /&gt;
|-&lt;br /&gt;
|room_... || ||Auflistung aller Rollläden, welche in den jeweiligen Räumen gefunden wurden, Bsp.: room_Schlafzimmer,Terrasse&lt;br /&gt;
|-&lt;br /&gt;
|state || ||Status des &amp;lt;ASC-Device&amp;gt; active, enabled, disabled&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday|| on,off ||legt fest, ob das Rolladendevice das Attribut &#039;&#039;AutoShuttersControl_Time_Up_WE_Holiday&#039;&#039; beachtet oder nicht&lt;br /&gt;
|-&lt;br /&gt;
|userAttrList || rolled out ||Status der UserAttribute, welche an die Rollläden gesendet werden&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Readings in den Rolllädendevices ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Bedeutung  &lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_DriveUp ||Sonnenaufgangszeit für das Rollo&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_DriveDown ||Sonnenuntergangszeit für das Rollo&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ShuttersLastDrive ||Grund des letzten Fahrens vom Rolladen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==set- und get-Befehle für das ASC-Device==&lt;br /&gt;
&lt;br /&gt;
=== set-Anweisungen ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Beschreibung  &lt;br /&gt;
|-&lt;br /&gt;
|partyMode ||on, off ||aktiviert den globalen Partymodus. Siehe Reading &#039;&#039;partyMode&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|lockOut ||on, off ||aktiviert den globalen Aussperrschutz. Siehe Reading &#039;&#039;lockOut&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|renewSetSunriseSunsetTimer || || erneuert bei allen Rollläden die Zeiten für Sunset und Sunrise und setzt die internen Timer neu.&lt;br /&gt;
|-&lt;br /&gt;
|scanForShutters || ||sucht alle FHEM Devices mit dem Attribut &#039;&#039;AutoShuttersControl&#039;&#039; &#039;&#039;1&#039;&#039; oder &#039;&#039;2&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|sunriseTimeWeHoliday || on,off ||aktiviert/deaktiviert die Beachtung des Attributes &#039;&#039;AutoShuttersControl_Time_Up_WE_Holiday&#039;&#039; für Rollladen-Devices&lt;br /&gt;
|-&lt;br /&gt;
|createNewNotifyDev || ||Legt die interne Struktur für NOTIFYDEV neu an&lt;br /&gt;
|-&lt;br /&gt;
|selfDefence ||on, off||aktiviert/deaktiviert den Selbstschutz: wenn das Residents-Device &#039;&#039;absent&#039;&#039; meldet, &#039;&#039;selfDefence&#039;&#039; aktiv ist und ein Fenster im Haus noch offen steht, wird an diesem Fenster das Rollo runtergefahren&lt;br /&gt;
|-&lt;br /&gt;
|wiggle ||||bewegt einen Rollladen oder alle Rollläden (für Abschreckungszwecke bei der Alarmierung) um &#039;&#039;ASC_WiggleValue&#039;&#039;-%, und nach 1 Minute wieder zurück zur Ursprungsposition&lt;br /&gt;
|-&lt;br /&gt;
|||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== get-Anweisungen ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| showShuttersInformations ||zeigt eine Übersicht der Automatik-Fahrzeiten&lt;br /&gt;
|-&lt;br /&gt;
| showNotifyDevsInformations ||zeigt eine Übersicht der abgelegten NOTIFYDEV Struktur. Dient zur Kontrolle&lt;br /&gt;
|}&lt;br /&gt;
== Attribute ==&lt;br /&gt;
{{Hinweis|Die Attributnamen haben sich teilweise geändert, nachfolgend ist noch ein Stand vor Modulversion 0.6.5.x wiedergegeben. Die aktuellen Benennungen sind der Commandref zu entnehmen.}}&lt;br /&gt;
{{Hinweis|In der commandref findet sich häufig die Schreibweise &amp;lt;code&amp;gt;ASC_BrightnessSensor Sensorname[:brightness [400:800]]&amp;lt;/code&amp;gt;. Dabei sind die Angaben in den eckigen Klammern optional. Dies müssen also nicht angegeben werden, stattdessen verwendet das Modul dann Standardwerte (siehe cref), die in der cref zu findenden Angaben entsprechen dabei den defaults. Werden Werte angegeben, sind die eckigen Klammern &#039;&#039;&#039;wegzulassen&#039;&#039;&#039;! Beispiel: &amp;lt;code&amp;gt;ASC_BrightnessSensor hm_motion_1 70:100&amp;lt;/code&amp;gt; würde das brightness-Reading des Sensors hm_motion_1 verwenden und einen morgendlichen Schwellenwert von 70 bzw. 100 für abends.}}&lt;br /&gt;
===Attribute direkt am ASC-Device ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Default-Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|ASC_antifreezeTemp || || ||Temperatur, ab welcher der Frostschutz greift und das Rollo nicht mehr fährt. Der letzte Fahrbefehl wird gespeichert&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeEvening ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC, HORIZON || || (in genau dieser Schreibweise)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeEveningHorizon || || || Höhe über Horizont, wenn beim Attribut &#039;&#039;AutoShuttersControl_autoAstroModeEvening&#039;&#039; &#039;&#039;HORIZON&#039;&#039; ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeMorning ||aktuell REAL, CIVIL, NAUTIC, ASTRONOMIC, HORIZON || ||(in genau dieser Schreibweise)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoAstroModeMorningHorizon || || ||Höhe über Horizont, wenn beim Attribut &#039;&#039;AutoShuttersControl_autoAstroModeMorning&#039;&#039; &#039;&#039;HORIZON&#039;&#039; ausgewählt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoShuttersControlComfort ||on, off || ||aktiviert die Komfortfunktion. Bedeutet, dass ein Rollladen mit einem threestate (Drehgriff-) Sensor am Fenster beim Öffnen in die &amp;quot;Komfortposition&amp;quot; fährt. Diese wird beim Rollladendevice über das Attribut &#039;&#039;AutoShuttersControl_Pos_after_ComfortOpen&#039;&#039; eingestellt.&lt;br /&gt;
|- &lt;br /&gt;
|ASC_autoShuttersControlEvening ||on, off || ||ob Abends die Rollläden automatisch zeitgesteuert werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_autoShuttersControlMorning ||on, off || ||ob Morgens die Rollläden automatisch zeitgesteuert werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_temperatureReading || || ||Reading für die Außentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|ASC_temperatureSensor || || ||Device für die Außentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|ASC_timeUpHolidayDevice || || ||Device zur Urlaubserkennung oder Sonstiges / muss &#039;&#039;0&#039;&#039; oder &#039;&#039;1&#039;&#039; im Reading &#039;&#039;state&#039;&#039; beinhalten.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_residentsDevice|| || ||Devicenamen des Residents-Device der obersten Ebene&lt;br /&gt;
|-&lt;br /&gt;
|ASC_residentsDeviceReading|| || ||Status Reading des Residents-Device der obersten Ebene&lt;br /&gt;
|-&lt;br /&gt;
|ASC_brightnessMinVal|| || ||minimaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_brightnessMaxVal || || ||maximaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_rainSensorDevice || || ||Device, welches bei Regen getriggert wird&lt;br /&gt;
|-&lt;br /&gt;
|ASC_rainSensorReading || || ||das ensprechende Reading zum Regendevice&lt;br /&gt;
|-&lt;br /&gt;
|ASC_rainSensorShuttersClosedPos || || ||Position in pct, welche der Rollladen bei Regen anfahren soll &lt;br /&gt;
|-&lt;br /&gt;
|ASC_shuttersDriveOffset  || || ||maximale zufällige Verzögerung in Sekunden bei der Berechnung der Fahrzeiten, &#039;&#039;0&#039;&#039; bedeutet keine Verzögerung&lt;br /&gt;
|-&lt;br /&gt;
|ASC_twilightDevice || || ||Device, welches Informationen zum Sonnenstand liefert, wird unter anderem für die Beschattung verwendet.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_expert || || ||bei &#039;&#039;1&#039;&#039; werden erweiterte Informationen bezüglich des NotifyDevs unter &#039;&#039;set&#039;&#039; und &#039;&#039;get&#039;&#039; angezeigt&lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Attribute in den Rolllädendevices===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Datentyp/&amp;lt;BR/&amp;gt;Wertebereich !! Default-Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|ASC || 0, 1, 2|| ||0 = &amp;quot;kein Anlegen der Attribute beim ersten Scan bzw. keine Beachtung eines Fahrbefehles&amp;quot;,1 = &amp;quot;Inverse oder Rollo - Bsp.: Rollo Oben 0, Rollo Unten 100 und der Befehl zum prozentualen Fahren ist position&amp;quot;,2 = &amp;quot;Homematic Style - Bsp.: Rollo Oben 100, Rollo Unten 0 und der Befehl zum prozentualen Fahren ist pct&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Antifreeze || soft, am, pm, hard, off|| ||Frostschutz, wenn &#039;&#039;soft&#039;&#039; fährt der Rollladen in die &#039;&#039;ASC_Antifreeze_Pos&#039;&#039;, bei &#039;&#039;hard/am/pm&#039;&#039; wird gar nicht oder innerhalb der entsprechenden Tageszeit nicht gefahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Antifreeze_Pos || || ||Position, die angefahren werden soll, wenn der Fahrbefehl komplett schließen lautet, aber der Frostschutz aktiv ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_AutoAstroModeEvening ||REAL, CIVIL, NAUTIC, ASTRONOMIC, HORIZON || ||aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC&lt;br /&gt;
|-&lt;br /&gt;
|ASC_AutoAstroModeEveningHorizon || || ||Höhe über Horizont, wenn beim Attribut &#039;&#039;ASC_autoAstroModeEvening&#039;&#039; &#039;&#039;HORIZON&#039;&#039; ausgewählt ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_AutoAstroModeMorning ||REAL, CIVIL, NAUTIC, ASTRONOMIC, HORIZON || ||aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC&lt;br /&gt;
|-&lt;br /&gt;
|ASC_AutoAstroModeMorningHorizon || || ||Höhe über Horizont, wenn beim Attribut &#039;&#039;ASC_autoAstroModeMorning&#039;&#039; &#039;&#039;HORIZON&#039;&#039; ausgewählt ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Closed_Pos || || ||in 10er Schritten von 0 bis 100,default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Down || astro, time, brightness || ||bei &#039;&#039;astro&#039;&#039; wird Sonnenuntergang berechnet, bei &#039;&#039;time&#039;&#039; wird der Wert aus &#039;&#039;ASC_Time_Down_Early&#039;&#039; als Fahrzeit verwendet und bei &#039;&#039;brightness&#039;&#039; muss &#039;&#039;ASC_Time_Down_Early&#039;&#039; und &#039;&#039;ASC_Time_Down_Late&#039;&#039; korrekt gesetzt werden. Der Timer läuft dann nach &#039;&#039;ASC_Time_Down_Late&#039;&#039;-Zeit,es wird aber in der Zeit zwischen &#039;&#039;ASC_Time_Down_Early&#039;&#039; und &#039;&#039;ASC_Time_Down_Late&#039;&#039; geschaut, ob die als Attribut im Moduldevice hinterlegte &#039;&#039;ASC_brightnessMinVal&#039;&#039; erreicht wurde. Wenn ja, wird der Rolladen runter gefahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Mode_Down ||always, home, absent, off || ||wann darf die Automatik herunterfahren. immer, niemals oder bei Abwesenheit des Roommate (ist kein Roommate und &#039;&#039;absent&#039;&#039; eingestellt, wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Mode_Up ||always, home, absent, off || ||wann darf die Automatik hochfahren. immer, niemals oder bei Abwesenheit des Roommate (ist kein Roommate und &#039;&#039;absent&#039;&#039; eingestellt, wird gar nicht gesteuert)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Drive_Offset || || ||maximale zufällige Verzögerung in Sekunden bei der Berechnung der Fahrzeiten, &#039;&#039;0&#039;&#039; bedeutet sofort, &#039;&#039;-1&#039;&#039; bedeutet, dass das gleichwertige Attribut aus dem ASC-Device ausgewertet werden soll&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Open_Pos || || ||in 10er-Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Partymode || on, off || ||schaltet den Partymodus an oder aus. Wird dann am ASC Device &#039;&#039;set &amp;lt;ASC-DEVICE&amp;gt; partyMode on&#039;&#039; geschaltet, werden alle Fahrbefehle an den Rollläden, welche das Attribut auf &#039;&#039;on&#039;&#039; haben, zwischengespeichert und erst später ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Pos_Reading || || ||Name des Readings, welches die Position des Rollladen in Prozent angibt. Wird bei unbekannten Device-Typen auch als &#039;&#039;set&#039;&#039; Befehl zum Fahren verwendet&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Pos_after_ComfortOpen || || ||in 10er-Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Roommate_Reading || || ||Reading des Roommate-Device, welches den Status wieder gibt&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Roommate_Device || || ||mit Komma getrennte Namen des/der Roommate-Device/s welche den/die Bewohner des Rollladen-Raumes wiedergibt. Macht nur Sinn in Schlaf- oder Kinderzimmern&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Down_Early || || ||Sunset früheste Zeit zum Runterfahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Down_Late || || ||Sunset späteste Zeit zum Runterfahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Up_Early || || ||Sunrise früheste Zeit zum Hochfahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Up_Late || || ||Sunrise späteste Zeit zum Hochfahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Time_Up_WE_Holiday || || ||Sunrise früheste Zeit zum Hochfahren am Wochenende und/oder Urlaub (holiday2we wird beachtet).&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Up || astro, time, brightness || ||bei &#039;&#039;astro&#039;&#039; wird Sonnenaufgang berechnet, bei &#039;&#039;time&#039;&#039; wird der Wert aus &#039;&#039;ASC_Time_Up_Early&#039;&#039; als Fahrzeit verwendet und bei &#039;&#039;brightness&#039;&#039; müssen &#039;&#039;ASC_Time_Up_Early&#039;&#039; und &#039;&#039;ASC_Time_Up_Late&#039;&#039; korrekt gesetzt werden. Der Timer läuft dann nach &#039;&#039;ASC_Time_Up_Late&#039;&#039;-Zeit, es wird aber in der Zeit zwischen &#039;&#039;ASC_Time_Up_Early&#039;&#039; und &#039;&#039;ASC_Time_Up_Late&#039;&#039; geschaut, ob die als Attribut im Moduldevice hinterlegte &#039;&#039;ASC_brightnessMinVal&#039;&#039; erreicht wurde. Wenn ja, wird der Rolladen runter gefahren&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Ventilate_Pos || || ||in 10er-Schritten von 0 bis 100, default Vorgabe ist abhängig vom Attribut &#039;&#039;ASC&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Ventilate_Window_Open || || ||auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindowRec || || ||Name des Fensterkontakts, an welchen Fenster der Rollladen angebracht ist. Sein Reading &#039;&#039;state&#039;&#039; muss die Werte &#039;&#039;open&#039;&#039;, &#039;&#039;closed&#039;&#039; oder &#039;&#039;tilted&#039;&#039; enthalten.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_WindowRec_subType || || ||Typ des verwendeten Fensterkontakts: &#039;&#039;twostate&#039;&#039; (optisch oder magnetisch) oder &#039;&#039;threestate&#039;&#039; (Drehgriffkontakt)&lt;br /&gt;
|-&lt;br /&gt;
|ASC_lock-out || soft, hard || ||stellt entsprechend den Aussperrschutz ein. Bei global aktiven Aussperrschutz (&#039;&#039;set ASC-Device lockOut soft&#039;&#039;) und einem Fensterkontakt &#039;&#039;open&#039;&#039; bleibt dann der Rolladen oben. Dies gilt nur bei Steuerbefehle über das ASC-Modul. Stellt man global auf &#039;&#039;hard&#039;&#039;, wird bei entsprechender Möglichkeit versucht, den Rollladen hardwareseitig zu blockieren. Dann ist auch ein Fahren über die Taster nicht mehr möglich.&lt;br /&gt;
|-&lt;br /&gt;
|ASC_lock-outCmd || inhibit, blocked || ||set Befehl für das Rolladen-Device zum Sperren per Hardware. Der Befehl wird verwendet, wenn &#039;&#039;ASC_lock-out&#039;&#039; auf &#039;&#039;hard&#039;&#039; gesetzt ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Self_Defense_Exclude || on, off || ||bei &#039;&#039;on&#039;&#039; wird dieser Rolladen bei aktiven &#039;&#039;selfDefence&#039;&#039; und offenen Fenster nicht runter gefahren, wenn Residents absent ist&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_Brightness_Sensor || || ||Sensor-Device, welches für die Lichtwerte verwendet wird. ACHTUNG! Findet auch Verwendung bei ASC_Down - brightness&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BrightnessMinVal || || ||minimaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen / wird der Wert von &#039;&#039;-1&#039;&#039; nicht geändert, so wird automatisch der Wert aus dem Moduldevice genommen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BrightnessMaxVal || || ||maximaler Lichtwert, bei dem Schaltbedingungen noch geprüft werden sollen / wird der Wert von &#039;&#039;-1&#039;&#039; nicht geändert, so wird automatisch der Wert aus dem Moduldevice genommen&lt;br /&gt;
|-&lt;br /&gt;
|ASC_ShuttersPlace || window, terrace || ||wenn dieses Attribut auf &#039;&#039;terrace&#039;&#039; gesetzt ist und das Residents-Device in den Status &#039;&#039;gone&#039;&#039; geht und &#039;&#039;selfDefence&#039;&#039; aktiv ist, wird das Rollo geschlossen&lt;br /&gt;
|-  &lt;br /&gt;
|ASC_WiggleValue || || ||Wert, um welchen sich die Position des Rollladens bei &#039;&#039;Wiggle&#039;&#039; ändern soll &lt;br /&gt;
|-&lt;br /&gt;
|ASC_BlockingTime_afterManual || || ||Wartezeit in Sekunden, die die Automatik nach einer manuellen Fahrt aussetzen soll&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BlockingTime_beforNightClose || || ||Vorgabezeit in Sekunden, innerhalb derer vor dem nächtlichen Schließen keine Öffnen-Fahrt mehr ausgeführt werden soll&lt;br /&gt;
|-&lt;br /&gt;
|ASC_BlockingTime_beforDayOpen || || ||Vorgabezeit in Sekunden, innerhalb derer vor dem morgendlichen Öffnen keine Schließen-Fahrt mehr ausgeführt werden soll&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_Direction || || ||Position in Grad, auf der das Fenster liegt - genau Osten wäre 90, Süden 180 und Westen 270&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_Pos || || ||Position des Rollladens für die Beschattung&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_Angle_Left || || ||Vorlaufwinkel im Bezug zum Fenster, ab wann abgeschattet wird. Beispiel: Fenster 180° - 85° ==&amp;gt; ab Sonnenpos. 95° wird abgeschattet&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_Angle_Right || || ||Nachlaufwinkel im Bezug zum Fenster, bis wann abgeschattet wird. Beispiel: Fenster 180° + 85° ==&amp;gt; bis Sonnenpos. 265° wird abgeschattet&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_Mode || || ||absent,always,off,home / Vorgabe, wann Beschattungsaktionen durchzuführen sind&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_StateChange_Sunny || || ||Brightness Wert ab welchen Beschattung statt finden soll, immer in Abhängikkeit der anderen einbezogenden Sensorwerte&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_StateChange_Cloudy || || ||Brightness Wert ab welchen die Beschattung aufgehoben werden soll, immer in Abhängikkeit der anderen einbezogenden Sensorwerte&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_Min_Elevation || || ||ab welcher Höhe des Sonnenstandes soll beschattet werden, immer in Abhängikkeit der anderen einbezogenden Sensorwerte&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_Min_OutsideTemperature || || ||ab welcher Temperatur soll Beschattet werden, immer in Abhängikkeit der anderen einbezogenden Sensorwerte&lt;br /&gt;
|-&lt;br /&gt;
|ASC_Shading_WaitingPeriod || || ||wie viele Sekunden soll gewartet werden bevor eine weitere Auswertung der Sensordaten für die Beschattung statt finden soll&lt;br /&gt;
|-&lt;br /&gt;
|ASC_PrivacyDownTime_beforNightClose || || ||wie viele Sekunden vor dem abendlichen schlie&amp;amp;zlig;en soll der Rollladen in die Sichtschutzposition fahren, -1 bedeutet das diese Funktion unbeachtet bleiben soll&lt;br /&gt;
|-&lt;br /&gt;
|ASC_PrivacyDown_Pos || || ||Position den Rollladens für den Sichtschutz&lt;br /&gt;
|-&lt;br /&gt;
| || || ||&lt;br /&gt;
| || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || ||    &lt;br /&gt;
|-  &lt;br /&gt;
| || || ||&lt;br /&gt;
|-&lt;br /&gt;
| || || ||        &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hilfsmittel ==&lt;br /&gt;
{{Hinweis|Die Device-Namen sind auf die eigene Installation anzupassen.}}&lt;br /&gt;
&lt;br /&gt;
=== Interne Übersicht ===&lt;br /&gt;
&lt;br /&gt;
 define ASC_Jalousie_Info weblink htmlCode {AutoShuttersControl::GetShuttersInformation($defs{&#039;JalousieControl&#039;})}&lt;br /&gt;
&lt;br /&gt;
[[Datei:ASC Overview.JPG|600px|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== readingsGroup für Level ===&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Erfolgreich getestet mit Homematic Devices, Stand 2019-05-03 Beta-User}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Codezeilen sind im [[Import von Code Snippets|RAW]]-Format.}}&lt;br /&gt;
 &lt;br /&gt;
[[Datei:RG AutoShuttersControl Homematic.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; defmod rg_ASC_Rolllaeden_Level readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Stand&amp;gt;,&amp;lt;Schliessen bis&amp;gt;,&amp;lt;Öffnen auf&amp;gt;,&amp;lt;Beschattung&amp;gt;,&amp;lt;Komfort&amp;gt;,&amp;lt;Lüften&amp;gt;,&amp;lt;Privacy&amp;gt; (Rollladen_.*|Jalousie_.*)..:level,!?ASC_Closed_Pos,!?ASC_Open_Pos,!?ASC_Shading_Pos,!?ASC_ComfortOpen_Pos,!?ASC_Ventilate_Pos,!?ASC_PrivacyDown_Pos&lt;br /&gt;
attr rg_ASC_Rolllaeden_Level commands {level =&amp;gt; &#039;pct:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Closed_Pos =&amp;gt; &#039;ASC_Closed_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Open_Pos =&amp;gt; &#039;ASC_Open_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Ventilate_Pos =&amp;gt; &#039;ASC_Ventilate_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_ComfortOpen_Pos =&amp;gt; &#039;ASC_ComfortOpen_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_PrivacyDown_Pos =&amp;gt; &#039;ASC_PrivacyDown_Pos:selectnumbers,0,5,100,0,lin&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== readingsGroup für Zeiten ===&lt;br /&gt;
&amp;lt;pre&amp;gt; define rg_ASC_Rollaeden_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Position&amp;gt;,&amp;lt;Time_Up_Early&amp;gt;,&amp;lt;Time_Up_Late&amp;gt;,&amp;lt;Time_Up_WE/Hol&amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,&amp;lt;Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt; \&lt;br /&gt;
 (.*Rollladen.*|.*Rollladen|Jalousie_.*):level,?ASC_Time_Up_Early,?ASC_Time_Up_Late,?ASC_Time_Up_WE_Holiday,?ASC_Time_Down_Early,?ASC_Time_Down_Late,?ASC_Mode_Down,?ASC_Mode_Up&lt;br /&gt;
 setuuid rg_ASC_Rollaeden_Times 5c4308e1-f33f-abd1-94a7-fbf717635760f863&lt;br /&gt;
 attr rg_ASC_Rollaeden_Times commands {level =&amp;gt; &#039;pct:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100&#039;, \&lt;br /&gt;
 ASC_Time_Down_Early =&amp;gt; &#039;ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00&#039;, \&lt;br /&gt;
 ASC_Time_Down_Late  =&amp;gt; &#039;ASC_Time_Down_Late:19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30&#039;, \&lt;br /&gt;
 ASC_Time_Up_WE_Holiday =&amp;gt; &#039;ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,\&lt;br /&gt;
 ASC_Time_Up_Early =&amp;gt; &#039;ASC_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,  \&lt;br /&gt;
 ASC_Time_Up_Late =&amp;gt; &#039;ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;, \&lt;br /&gt;
 ASC_Mode_Down =&amp;gt; &#039;ASC_Mode_Down:always,absent,off&#039;, \&lt;br /&gt;
 ASC_Mode_Up =&amp;gt; &#039;ASC_Mode_Up:always,absent,off&#039; }&lt;br /&gt;
 attr rg_ASC_Rollaeden_Times room 9.72_Rolladen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  readingsGroup für das Einstellen der Beschattungs-Attribute ===&lt;br /&gt;
[[Datei:ReadingsGroup ASC shading.png|350px|thumb|right|Beispiel]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod rg_ASC_Rolllaeden_Shading readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Modus&amp;gt;,&amp;lt;Position&amp;gt;,&amp;lt;Richtung&amp;gt;,&amp;lt;°links&amp;gt;,&amp;lt;°rechts&amp;gt;,&amp;lt;Min Elevation&amp;gt;,&amp;lt;Min Temp&amp;gt; (Rollladen|Jalousie)_.*..:?ASC_Shading_Mode,?ASC_Shading_Pos,?ASC_Shading_Direction,?ASC_Shading_Angle_Left,?ASC_Shading_Angle_Right,?ASC_Shading_Min_Elevation,?ASC_Shading_Min_OutsideTemperature&lt;br /&gt;
attr rg_ASC_Rolllaeden_Shading alias Rollläden: Beschattung&lt;br /&gt;
attr rg_ASC_Rolllaeden_Shading commands {ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:knob,min:0,max:100,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:5,lineCap:round&#039;,\&lt;br /&gt;
ASC_Shading_Mode =&amp;gt; &#039;ASC_Shading_Mode:always,home,absent,off&#039;,\&lt;br /&gt;
ASC_Shading_Direction =&amp;gt; &#039;ASC_Shading_Direction:knob,min:0,max:360,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:1,cursor:true,lineCap:round&#039;,\&lt;br /&gt;
ASC_Shading_Angle_Left =&amp;gt; &#039;ASC_Shading_Angle_Left:knob,min:0,max:85,angleArc:85,rotation:anticlockwise,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:5,lineCap:round,angleOffset:270&#039;,\&lt;br /&gt;
ASC_Shading_Angle_Right =&amp;gt; &#039;ASC_Shading_Angle_Right:knob,min:0,max:85,angleArc:85,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:5,lineCap:round,&#039;,\&lt;br /&gt;
ASC_Shading_Min_Elevation =&amp;gt; &#039;ASC_Shading_Min_Elevation:knob,min:15,max:35,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:1,lineCap:round,angleArc:20,angleOffset:55,rotation:anticlockwise&#039;,\&lt;br /&gt;
ASC_Shading_Min_OutsideTemperature =&amp;gt; &#039;ASC_Shading_Min_OutsideTemperature:knob,min:5,max:25,width:50,height:50,fgColor:#FF9900,bgColor:#CCCCCC,step:0.5,lineCap:round,angleArc:120,angleOffset:270&#039;}&lt;br /&gt;
attr rg_ASC_Rolllaeden_Shading room Steuerung-&amp;gt;Rollladen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweis: Die Farbgebung entspricht dem Standard, wenn unter dem Style f18 der Farbpreset &#039;&#039;dark&#039;&#039; gewählt wird.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Anderes {{Link2Forum|Topic=99980|Message=946357|LinkText=foren-Bespiel}} für eine RG zu Beschattung (für V. 0.6.x):&lt;br /&gt;
&amp;lt;pre&amp;gt;define rg_ASC_Shading readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Grad&amp;gt;,&amp;lt;Position&amp;gt;,&amp;lt;Mode&amp;gt;,&amp;lt;Links&amp;gt;,&amp;lt;Rechts&amp;gt;,&amp;lt;Wait&amp;gt;,&amp;lt;ShadeIn&amp;gt;,&amp;lt;ShadeOut&amp;gt;,,&amp;lt;Min_Elevation&amp;gt;&amp;lt;Device&amp;gt;\&lt;br /&gt;
(br_rollo|sz_rollo|ds_rollo|bd_rollo|wz_rollo|wz_rollo_f):!?ASC_Shading_Direction,!?ASC_Shading_Pos,!?ASC_Shading_Mode,!?ASC_Shading_Angle_Left,!?ASC_Shading_Angle_Right,!?ASC_Shading_WaitingPeriod,!?ASC_Shading_StateChange_Sunny,!?ASC_Shading_StateChange_Cloudy,!?ASC_Shading_Min_Elevation,!?ASC_BrightnessSensor&lt;br /&gt;
attr rg_ASC_Shading commands {ASC_Shading_Direction =&amp;gt; &#039;ASC_Shading_Direction:165,255,345&#039;,\&lt;br /&gt;
ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_Mode =&amp;gt; &#039;ASC_Shading_Mode:absent,always,off,home&#039;,\&lt;br /&gt;
ASC_Shading_Angle_Left =&amp;gt; &#039;ASC_Shading_Angle_Left:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_Angle_Right =&amp;gt; &#039;ASC_Shading_Angle_Right:selectnumbers,0,5,100,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_WaitingPeriod =&amp;gt; &#039;ASC_Shading_WaitingPeriod:selectnumbers,0,60,1200,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_StateChange_Sunny =&amp;gt; &#039;ASC_Shading_StateChange_Sunny:selectnumbers,10000,1000,40000,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_StateChange_Cloudy =&amp;gt; &#039;ASC_Shading_StateChange_Cloudy:selectnumbers,10000,1000,40000,0,lin&#039;,\&lt;br /&gt;
ASC_Shading_Min_Elevation =&amp;gt;&lt;br /&gt;
&#039;ASC_Shading_Min_Elevation:selectnumbers,0,1,40,0,lin&#039;}&lt;br /&gt;
attr rg_ASC_Shading room ASC&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  readingsGroup für FIBARO Roller Shutter FGR-222 Devices ===&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Getestet von majestro84 https://forum.fhem.de/index.php/topic,92628.msg897099.html#msg897099; Stand 2019-01-28.}}&lt;br /&gt;
[[Datei:ASC Jalousien Level.JPG|600px|]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:ASC Jalousien Times.JPG|600px|]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; define ASC_Jalousien_Times readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Stand&amp;gt;,&amp;lt;Time_Up_Early&amp;gt;,&amp;lt;Time_Up_WE&amp;gt;,&amp;lt;Time_Up_Late&amp;gt;,&amp;lt;Time_Down_Early&amp;gt;,&amp;lt;Time_Down_Late&amp;gt;,&amp;lt;Mode_Down&amp;gt;,&amp;lt;Mode_Up&amp;gt;,&amp;lt;PartyMode&amp;gt;,&amp;lt;LockOut&amp;gt; (.*_Jalousie.*):position,?ASC_Time_Up_Early,?ASC_Time_Up_WE_Holiday,?ASC_Time_Up_Late,?ASC_Time_Down_Early,?ASC_Time_Down_Late,?ASC_Mode_Down,?ASC_Mode_Up,?ASC_Partymode,?ASC_LockOut&lt;br /&gt;
 attr ASC_Jalousien_Times commands {position =&amp;gt; &#039;dim:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Mode_Down =&amp;gt; &#039;ASC_Mode_Down:always,absent,off&#039;,&lt;br /&gt;
 ASC_Mode_Up =&amp;gt; &#039;ASC_Mode_Up:always,absent,off&#039;,&lt;br /&gt;
 ASC_Partymode =&amp;gt; &#039;ASC_Partymode:on,off&#039;,&lt;br /&gt;
 ASC_LockOut =&amp;gt; &#039;ASC_LockOut:soft,hard,off&#039;,&lt;br /&gt;
 ASC_Time_Down_Early =&amp;gt; &#039;ASC_Time_Down_Early:15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00&#039;, &lt;br /&gt;
 ASC_Time_Down_Late  =&amp;gt; &#039;ASC_Time_Down_Late:20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30&#039;,&lt;br /&gt;
 ASC_Time_Up_Early =&amp;gt; &#039;ASC_Time_Up_Early:05:00,05:05,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,&lt;br /&gt;
 ASC_Time_Up_Late =&amp;gt;&#039;ASC_Time_Up_Late:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;,&lt;br /&gt;
 ASC_Time_Up_WE_Holiday =&amp;gt; &#039;ASC_Time_Up_WE_Holiday:06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00&#039;}&lt;br /&gt;
 attr ASC_Jalousien_Times room Jalousien&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; define Jalousien_Level readingsGroup &amp;lt;Gerät&amp;gt;,&amp;lt;Closed_Pos&amp;gt;,&amp;lt;Open_Pos&amp;gt;,&amp;lt;Comfort_Pos&amp;gt;,&amp;lt;Ventilate_Pos&amp;gt;,&amp;lt;PrivacyDown_Pos&amp;gt;,&amp;lt;Shading_Pos&amp;gt; (.*_Jalousie.*):?ASC_Closed_Pos,?ASC_Open_Pos,?ASC_ComfortOpen_Pos,?ASC_Ventilate_Pos,?ASC_PrivacyDown_Pos,?ASC_Shading_Pos&lt;br /&gt;
 attr Jalousien_Level commands { ASC_Closed_Pos =&amp;gt; &#039;ASC_Closed_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Open_Pos =&amp;gt; &#039;ASC_Open_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_ComfortOpen_Pos =&amp;gt; &#039;ASC_ComfortOpen_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Ventilate_Pos =&amp;gt; &#039;ASC_Ventilate_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_PrivacyDown_Pos =&amp;gt; &#039;ASC_PrivacyDown_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;,&lt;br /&gt;
 ASC_Shading_Pos =&amp;gt; &#039;ASC_Shading_Pos:0,10,20,30,35,40,45,50,55,60,65,70,75,80,85,90,95,99&#039;}&lt;br /&gt;
 attr Jalousien_Level room Jalousien&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einrichtungsbeispiel ==&lt;br /&gt;
=== Zielsetzung und Vorgaben ===&lt;br /&gt;
Es sollen alle Rollläden und Jalousien in einem Haus innerhalb bestimmter zeitlicher Grenzen Morgens und Abends sonnenstandsabhängig gefahren werden, an den Wochenenden und an Ferientagen soll etwas später geöffnet werden. Es sind Tür- und Fensterkontakte vorhanden (Türkontakte: twoState, Fensterkontakte: threeState), wobei bei jeder Öffnung ein eventuell geschlossener Rollladen geöffnet werden soll. Bei allen Rollladenaktoren, Tür- und Fensterkontakten handelt es sich um CUL_HM-Geräte.&lt;br /&gt;
&lt;br /&gt;
=== Vorarbeiten ===&lt;br /&gt;
Im global-Device sind Angaben zu latitude und longitude vorhanden, holiday2we wie folgt&amp;lt;ref&amp;gt;&#039;&#039;ferien&#039;&#039; ist eine automatisiert erstellte holiday-Datei nach diesem {{Link2Forum|Topic=85759|Message=885883|LinkText=Foren-Beitrag}}.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 attr global holiday2we bw,ferien&lt;br /&gt;
Weitere Angaben benötigen wir zunächst nicht, die Festlegung eines Astro-Devices erfolgt hier erst im Rahmen der Beschattung. &lt;br /&gt;
Dann erfolgt das &#039;&#039;Define des ASC-Devices&#039;&#039; wie oben beschrieben:&lt;br /&gt;
&amp;lt;code&amp;gt;define Rollladenautomatik AutoShuttersControl&amp;lt;/code&amp;gt;&lt;br /&gt;
Folgen die einzubindenden Rollladenaktoren einem einheitlichen Namensschema, können diese sodann z.B. mit &lt;br /&gt;
 attr (Jalousie|Rollladen)_.* ASC 2&lt;br /&gt;
auf einen Rutsch mit dem passenden ASC-Typ gekennzeichnet werden. Dann verteilen wir mir &lt;br /&gt;
 set Rollladenautomatik scanForShutters&lt;br /&gt;
die nachfolgend weiter zu bearbeitenden Attribute.&lt;br /&gt;
=== Schließen morgens und abends ===&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Alternative: Fahren nach brightness:&lt;br /&gt;
Will man insgesamt oder nur an einzelnen Rollläden stattdessen helligkeitsgesteuert fahren, muß für jeden Rollladen ein Helligkeitssensor definiert und entweder zentral oder am einzelnen Rollladen jeweils ein Höchst- bzw. Mindestwert festgelegt werden (&#039;&#039;ASC_BrightnessMinVal&#039;&#039; etc.), bei dessen Überschreitung geöffnet bzw. Unterschreitung geschlossen werden soll.}}&lt;br /&gt;
==== Konfiguration des ASC-Devices ====&lt;br /&gt;
Da wir sonnenstandsabhängig Fahrzeiten wollen, legen wir erst einmal fest, dass dies morgens und abends berücksichtigt werden soll:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Rollladenautomatik ASC_autoAstroModeEvening CIVIL&lt;br /&gt;
attr Rollladenautomatik ASC_autoAstroModeMorning CIVIL&lt;br /&gt;
attr Rollladenautomatik ASC_autoShuttersControlEvening on&lt;br /&gt;
attr Rollladenautomatik ASC_autoShuttersControlMorning on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Aus der Angabe &#039;&#039;CIVIL&#039;&#039; und den Vorgaben in den einzelnen Rollladen wird dabei mit Hilfe von [[SUNRISE_EL]] die effektive Fahrzeit berechnet, dort finden sich auch weitere Hinweise, zu den meisten anderen Optionen für die ersten beiden Attribute.&lt;br /&gt;
Bei allen Fensteröffnungen soll auf eine Lüften-Position gefahren werden, also schalten wir diese Funktion ebenfalls zentral an&amp;lt;ref&amp;gt;Sonst wird bei threeState-Sensoren nur bei &#039;&#039;tilted&#039;&#039; auf die in &#039;&#039;ASC_Ventilate_Pos&#039;&#039; gefahren.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 attr Rollladenautomatik ASC_autoShuttersControlComfort on &lt;br /&gt;
Zuletzt legen wir noch einen Temperatur-Sensor fest. Dieser wird beim Frostschutz sowie bei der Beschattung berücksichtigt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Rollladenautomatik ASC_temperatureSensor Aussentemperatur_Nord&lt;br /&gt;
attr Rollladenautomatik ASC_temperatureReading temperature&lt;br /&gt;
attr Rollladenautomatik ASC_freezeTemp 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
tbd: &lt;br /&gt;
* Rain&lt;br /&gt;
* Wind&lt;br /&gt;
==== Konfiguration der Rollladendevices ====&lt;br /&gt;
===== Fahrzeiten =====&lt;br /&gt;
Zur Konfiguration der Fahrzeiten bietet es sich an, eine ReadingsGroup zu nutzen, wie unter [[#Hilfsmittel|Hilfsmittel]] dargestellt. Alternativ kann man die Zeiten auch manuell in den einzelnen Rollläden hinterlegen.&lt;br /&gt;
===== Bewohner =====&lt;br /&gt;
Wird ein Raum von einer oder mehreren bestimmten Person/en bewohnt oder gibt es ein Sammel-Gerät für mehrere Bewohner, kann dies mit den Attributen &#039;&#039;ASC_Roommate_Device&#039;&#039; und &#039;&#039;ASC_Roommate_Reading&#039;&#039; einem Rollladen zugeordnet werden. Ist einer der Bewohner &#039;&#039;asleep&#039;&#039;, wird morgens erst geöffnet, wenn auch der letzte Roommate nicht mehr &#039;&#039;asleep&#039;&#039; ist.&lt;br /&gt;
===== Fensterkontakte  =====&lt;br /&gt;
Dann werden ggf. vorhandene Fensterkontakte zugeordnet und der Typ festgelegt, wobei im Falle von threeState-Sensoren das übergreifende &#039;&#039;ASC_autoShuttersControlComfort&#039;&#039; beachtet wird, wobei dann bei vollstäniger Öffnung des Fensters auf den in &#039;&#039;ASC_ComfortOpen_Pos&#039;&#039; festgelegten Wert gefahren wird.&lt;br /&gt;
===== Frostschutz =====&lt;br /&gt;
Zuletzt können die Attribute &#039;&#039;ASC_Antifreeze&#039;&#039; und &#039;&#039;ASC_Antifreeze_Pos&#039;&#039; festgelegt werden, wenn die Frostschutzfunktion aktiviert werden soll.&lt;br /&gt;
=== Beschattung ===&lt;br /&gt;
==== Konfiguration des ASC-Devices ====&lt;br /&gt;
Benötigt werden Informationen zum Sonnenstand. Hierfür wird ein astro- oder twilight-Device benötigt. Ist ein solches definiert, wird dies - ggf. auch nach einem Neustart vom Modul automatisch erkannt und in das Attribut &#039;&#039;ASC_twilightDevice&#039;&#039; eingetragen. Wir legen daher zunächst ein entsprechendes Device an bzw. passen die Angabe ggf. an, wenn ein anderes als das eingetragene genutzt werden soll.&lt;br /&gt;
Weiter ist ein Temperatursensor für die Beschattung festzulegen (&#039;&#039;ASC_temperatureSensor.*&#039;&#039;-Attribute) wie bereits oben beschrieben.&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration der Rollladendevices ====&lt;br /&gt;
Zum einen legt man einen Helligkeitssensor fest (&#039;&#039;ASC_Brightness_Sensor&#039;&#039; und &#039;&#039;ASC_Brightness_Reading&#039;&#039;). Dieser ist der eigentliche Trigger. Nur, wenn sich der Brightness Wert ändert, werden Azimut, Elevation, Temperatur und die Ein- und Ausfallswinkel ausgelesen und/oder berechnet und basierend auf diesen Werten entschieden ob shading in oder shading out stattfinden soll, die Schwellwerte werden in &#039;&#039;ASC_Shading_StateChange_Sunny&#039;&#039; (Beschattung soll eingeschaltet werden) und &#039;&#039;ASC_Shading_StateChange_Cloudy&#039;&#039; (Beschattung soll beendet werden) festgelegt, wobei immer nur gefahren wird, wenn auch alles andere - insbesondere die Mindesthöhe des Sonnenstands (&#039;&#039;ASC_Shading_Min_Elevation&#039;&#039;) und die Mindesttemperatur &#039;&#039;ASC_Shading_Min_OutsideTemperature&#039;&#039; - passt.&lt;br /&gt;
Dann sind die Winkelangaben festzulegen, ggf. kann ein Kompass zu Hilfe genommen werden (&#039;&#039;ASC_Shading_Direction&#039;&#039; ist die Richtung des Fensters, 90 Grad entspricht Ost, 180 Grad Süden, &#039;&#039;ASC_Shading_Angle_Left&#039;&#039; ist der Sonneneintritt ins Zimmer, wird von -Direction abgezogen, &#039;&#039;ASC_Shading_Angle_Right&#039;&#039; hat diesselbe Funktion für den Austrittswinkel.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Funktionen ===&lt;br /&gt;
==== Privacy ====&lt;br /&gt;
Werden hierfür Werte festgelegt, werden die betreffenden Rollläden die festgelegte Zeit vor dem abendlichen Schließen vorab teilweise geschlossen. Dies kann z.B. gewünscht sein, um Rollläden zur Straße hin mit viel Fußgängerverkehr zwar nicht vollständig abzudunkeln, aber gleichzeitig zu verhindern, dass von außen in Wohnräume geschaut werden kann, sobald dort das Licht angeschaltet wird&lt;br /&gt;
==== BlockingTime====&lt;br /&gt;
Bewirkt, dass nach einer manuellen Fahrt wird eine vom ASC Modul initiierte Fahrt zunächst ausgesetzt wird, bis die im Attribute angegebene Zeit überschritten ist. Erst dann wird eine dann vom ASC Modul initiierte Fahrt tatsächlich durchgeführt.&lt;br /&gt;
Genau so wird ein hochfahren eines Rollos durch das ASC Modul nicht mehr ausgeführt wenn es innerhalb der Zeit von ASC_BlockingTime_beforNightClose und das runterfahren wird nicht mehr erfolgen wenn es innerhalb von ASC_BlockingTime_beforDayOpen ist.&lt;br /&gt;
Beispiel: Meine Tochter geht früh aus Haus und Ihre Rollos sind nicht hoch gefahren. Diese fahren auch nicht mehr hoch da die ausschließlich bei home (anwesend) fahren sollen. Nun kommt sie am Nachmittag um 16:23 Uhr nach Hause, eigentlich sollten nun die Rollos fahren. Doch die Sonnenuntergangsfahrt (schließen) wäre schon 16:51 Uhr und damit innerhalb der 3600 ASC_BlockingTime_beforNightClose. Die Rollos bleiben also unten. Es lohnt sich für die paar Minuten einfach nicht mehr.&lt;br /&gt;
==== wiggle====&lt;br /&gt;
Mit einem &amp;lt;code&amp;gt;set &amp;lt;ASC-Device&amp;gt; wiggle&amp;lt;/code&amp;gt; können alle Rollladen mit einem entsprechenden Attribut zu einer kurzen Fahrt veranlasst werden, nach Ablauf von einer Minute wieder um denselben Wert zurück. Dabei wird jeweils in die Richtung gefahren, die den weiteren Weg ermöglicht. Wenn also zu 70% geschlossen ist, wird der Rollladen hoch fahren.&lt;br /&gt;
==== Partymode ====&lt;br /&gt;
Dieser wird am ASC-Device selbst aktiviert mittels &amp;lt;code&amp;gt;set &amp;lt;ASC-Device&amp;gt; partyMode on&amp;lt;/code&amp;gt;. Alle Rollladen-Devices, welche das Attribut &#039;&#039;ASC_Partymode&#039;&#039; auf &#039;&#039;on&#039;&#039; gestellt haben, werden nicht mehr gesteuert. Der letzte Schaltbefehl, der durch ein Fensterevent oder Bewohnerstatus an die Rollläden gesendet wurde, beim Beenden des Modus durch &amp;lt;code&amp;gt;set ASC-Device partyMode off&amp;lt;/code&amp;gt; ausgeführt.&lt;br /&gt;
==== lock-out ====&lt;br /&gt;
(tbd auch hier: Doku ist etwas verteilt, könnte man im Wiki jeweils unter einem eigenen Unterabschnitt im Zusammenhang darstellen)&lt;br /&gt;
&lt;br /&gt;
==== SelfDefense ====&lt;br /&gt;
Das bei einem absent nur da die Rollläden geschlossen werden wo das Fenster vergessen wurde zu schließen.&lt;br /&gt;
Beim wechsel in gone wird nur an den makierten Terassentüren (&#039;&#039;ASC_ShuttersPlace terrace&#039;&#039;) der Rollladen runter gefahren.&lt;br /&gt;
Weitere Attribute dazu: &#039;&#039;ASC_Self_Defense_Exclude&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sonstige Hinweise ==&lt;br /&gt;
* Werden Attribute geändert, kann es vereinzelt vorkommen, dass das ASC-Modul dies nicht mitbekommt und das tatsächliche Verhalten nicht den Erwartungen entspricht. In so einem Fall empfielt es sich, das NOTIFYDEV nochmals aufbauen zu lassen mit &amp;lt;code&amp;gt;set &amp;lt;ASC-Modul&amp;gt; createNewNotifyDev&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Link2Forum|Topic=92628|LinkText=&amp;quot;Thread zum Modul im Forum&amp;quot;}}&lt;br /&gt;
* {{Link2Forum|Topic=90751|LinkText=&amp;quot;Thread zur Entwicklung im Forum&amp;quot;}} &lt;br /&gt;
* {{Link2Forum|Topic=73964|LinkText=&amp;quot;Thread zu den Scripten von user cluni&amp;quot;}}, die der Entwicklung des Moduls zugrunde liegen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Rollladensteuerung]]&lt;/div&gt;</summary>
		<author><name>Plaicy</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=SIP-Client&amp;diff=30486</id>
		<title>SIP-Client</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=SIP-Client&amp;diff=30486"/>
		<updated>2019-05-23T18:50:37Z</updated>

		<summary type="html">&lt;p&gt;Plaicy: typos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=SIP-Client für FHEM &lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=SIP&lt;br /&gt;
|ModForumArea=Sonstiges&lt;br /&gt;
|ModTechName=96_SIP.pm&lt;br /&gt;
|ModOwner=Wzut ({{Link2FU|1172|Forum}} / [[Benutzer Diskussion:Wzut|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Modul &#039;&#039;&#039;SIP&#039;&#039;&#039; ermöglicht die Entgegennahme (DTMF-Töne interpretieren, kontrollierte Annahme) sowie die Durchführung (Audiofile abspielen, DTMF-Töne senden, Textansage) von Anrufen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== FHEM-Server ===&lt;br /&gt;
Für den Remote-Zugang muss das Modul Net::SIP installiert sein; auf einem Raspberry Pi oder unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo cpan install Net::SIP&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder auch&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install libnet-sip-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls cpan nicht funktioniert, hilft vielleicht dieser Forumseintrag https://forum.fhem.de/index.php/topic,40219.msg421446.html#msg421446&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Falls Ihr Text2Speech verwenden wollt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vorbereitung&lt;br /&gt;
* SoX installieren &lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install sox &amp;lt;/code&amp;gt;&lt;br /&gt;
* mp3 Unterstützung für SoX installieren&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install libsox-fmt-mp3&amp;lt;/code&amp;gt;&lt;br /&gt;
* Text2Speech als Server Device anlegen &lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name z.B myT2S&amp;gt; text2speech none&amp;lt;/code&amp;gt;&lt;br /&gt;
* beim SIP Device dieses Server Device im Attribut T2S_Device eintragen&lt;br /&gt;
&lt;br /&gt;
=== SIP-Server ===&lt;br /&gt;
Der SIP-Client muss sich an einem SIP-Server anmelden (Fritzbox, Asterisk, VoIP-Provider). &lt;br /&gt;
Auf dem SIP-Server, mit dem sich der Client verbinden soll, muss ein User-Account vorhanden sein bzw. angelegt werden. &lt;br /&gt;
In der Fritzbox muss z.B. ein neues Telefoniegerät vom Typ LAN/WLAN angelegt und ein Passwort (mind. 8 Stellen und Stufe &#039;gut&#039;) vergeben werden. Das erzeugt ein neues internes Device im internen Rufnummernbereich **62x, typischerweise die 620. Es sollte kontrolliert werden, ob bei den Anmeldeinformationen der Benutzername der Nebenstelle entspricht (z.B. 620) und ein Passwort eingetragen ist.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
Die verwendete Library Net::SIP fordert mehr Ressourcen als RaspberryPi, BananaPi &amp;amp; Co hergeben. Bitte testet, ob Eure Hardware Audofiles sauber abspielen sowie sicher DTMF-Töne empfangen kann und für Euren Einsatzzweck geeignet ist. Erste Tests mit einem Raspi3 lagen im akzeptablen Bereich.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Erste Schritte ===&lt;br /&gt;
Spätestens nach einem &#039;update all&#039; sollte das Modul &#039;&#039;&#039;96_SIP.pm&#039;&#039;&#039; verfügbar sein.&lt;br /&gt;
&lt;br /&gt;
Nun ist der SIP-Client als Device in FHEM anzulegen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; SIP&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend sollten alle sip_Attribute geprüft und für die eigene Umgebung gesetzt werden. Ebenso ist das Passwort mittels set-Command zu speichern.&lt;br /&gt;
&lt;br /&gt;
Siehe auch {{Link2CmdRef|Lang=de|Anker=SIP}}&lt;br /&gt;
&lt;br /&gt;
=== Mögliche Fehlermeldungen ===&lt;br /&gt;
Sollte schon bei &amp;lt;code&amp;gt;define mySIP SIP&amp;lt;/code&amp;gt; die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte &#039;update all&#039; durchführen.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Basics &amp;amp; Allgemeines&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;sip_from&#039;&#039;&#039;&lt;br /&gt;
: Meine SIP-Client-Info. Das Format ist &amp;lt;nowiki&amp;gt;sip:Benutzername@fritz.box&amp;lt;/nowiki&amp;gt;, z.B. meinuser@fritz.box. &amp;quot;meinuser&amp;quot; ist der Benutzername, der bei der Einrichtung des neuen Benutzers in der Fritzbox angegeben wurde. Für Fritzboxen mit fritz!OS älter als 6.8 ist das Format abweichend noch &amp;lt;nowiki&amp;gt;sip:620@fritz.box&amp;lt;/nowiki&amp;gt;. Dies ist der Default bei Anlage des SIP-Devices. &lt;br /&gt;
* &#039;&#039;&#039;sip_ip&#039;&#039;&#039;&lt;br /&gt;
: Die IP-Addresse meines FHEM-Servers.&lt;br /&gt;
* &#039;&#039;&#039;sip_port&#039;&#039;&#039;&lt;br /&gt;
: Port der für den SIP-Client genutzt wird. Default ist 5060 und wird automatisch um 10 erhöht wenn der Port nicht frei ist.&lt;br /&gt;
* &#039;&#039;&#039;sip_registrar&#039;&#039;&#039;&lt;br /&gt;
: Hostname oder IP-Addresse des SIP-Servers mit dem sich der Client verbindet. Default ist fritz.box.&lt;br /&gt;
* &#039;&#039;&#039;sip_user&#039;&#039;&#039;&lt;br /&gt;
: User Name des SIP-Clients. Default ist 620. Ab 6.8 ist der Benutzername aus sip_from anzugeben, z.B. meinuser.&lt;br /&gt;
: Anmerkung: Passwort wird über &amp;quot;set &amp;lt;device&amp;gt; password &#039;&#039;mypassword&#039;&#039;&amp;quot; gesetzt.&lt;br /&gt;
* &#039;&#039;&#039;sip_listen&#039;&#039;&#039;&lt;br /&gt;
: Das Attribut bietet folgende Optionen&lt;br /&gt;
: - &#039;&#039;&#039;none&#039;&#039;&#039;: keine Aktion (&#039;listen&#039; kann auch nicht manuell gestartet werden)&lt;br /&gt;
: - &#039;&#039;&#039;dtmf&#039;&#039;&#039;: Beim FHEM-Start geht das Device automatisch in den Status listen und wartet auf DTMF-Anrufer (listen_dtmf). Alternativ kann der Prozess manuell via &#039;listen&#039; gestartet werden.&lt;br /&gt;
: - &#039;&#039;&#039;wfp&#039;&#039;&#039;: Beim FHEM-Start geht das Device automatisch in den Status listen wait-fetch-play (listen_wfp). Alternativ kann der Prozess manuell via &#039;listen&#039; gestartet werden.&lt;br /&gt;
: - &#039;&#039;&#039;echo&#039;&#039;&#039;: Spielt dem Anrufer nur sein eigenes Echo wider. Sonst nix (siehe auch Anwendungsfälle).&lt;br /&gt;
* &#039;&#039;&#039;sip_waittime&#039;&#039;&#039;&lt;br /&gt;
: Maximale Wartezeit bei listen_wfp bis das Gespräch automatisch angenommen wird.&lt;br /&gt;
* &#039;&#039;&#039;sip_ringtime&#039;&#039;&#039;&lt;br /&gt;
: listen: legt fest wie lange das Modul warten soll bis es den Anruf annimmt. Defaultwert ist 2, das entspricht ca. 1x klingeln.&lt;br /&gt;
* &#039;&#039;&#039;sip_force_interval&#039;&#039;&#039;&lt;br /&gt;
: Pause in Sekunden für nicht erfolgreiche &amp;quot;force&amp;quot;-Anrufe, bis der nächste Versuch gestartet wird.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sip_filter&#039;&#039;&#039;&lt;br /&gt;
: ist eine Komma getrennte Liste von Rufnummern oder Rufnummernteilen die festlegen, ob der Client bei listen überhaupt abheben soll.&lt;br /&gt;
: Bsp.: attr mySIP sip_filter **61,123&lt;br /&gt;
: **61 = alle DECT Telefone der Fritzbox (610 -619 )&lt;br /&gt;
: 123 = alle Rufnummern in denen die Folge 123 enthalten ist.  &lt;br /&gt;
: Wenn das Attribut sip_filter gelöscht ist werden alle Anrufe angenommen. Das Atrribut entspricht einer Whitelist der Rufnummern die akzepziert/angenommen werden. Anrufe von nicht gelisteten Rufnummern werden einfach ignoriert.&lt;br /&gt;
&lt;br /&gt;
* Anmerkung zum &#039;&#039;&#039;Audioformat&#039;&#039;&#039;&lt;br /&gt;
: Für Net::SIP müssen die Audiofiles im alaw- oder ulaw-Format vorliegen und können mit folgendem Command erzeugt werden&lt;br /&gt;
: &#039;&#039;&#039;sox &amp;lt;file&amp;gt;.wav -t raw -r 8000 -c 1 -e a-law &amp;lt;file&amp;gt;.alaw&#039;&#039;&#039;&lt;br /&gt;
: da nur diese raw audio Formate unterstützt werden. &lt;br /&gt;
: Vom SIP-Modul unterstützte/erkannte Endungen sind .mp3, .alaw und .ulaw. mp3-Files werden automatisch in alaw umgewandelt (das setzt aber einen entsprechenden Konverter wie sox oder ffmpeg voraus). Bitte darauf achten, dass das audiofile und der komplette Pfad die passenden Permissions hat, damit der FHEM User das File auch lesen darf.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;DTMF empfangen&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;sip_dtmf_loop&#039;&#039;&#039;&lt;br /&gt;
: legt für den listen_dtmf-Modus fest wie oft ein DTMF Code eingeben werden soll ( once oder loop, default ist once ). &lt;br /&gt;
: Bei &#039;once&#039; erwartet der SIP-Cleint die Eingabe eines Codes in der angegebenen Länge und beendet den Anruf. &lt;br /&gt;
: Bei &#039;loop&#039; startet eine Endlosschleife aus Ansage-&amp;gt;Code-Erfassung-&amp;gt;Quittung-&amp;gt;Loop bis der Anrufer irgendwann auflegt.&lt;br /&gt;
* &#039;&#039;&#039;sip_dtmf_size&#039;&#039;&#039;&lt;br /&gt;
: Die Anzahl der erwarteten DTMF-Töne im listen_dtmf-Modus (1 bis 4)&lt;br /&gt;
* &#039;&#039;&#039;sip_audiofile_dtmf&#039;&#039;&#039;&lt;br /&gt;
: Audiofile das dem Anrufer im listen_dtmf-Modus vorgespielt wird und ihn auffordert einen Code einzugeben. Ist kein File angegeben hört man ein Geräusch.&lt;br /&gt;
* &#039;&#039;&#039;sip_audiofile_ok&#039;&#039;&#039;&lt;br /&gt;
: Audiofile das dem Anrufer im listen_dtmf-Modus als Quittungston vorgespielt wird. &lt;br /&gt;
* &#039;&#039;&#039;sip_blocking&#039;&#039;&#039;&lt;br /&gt;
: Hier kann so etwas wie eine Blacklist von Rufnummern angegeben werden, die explizit weggedrückt werden. Jede Rufnummer die so behandelt werden soll muss zuerst erfolgreich durch den sip_filter durch und kann danach erst aktiv geblockt werden. Die Syntax ist die gleiche wie bei sip_filter, allerdings gibt es hier den Joker &#039;&#039;&#039;.*&#039;&#039;&#039; . Ist dieser gesetzt wird jede ankommende Rufnummer geblockt. Damit lassen sich begrenzt Aktionen auslösen (das Event &#039;ringing_*&#039; wird nach wie vor ausgelöst und die Rufnummer wird als Reading gesetzt) ohne dass Verbindungskosten anfallen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Auf anruf warten und annehmen&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;sip_audiofile_wfp&#039;&#039;&#039;&lt;br /&gt;
: Audiofile das nach dem Command &#039;&#039;&#039;fetch&#039;&#039;&#039; abgespielt wird. &lt;br /&gt;
* &#039;&#039;&#039;sip_elbc&#039;&#039;&#039;&lt;br /&gt;
: erlaubte Werte: no | yes. elbc steht für &#039;End Listen Befor Call&#039;. Bei Option &#039;yes&#039; wird ein laufender Listen Prozess beendet falls parallel ein Call rausgehen soll. Danach wird der listen wieder neu gestartet. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Anrufen und DTMF senden&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;sip_dtmf_send&#039;&#039;&#039;&lt;br /&gt;
: Bestimmt die Übertragungsart der angegebenen DTMF-Töne und bietet folgende Möglichkeiten:&lt;br /&gt;
: &#039;audio&#039;: Es werden Audiotöne übermittelt&lt;br /&gt;
: &#039;rfc2833&#039;: Es erfolgt eine Übertragung nach RFC2833 (für das menschliche Ohr weniger ansprechend)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Anrufen und etwas senden&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;sip_audiofile_call&#039;&#039;&#039;&lt;br /&gt;
: Audiofile das dem angerufenen bei &#039;&#039;&#039;call&#039;&#039;&#039; vorgespielt wird. &lt;br /&gt;
* &#039;&#039;&#039;sip_call_audio_delay&#039;&#039;&#039;  &lt;br /&gt;
: Damit wird festgelegt wie lange bei einem Call mit dem abspielen des Audiofiles gewartet werden soll nachdem man den Anruf angenommen hat. Gültige Werte sind 0 - 3 in 0.25 (1/4) Sekunden Schritten. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Anrufen und etwas sagen&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;T2S_Device&#039;&#039;&#039;&lt;br /&gt;
: Name Eures in FHEM eingerichteten Text2Speech-Devices &lt;br /&gt;
* &#039;&#039;&#039;T2S_Timeout&#039;&#039;&#039;&lt;br /&gt;
: Timeout für die Text2Speech-Konvertierung (könnte ja sein, dass der TTS-Service im Internet überlastet ist)&lt;br /&gt;
* &#039;&#039;&#039;audio_converter&#039;&#039;&#039;&lt;br /&gt;
: Der für die Konvertierung zu verwendende (und vorab installierte) Audiokonverter. Auswahl: sox oder ffmpeg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ergänzungen ab Version 1.75&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
alle Attribute die mit sip_audiofile_ beginnen dürfen einen Inhalt der folgenden Form haben:&amp;lt;br /&amp;gt;&lt;br /&gt;
a. ein .alw oder .ulaw Filename inklusive Pfad&amp;lt;br /&amp;gt;&lt;br /&gt;
b. ein .mp3 File + Pfad -&amp;gt; wird dann automatisch zu .ulaw gewandelt , Audio Konverter &amp;amp; Schreibrechte im Pfad sind Pflicht&amp;lt;br /&amp;gt;&lt;br /&gt;
c. ein Text beginnend mit ! der von Text2Speach in eine .mp3 Datei gewandelt wird, diese wird danach behandelt wie unter Punkt b.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wurde Punkt b. oder c. einmal erfolgreich durchlaufen wird beim nächsten Mal direkt die erzeugte .ulaw Datei verwendet.&lt;br /&gt;
&lt;br /&gt;
Siehe auch {{Link2CmdRef|Lang=de|Anker=SIP}}&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
&lt;br /&gt;
Das Modul kennt derzeit folgende Commands&lt;br /&gt;
&lt;br /&gt;
* set &amp;lt;name&amp;gt; &#039;&#039;&#039;password&#039;&#039;&#039;&lt;br /&gt;
: Passwort für den User sip_user hinterlegen.&lt;br /&gt;
&lt;br /&gt;
* set &amp;lt;name&amp;gt; &#039;&#039;&#039;reset&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: Stoppt laufende listen-Prozess und initalisiert das Device.&lt;br /&gt;
&lt;br /&gt;
* set &amp;lt;name&amp;gt; &#039;&#039;&#039;call &amp;lt;nummer&amp;gt; [&amp;lt;maxtime&amp;gt;] [&amp;lt;nachricht&amp;gt;] [*nn] [&amp;amp;][nn]&#039;&#039;&#039;&lt;br /&gt;
: Startet einen Anruf an die angegebene Nummer.&lt;br /&gt;
: Optional kann die maxtime angegeben werden. Wird keine angegeben wird der Defaultwert von 30 verwendet.&lt;br /&gt;
: Optional kann eine Nachricht &lt;br /&gt;
: - in Form eines &#039;&#039;&#039;Audiofiles&#039;&#039;&#039; angegeben werden. Das File ist mit dem vollen Pfad oder dem relativen ab dem Verzeichnis mit fhem.pl anzugeben. Bitte darauf achten, dass das audiofile und der Pfad dort hin passende Permissions hat, damit FHEM das File auch lesen darf. Die maxtime ist in dem Fall nicht optional sondern zwingend.&lt;br /&gt;
: - als &#039;&#039;&#039;DTMF&#039;&#039;&#039;-Sequenz angegeben werden. Diese mit einem Prefix &#039;-&#039; versehen werden, also z.B. &#039;&#039;&#039;-&#039;&#039;&#039;#47.&lt;br /&gt;
: - als &#039;&#039;&#039;Text&#039;&#039;&#039; angegeben werden. Dieser mit einem Prefix &#039;!&#039; versehen werden, also z.B. &#039;&#039;&#039;!&#039;&#039;&#039;Hier spricht dein FHEM.&lt;br /&gt;
: Bitte hierfür unter &#039;Voraussetzungen&#039; den Hinweis auf TTS beachten.&lt;br /&gt;
: Wird ein Wiederholungsfaktor in der Form &#039;&#039;&#039;*nn&#039;&#039;&#039; angegeben, wird der Anruf ausgeführt, die Nachricht einmal abgespielt und dann nn mal wiederholt. &lt;br /&gt;
: Wird als Wiederholungsfaktor ein negativer Wert angegeben (z.B. &#039;&#039;&#039;*-2&#039;&#039;&#039;), passiert folgendes: Die Nachricht wird zwar genau wie bei *2 dreimal abgespielt, allerdings erlaubt das - vor der 2 das die Nachricht nur einmal vollständig übertragen werden muß. Der call_state nach dem Call hätte dann z.B. den Wert &amp;quot;ok peer hangup&amp;quot;.&lt;br /&gt;
: Wird der Call mit &#039;&#039;&#039;&amp;amp;&#039;&#039;&#039; (force) beendet signalisiert dies, dass er wichtig ist und unbedingt zugestellt werden muss. Der SIP-Client versucht es dann so lange, bis der Anrufer erreicht wird. WICHTIG: wählt die maxtime groß genug damit das Audiofile auch wirklich komplett abgespielt werden kann, bzw. hört&#039;s euch auch bis zum Ende an! Wenn ein priorisierter Anruf vorzeitig endet (quasi NOK) wird er nach 1 Minute wiederholt, und zwar so lange bis er erfolgreich war. Wollt Ihr den Ablauf stoppen bitte das von der Wiederholungsschleife gesetzte &#039;&#039;&#039;at&#039;&#039;&#039; löschen, es befindet sich im gleichen Raum wie euer SIP Device. Dabei gibt es folgende Möglichkeiten:&lt;br /&gt;
: set call **611 30 !Das ist ein Test &amp;amp;   &amp;lt;-- wird im Fehlerfall nach 60 Sekunden wiederholt  oder nach  sip_force_interval wenn vorhanden.&lt;br /&gt;
: set call **611 30 !Das ist ein Test &amp;amp;300  &amp;lt;-- wiederholt im Fehlerfall nach 5 Minuten egal welchen Wert sip_force_interval hat.&lt;br /&gt;
: Werden mehrere Set Call unmittelbar hintereinander abgesetzt, werden diese intern gestackt und nacheinander abgearbeitet.&lt;br /&gt;
&lt;br /&gt;
* set &amp;lt;name&amp;gt; &#039;&#039;&#039;listen&#039;&#039;&#039;&lt;br /&gt;
: Manueller Start des listen-Prozesses. Setzt voraus, dass die Variable sip_listen auf dtmf oder wfp gesetzt ist:&lt;br /&gt;
: &#039;&#039;&#039;dtmf&#039;&#039;&#039;: Der SIP-Client wird in einen Status versetzt in dem er automatisch Anrufe annimmt. Bei einem Anruf wird im Reading &#039;caller&#039; die Nummer bzw. Id des Anrufers angezeigt. Dem Anrufer wird der eigene Ton als Echo zurückgespielt. Über die Eingabe von &#039;&#039;&#039;#&#039;&#039;&#039; gefolgt von 2 Zahlen und anschließendem Auflegen kann eine Zahl an das Reading &#039;&#039;&#039;dtmf&#039;&#039;&#039; übergeben werden. Voraussetzung: Das anrufende Telefon ist auf Tonwahl gestellt (DTMF).&lt;br /&gt;
: &#039;&#039;&#039;wfp&#039;&#039;&#039;: Der SIP-Client wird in einen Status versetzt in dem er auf Anrufe wartet (wfp steht für wait-fetch-play). Erfolgt ein Anruf an den Client, wechselt das Reading &#039;caller_state&#039; zu &#039;ringing_*&#039;, im Reading &#039;caller&#039; wird die Nummer bzw. Id des Anrufers angezeigt. Nun kann das Gespräch via set-Command &#039;fetch&#039; angenommen oder der Anruf via &#039;reject&#039; explizit abgelehnt werden. Das als sip_audiofile angegebene File wird abgespielt. Anschließend wechselt der Status wieder zu listen_wfp.&lt;br /&gt;
&lt;br /&gt;
* set &amp;lt;name&amp;gt; &#039;&#039;&#039;fetch&#039;&#039;&#039;&lt;br /&gt;
: Anruf im listen_wfp-Modus annehmen.&lt;br /&gt;
&lt;br /&gt;
* set &amp;lt;name&amp;gt; &#039;&#039;&#039;reject&#039;&#039;&#039;&lt;br /&gt;
: Anruf im listen_wfp-Modus ablehnen.&lt;br /&gt;
&lt;br /&gt;
=== Readings ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;call&#039;&#039;&#039;: Die Rufnummer des ausgehenden Anrufs. &lt;br /&gt;
* &#039;&#039;&#039;call_state&#039;&#039;&#039;: Status für ausgehende Anrufe. &lt;br /&gt;
* &#039;&#039;&#039;call_time&#039;&#039;&#039;: Dauer des durchgeführten Anrufs in Sekunden&lt;br /&gt;
* &#039;&#039;&#039;call_success&#039;&#039;&#039;: mögliche Werte 0 oder 1&lt;br /&gt;
: 0 = call_state ist ungleich ok , 1 = call_state ist gleich ok&lt;br /&gt;
: Auf Call mit Repeat übertragen bedeutet das:&lt;br /&gt;
: eine 0 wenn die Wiederholungszahl positiv ist und die tatsächliche Anzahl nicht erreicht wurde, aber &lt;br /&gt;
: eine 1 bei call_state  &amp;quot;ok peer hangup&amp;quot;   &lt;br /&gt;
* &#039;&#039;&#039;caller&#039;&#039;&#039;: Die Rufnummer bzw. Info des aktuellen Anrufers. &lt;br /&gt;
* &#039;&#039;&#039;caller_state&#039;&#039;&#039;: Status für eingehende Anrufe. &lt;br /&gt;
* &#039;&#039;&#039;caller_time&#039;&#039;&#039;: Dauer des angenommenen Anrufs in Sekunden&lt;br /&gt;
* &#039;&#039;&#039;dtmf&#039;&#039;&#039;: Die via Tonwahl (DTMF) eingegebenen Zahlen.&lt;br /&gt;
* &#039;&#039;&#039;state&#039;&#039;&#039;: Der Status des Devices.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Anruf tätigen und Sound abspielen ===&lt;br /&gt;
* Den Anruf initiieren&lt;br /&gt;
  &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; call &amp;lt;nummer&amp;gt; [&amp;lt;dauer&amp;gt;] [&amp;lt;audiofile oder Textnachricht&amp;gt;]&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;set mySip call 081547111 30 ./tada.alaw&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;set mySip call 081547111 30 !Hier ist dein FHEM Server&amp;lt;/code&amp;gt;&lt;br /&gt;
* Die Default-Dauer beträgt 30 Sekunden.&lt;br /&gt;
* Wird kein Audiofile angegeben, wird nur die Verbindung hergestellt und nach der Anrufdauer wieder unterbrochen.&lt;br /&gt;
* Anmerkung: Das Audiofile muss das Format PCM/8000 haben.&lt;br /&gt;
* Der Angerufene nimmt das Gespräch entgegen, das Audiofile wird abgespielt.&lt;br /&gt;
&lt;br /&gt;
=== Anruf tätigen und DTMF-Töne senden ===&lt;br /&gt;
* Den Anruf initiieren&lt;br /&gt;
: &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; call &amp;lt;nummer&amp;gt; &amp;lt;dauer&amp;gt; &amp;lt;-tastenkombination&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Die Tastenkombination muss mit einem vorangestellten Minus (-) nach der Zielnummer folgen, also z.B. **1 -#23&lt;br /&gt;
* Der Angerufene nimmt das Gespräch entgegen, die Tonfolge wird abgespielt.&lt;br /&gt;
&lt;br /&gt;
=== Auf Anruf warten und DTMF-Töne empfangen ===&lt;br /&gt;
* Der SIP-Client wird in den Listen-Modus versetzt.&lt;br /&gt;
: Das Attribut sip_listen auf &#039;&#039;&#039;dtmf&#039;&#039;&#039; setzen und&lt;br /&gt;
: &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; listen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Die Nebenstelle des SIP-Clients wird von einem DTMF-fähigen Telefon aus angerufen.&lt;br /&gt;
* Wenn der SIP-Client das Gespräch angenommen hat, betätigt man &#039;&#039;&#039;#&#039;&#039;&#039;, gefolgt von zwei Ziffern und legt dann wieder auf. Wichtig: Es müssen immer genau 3 Tasten betätigt werden (# und nm), damit das Reading dtmf gefüllt wird. n und m müssen zwei verschiedene Zahlen sein (0-9) oder ein Stern.&lt;br /&gt;
* Im Reading &#039;&#039;&#039;dtmf&#039;&#039;&#039; ist diese zweistellige Zahl zu sehen und kann ggf. mit einem notify ausgewertet werden.&lt;br /&gt;
&lt;br /&gt;
=== Auf Anruf warten und kontrolliert annehmen ===&lt;br /&gt;
* Der SIP-Client wird in den Listen-Modus versetzt.&lt;br /&gt;
: Das Attribut sip_listen auf &#039;&#039;&#039;wfp&#039;&#039;&#039; setzen und&lt;br /&gt;
: &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; listen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Die Nebenstelle des SIP-Clients wird angerufen.&lt;br /&gt;
* Im Reading &#039;&#039;&#039;caller&#039;&#039;&#039; ist die Nummer bzw. die Info des Callers zu sehen, im &#039;&#039;&#039;caller_state&#039;&#039;&#039; erscheint &#039;ringing&#039;.&lt;br /&gt;
* Soll der Anruf angenommen werden setze ich den Status des Devices mittels set auf &#039;&#039;&#039;fetch&#039;&#039;&#039;:&lt;br /&gt;
: &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
* Der SIP-Client nimmt den Anruf an und spielt das im Attribut sip_audiofile angegebene File ab.&lt;br /&gt;
* Der SIP-Client legt auf und geht wieder in den Status &#039;&#039;&#039;listen_wfp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Auf Anruf warten und Aktion auslösen ===&lt;br /&gt;
* Der SIP-Client wird in den Listen-Modus versetzt.&lt;br /&gt;
: Das Attribut sip_listen auf &#039;&#039;&#039;wfp&#039;&#039;&#039; setzen und&lt;br /&gt;
: &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; listen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Die Nebenstelle des SIP-Clients wird angerufen.&lt;br /&gt;
* Im Reading &#039;&#039;&#039;caller&#039;&#039;&#039; ist die Nummer bzw. die Info des Callers zu sehen, im &#039;&#039;&#039;caller_state&#039;&#039;&#039; erscheint &#039;ringing&#039;.&lt;br /&gt;
* FHEM kann auf Grund dieser Events eine Aktion durchführen.&lt;br /&gt;
* Der Anruf wird dann von FHEM abgebrochen. Dafür wird der Befehl &#039;&#039;&#039;reject&#039;&#039;&#039; genutzt:&lt;br /&gt;
: &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; reject&amp;lt;/code&amp;gt;&lt;br /&gt;
* Der Anrufer weiß auf Grund der Ablehnung, dass FHEM aktiv war.&lt;br /&gt;
* Der SIP-Client legt auf und geht wieder in den Status &#039;&#039;&#039;listen_wfp&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Fritzbox + Doorline - Telefonklingeln beenden ===&lt;br /&gt;
Szenario: Als Türklingel ist eine Doorline im Einsatz die auf Direktannahme eingestellt ist. Klingelt jemand an der Tür, erfolgt ein &#039;Anruf&#039; an die in der Rufgruppe definierten Telefone. Man kann den Anruf entgegennehmen, um zu hören wer an der Tür ist, bevor man die Tür öffnet. Geht man direkt zur Tür, klingeln die Telefone insgesamt 30 Sekunden lang bis sie verstummen. Hat man die Haustür mit einem Türkontakt versehen, hilft folgender Ansatz:&lt;br /&gt;
* Der SIP-Client wird in der Fritzbox in die Rufgruppe der Türklingel aufgenommen.&lt;br /&gt;
* Das Attribut &#039;sip_listen&#039; wird auf &#039;wfp&#039; gesetzt.&lt;br /&gt;
* Der SIP-Client wird in den Listen-Modus &#039;wait-fetch-play&#039; versetzt (Die sip_waittime sollte größer als die Klingeldauer der Doorline sein).&lt;br /&gt;
: &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; listen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klingelt jemand an der Tür, wird unter anderem die Nebenstelle des SIP-Clients angerufen.&lt;br /&gt;
* Über ein DOIF greift man die Kombination SIP-Client caller_state &#039;ringing&#039; und Haustürkontakt closed-&amp;gt;open ab und&lt;br /&gt;
* setzt  den Status des Devices mittels set auf fetch:&lt;br /&gt;
: &amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
* Der SIP-Client nimmt den Anruf an und spielt das im Attribut sip_audiofile angegebene File ab.&lt;br /&gt;
* Die Telefone verstummen.&lt;br /&gt;
&lt;br /&gt;
In FHEM sieht das dann z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
Es gibt ein Device &#039;&#039;&#039;HaustuerStatus&#039;&#039;&#039; das den Status des Türkontaktes abbildet: &amp;quot;closed&amp;quot; oder &amp;quot;open&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Es wird ein Dummy-Device &#039;&#039;&#039;HaustuerStatusVar&#039;&#039;&#039; für die Status des Automaten angelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define HaustuerStatusVar dummy&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und ein DOIF &#039;&#039;&#039;TuerklingelAus&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define TuerklingelAus DOIF &lt;br /&gt;
(([HaustuerStatus:state] eq &amp;quot;closed&amp;quot;) and ([FhemSipClient:caller_state] =~ &amp;quot;ringing&amp;quot;) and ([FhemSipClient:caller] eq &amp;quot;Klingel sip:**12\@fritz.box&amp;quot;)) &lt;br /&gt;
(set HaustuerStatusVar ringing;; set HM_4A4047_Mp3 playTone 001 1 10) &lt;br /&gt;
DOELSEIF &lt;br /&gt;
(([HaustuerStatus:state] eq &amp;quot;open&amp;quot;) and ([HaustuerStatusVar:state] =~ &amp;quot;ringing&amp;quot;)) &lt;br /&gt;
(set FhemSipClient fetch;; set HaustuerStatusVar on) &lt;br /&gt;
DOELSEIF &lt;br /&gt;
(([HaustuerStatus:state] eq &amp;quot;closed&amp;quot;) and ([HaustuerStatusVar:state] ne &amp;quot;off&amp;quot;)) &lt;br /&gt;
(set HaustuerStatusVar off)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Caller &amp;quot;Klingel sip:**12\@fritz.box&amp;quot; setzt sich aus dem in der Fritzbox vergebenen Namen, der Nebenstelle (**12 ist eine Doorline mit einem Taster, bei zweien gilt es **11 und **12 zu beachten) sowie dem syntaktischen Drumherum sip:&#039;&#039;nebenstelle&#039;&#039;\@fritz.box zusammen. Achtet bitte auf den &amp;quot;\&amp;quot; vor dem &amp;quot;@&amp;quot;, damit regex nicht mosert.&lt;br /&gt;
&lt;br /&gt;
HM_4A4047_Mp3 ist übrigens mein mobiler MP3-Tür-/Funkgong der zur Unterstützung einen Gong abspielt.&lt;br /&gt;
&lt;br /&gt;
=== Nervende Werbeanrufe ===&lt;br /&gt;
Ihr kennt das sicher: Unbekannte Rufnummer, man nimmt das Gespräch an und hat entweder irgendwas gewonnen, einen Werber oder ein &amp;quot;Umfrage&amp;quot; dran. Unterm Strich - man will Dir was verkaufen.&lt;br /&gt;
&lt;br /&gt;
Phase 1: Fritzbox, Rufbehandlung, neue Rufnummernsperre, Nummer eintragen.&lt;br /&gt;
&lt;br /&gt;
Phase 2: Derselbe Werber taucht unter einem ganzen Kontingent von Rufnummern auf. Blocken alleine reicht dir nicht mehr, du willst Rache.&lt;br /&gt;
&lt;br /&gt;
Phase 3: &lt;br /&gt;
: Du definierst in FHEM den SIP-Client und startest ihn im listen-Modus &#039;&#039;&#039;echo&#039;&#039;&#039;. &lt;br /&gt;
: In der Fritzbox leitest du alle eingehenden Anrufe auch an den SIP-Client weiter. &lt;br /&gt;
: Dem SIP-Client gibst du über sip_filter die Werber-Rufnummer als Filterarguiment mit.&lt;br /&gt;
: Der SIP-Cleint ist schneller als die Familienmitglieder und nimmt den Anruf an.  &lt;br /&gt;
&lt;br /&gt;
Phase 4: Jetzt bin ich (der Autor dieses Anwendungsfalles) neugierig. Postet Eure Erfahrung mit diesem Modus gerne im Forums-Thread.&lt;br /&gt;
&lt;br /&gt;
=== FHEM Statusberichte ===&lt;br /&gt;
&lt;br /&gt;
Man sagt zwar &amp;quot;wer lesen kann ist eindeutig im Vorteil&amp;quot;, dennoch gibt es Situationen in denen eine Sprachausgabe praktischer ist. Ein Beispiel findet Ihr im Forum unter [https://forum.fhem.de/index.php/topic,67443.msg742371.html#msg742371]. Das zugehörige Textbeispiel (als Appetithappen):&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Guten Abend Papa, hier ist Dein Speicherknecht mit dem Bericht von 18 Uhr37. Die Alarmanlage ist aus. Im Garten war jemand um 17 Uhr 45 und an der Haustür um 18 Uhr 16. Im Küche und OG1 ist das Licht an. Mama und Papa sind seit 18 Uhr 29 zu Hause. Die Heizung steht auf Normal Betrieb. Die Vorlaftemperatur beträgt 51 Grad. Der Gasverbrauch beträgt 8 Kubik bei einer Laufzeit von 182 Minuten. Das Wetter ist Schauer. Die Temperatur Aussen beträgt 8 Grad Celsius. Dabei war das Minimum 3 und das Maximum 8 und im Haus ist es 19 Grad warm. Papa, ich wünsche Dir noch einen geruhsamen Abend!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme / Fehlersuche ==&lt;br /&gt;
=== Fehler bei der Registrierung an der Fritzbox ===&lt;br /&gt;
&#039;&#039;&#039;Fritzbox&#039;&#039;&#039;&lt;br /&gt;
* Ist das Device für den SIP-Client in der Fritzbox unter Telefonie &amp;gt; Telefoniegräte gelistet? &lt;br /&gt;
* Geräteeinstellungen ändern: Ist für das Device unter &#039;Anmeldedaten&#039; die Durchwahl als Benutzername angegeben?&lt;br /&gt;
* Ist der in dieser Ansicht angegebene &#039;Registrar&#039; mit der im Attribut sip_registrar identisch? Im Zweifelsfalle die IP-Adresse statt &#039;fritz.box&#039; verwenden.&lt;br /&gt;
* FitzOS ab 6.80: Wurde nach Definition des Gerätes an einem anderen bekannten Gerät der Bestätigungscode eingegeben?&lt;br /&gt;
* Wurde in der Fritzbox ein Passwort von mind. 8 Stellen und Sicherheitsstufe &#039;gut&#039; vergeben? Andernfalls kann es zu einem Registrierungsfehler 404 kommen.&lt;br /&gt;
* FritzOS 6.90: Registrierungsfehler 404 konnte erst mit folgenden Angaben gelöst werden&lt;br /&gt;
  sip_from = sip:mymyuser@fritz.box (wobei dies der mymyuser ist der beim Telefoniegrät als Benutzername angegeben wurde, &lt;br /&gt;
             bitte die von der FritzBox geforderte Mindestlänge beachten)&lt;br /&gt;
  sip_user = myuser (statt der Nebenstellennummer)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wurde das Passwort mittels set &amp;lt;mydevice&amp;gt; password &amp;lt;meinpasswort&amp;gt; gesetzt?&lt;br /&gt;
&lt;br /&gt;
Attribute des Devices prüfen:&lt;br /&gt;
* Ist unter sip_from &amp;lt;nowiki&amp;gt;&#039;sip:620@fritz.box&#039;&amp;lt;/nowiki&amp;gt; die von der Fritzbox vergebene Durchwahl angegeben? Ab Fritz!OS 6.8 gilt: Ist das Format &amp;lt;nowiki&amp;gt;sip:Benutzername@fritz.box&amp;lt;/nowiki&amp;gt; eingehalten?&lt;br /&gt;
* Ist unter sip_user die von der Fritzbox vergebene Durchwahl angegeben?&lt;br /&gt;
* Ist unter sip_registrar die IP-Adresse der Fritzbox eingetragen (&#039;fritz.box&#039; wird manchmal nicht korrekt aufgelöst)?&lt;br /&gt;
* Ist unter sip_ip die IP-Adresse des FHEM-Servers eingetragen (z.B. 192.168.178.47 angeben, keine Adresse aus dem 127er-Segment)?&lt;br /&gt;
* Probleme mit dem Standard-Port 5060? Auf 5070 erhöhen.&lt;br /&gt;
&lt;br /&gt;
=== Erzeugung eines passenden Audiofiles ===&lt;br /&gt;
&lt;br /&gt;
Eine Alternative zu sox ist ffmpeg. Damit kann direkt von mp3 ins Zielformat konvertiert werden:&lt;br /&gt;
&lt;br /&gt;
ffmpeg -i meinfile.mp3 -f alaw -ar 8000 meinfile.alaw&lt;br /&gt;
&lt;br /&gt;
=== Keine korrekte DTMF-Erkennung auf einem Pi ===&lt;br /&gt;
&lt;br /&gt;
Raspi, Raspi2 und BanaPi sind nicht leistungsstark genug für die Erkennung von DTMF-Tönen. Ab Raspi3 scheint&#039;s zu funktionieren.&lt;br /&gt;
&lt;br /&gt;
Wer trotzdem auf einem &amp;quot;kleinen&amp;quot; Pi die DTMF-Erkennung gemäß RFC2833 nutzen möchte, kann in der DTMF.pm die Zeile 75&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;###$sub{$type} = _dtmf_xtc_audio(%pargs);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
für die Audio-Erkennung auskommentieren. Zu finden ist DTMF.pm z.B. unter /usr/lib/perl5/site_perl/5.18.2/Net/SIP. Konsequenz: Moderne, RFC2833-unterstützende Geräte können genutzt werden, ältere Telefone mit Tonwahl nicht.&lt;br /&gt;
&lt;br /&gt;
=== Docker ===&lt;br /&gt;
&lt;br /&gt;
Achtet darauf, dass alle relevanten Ports sowie die für SIP wichtigen 5060 und ggf. 5070 außerhalb des Containers sichtbar sind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker run -d -p 7072:7072 -p 8083:8083 -p 5060:5060 -p 5070:5070 fhem/fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Definition des SIP-Devices wird automatisch die IP-Adresse des Containers als sip_ip eingetragen, z.B. die 172.17.0.2. Es ist wichtig, dass hier die interne Adresse des Containers eingetragen wird, da sonst der Bind beim Listen fehlschlägt.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=40219|LinkText=Forenthread}} alter Forum-Thread zu FB_SIP.pm und SIP.pm&lt;br /&gt;
* {{Link2Forum|Topic=67443|LinkText=Forenthread}} Forum-Thread zu diesem Modul SIP&lt;br /&gt;
* [https://de.wikipedia.org/wiki/SIP-Status-Codes SIP-Status Codes]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Hilfsmodul]] &lt;br /&gt;
&amp;lt;!-- (Modulkategorie wird automatisch gesetzt) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Akustische Ausgabe]]&lt;/div&gt;</summary>
		<author><name>Plaicy</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen&amp;diff=29699</id>
		<title>DOIF/Einsteigerleitfaden, Grundfunktionen und Erläuterungen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen&amp;diff=29699"/>
		<updated>2019-03-02T23:51:12Z</updated>

		<summary type="html">&lt;p&gt;Plaicy: /* Erste Schritte mit DOIF: Zeit- und Ereignissteuerung */ typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[DOIF]], für FHEM-Einsteiger konzipiert, wurde über Benutzeranforderungen zu einem immer vielfältigeren Werkzeug weiter entwickelt. Damit orientiert sich die Weiterentwicklung des [[DOIF]] an praktischen Aufgabenstellungen. Im Ergebnis können einfache Probleme, sowie auch spezielle und komplexe Aufgaben in kompakter Weise gelöst werden. Damit nimmt jedoch auch die Zahl der Einstellungsmöglichkeiten über Attribute, Syntaxvarianten und deren Kombinationen zu. Das macht es für Einsteiger und Fortgeschrittene nicht leicht den Überblick zu behalten.&lt;br /&gt;
&lt;br /&gt;
Hier soll der Blick auf die Teile des DOIF beschränkt werden, die für die Einfachheit des DOIF aus seiner Anfangszeit stehen und die ausreichen 80% der Aufgabenstellungen lösen.&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=&#039;&#039;&#039;Hinweis!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die {{Link2CmdRef|Lang=de|Anker=DOIF|Label=deutschsprachige FHEM-Befehlsreferenz (Commandref)}} zum DOIF sollte bei Fragen immer das erste Nachschlagewerk sein. Sie ist aktueller, genauer und mit Beispielen versehen. Dieser Artikel ist eine geraffte Darstellung der Grundlagen des DOIF mit einigen Erläuterungen.}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzung ==&lt;br /&gt;
&lt;br /&gt;
Die FHEM-Begriffe [[Gerät]] ([[Device]]), State (Status), [[Readings]], [[Internals]], [[Attribute]], [[Event]] ([[Ereignis]]), Befehl (Command) und deren Funktion sollen bekannt sein.&lt;br /&gt;
&lt;br /&gt;
== DOIF-Light für Einsteiger ==&lt;br /&gt;
&lt;br /&gt;
Die meisten Verknüpfungsaufgaben können mit einem Verständnis der folgenden Abschnitte der {{Link2CmdRef|Lang=de|Anker=DOIF|Label=Hilfe zum DOIF (deutschsprachige Befehlsreferenz)}} gelöst werden.&lt;br /&gt;
&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF|Label=Einleitung}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Features|Label=Features}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Lesbarkeit_der_Definitionen|Label=Lesbarkeit der Definitionen}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Ereignissteuerung_ueber_Auswertung_von_Events|Label=Ereignissteuerung}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Zeitsteuerung|Label=Zeitsteuerung}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Wochentagsteuerung|Label=Wochentagsteuerung}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen|Label=Zeitsteuerung mit Zeitintervallen}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Indirekten_Zeitangaben|Label=Indirekte Zeitangaben}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Nutzung_von_Readings_Stati_oder_Internals_im_Ausfuehrungsteil|Label=Angaben im Ausführungsteil}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_do_always|Label=do always}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_wait|Label=wait}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_do_resetwait|Label=do resetwait}}&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_setList__readingList|Label=readingList, setList}} Frontendgestaltung&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Zu_beachten|Label=zu beachten}} zusätzliche Hinweise und Tipps&lt;br /&gt;
* {{Link2CmdRef|Lang=de|Anker=DOIF_Kurzreferenz|Label=Kurzreferenz}} als Überblick&lt;br /&gt;
&lt;br /&gt;
== Struktur und Verhalten des DOIF ==&lt;br /&gt;
&lt;br /&gt;
Der Aufbau des DOIF entspricht einer Baumstruktur mit Bedingungszweigen. {{Randnotiz|RNTyp=y|RNText=&#039;&#039;&#039;Achtung!&#039;&#039;&#039; Der Begriff &#039;&#039;&#039;Ereignis&#039;&#039;&#039; wird in diesem Artikel erweitert verwendet und umfasst ablaufende Timer und [[Event|Ereignisse]]([[Event|Events]]). }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:DOIF_Aufbau_Ablauf_nSVG.png|top|alt=&amp;quot;DOIF_Aufbau_Ablauf&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Verhaltensweise ohne steuernde Attribute ===&lt;br /&gt;
&lt;br /&gt;
==== Angaben im Bedingungsteil ====&lt;br /&gt;
Der Bedingungsteil besteht aus einer Perl-Ebene und einer Präprozessorebene.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;(&#039;&#039;&#039;&#039;&#039;Perl-Ebene&#039;&#039; &#039;&#039;&#039;[&#039;&#039;&#039;&#039;&#039;DOIF-Präprozessor&#039;&#039;&#039;&#039;&#039;]&#039;&#039;&#039; &#039;&#039;Perl-Ebene&#039;&#039; &#039;&#039;&#039;[&#039;&#039;&#039;&#039;&#039;DOIF-Präprozessor&#039;&#039;&#039;&#039;&#039;]&#039;&#039;&#039; ...&#039;&#039;&#039;)&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
Die erste Ebene der ersten runden Klammer nach den Schlüsselwörtern &#039;&#039;&#039;DOIF&#039;&#039;&#039; oder &#039;&#039;&#039;DOELSEIF&#039;&#039;&#039; umschliesst eine Bedingung.&lt;br /&gt;
&lt;br /&gt;
Für Angaben in dieser Klammer (Perl-Ebene) gilt die Perl-Syntax (Operatoren, Operanden, wie Funktionen, Variablen), ausgenommen sind die Angaben in der ersten Ebene der eckigen Klammern, sie umschliessen die Ebene des DOIF-Präprozessors, dort gilt die Syntax des DOIF-Präprozessors.&lt;br /&gt;
&lt;br /&gt;
In dieser Ebene der eckigen Klammern werden &#039;&#039;&#039;DOIF-Operanden&#039;&#039;&#039; angegeben. Die &#039;&#039;&#039;DOIF-Operanden&#039;&#039;&#039; beinhalten &#039;&#039;&#039;Auslöser&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auslöser&#039;&#039;&#039; sind Zeitpunkte, Gerätenamen(bei checkReadingEvent 0, voreingestellt bis Version 16651 2018-04-23 06:28:53Z Damian) oder die Kombination von Gerätename:Reading(bei checkReadingEvent 1, voreingestellt nach Version 16651 2018-04-23 06:28:53Z Damian) und Reguläre Ausdrücke, die auf Gerätenamen oder das &#039;&#039;&#039;Ereignis&#039;&#039;&#039; passen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ereignisse&#039;&#039;&#039; sind für DOIF ablaufende Timer oder [[Event|Ereignisse]] ([[Event|Events]]) die durch [[Gerät|Geräte]] initiiert werden.&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;&#039;DOIF-Prozess&#039;&#039;&#039; wird gestartet wenn ein &#039;&#039;&#039;Ereignis&#039;&#039;&#039; eintrifft.&lt;br /&gt;
&lt;br /&gt;
Passt ein &#039;&#039;&#039;Auslöser&#039;&#039;&#039; einer Bedingung zu dem &#039;&#039;&#039;Ereignis&#039;&#039;&#039; wird diese Bedingung geprüft.&lt;br /&gt;
&lt;br /&gt;
Ist die Bedingung &#039;&#039;&#039;wahr&#039;&#039;&#039;, werden die nach der Bedingung stehenden Befehle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Nach der Befehlsausführung wird der &#039;&#039;&#039;Status&#039;&#039;&#039; des &#039;&#039;&#039;DOIF&#039;&#039;&#039; auf die Befehlsnummer gesetzt (&#039;&#039;&#039;cmd_x&#039;&#039;&#039;) und DOIF wartet auf das nächste &#039;&#039;&#039;Ereignis&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ist die Bedingung &#039;&#039;&#039;unwahr&#039;&#039;&#039; (&#039;&#039;&#039;falsch&#039;&#039;&#039;) wird der nächste Zweig bearbeitet.&lt;br /&gt;
&lt;br /&gt;
Ist &#039;&#039;&#039;DOELSE&#039;&#039;&#039; angegeben, es gab einen passenden &#039;&#039;&#039;Auslöser&#039;&#039;&#039; und alle geprüften Bedingungen waren &#039;&#039;&#039;unwahr&#039;&#039;&#039;, dann werden die nach &#039;&#039;&#039;DOELSE&#039;&#039;&#039; angegebenen &#039;&#039;&#039;Befehle&#039;&#039;&#039; ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;Befehle&#039;&#039;&#039; eines Zweiges werden ohne vorherigen &#039;&#039;&#039;Statuswechsel&#039;&#039;&#039; nur einmal ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Ein &#039;&#039;&#039;Statuswechsel&#039;&#039;&#039; findet statt nachdem ein anderer Bedingungszweig &#039;&#039;&#039;wahr&#039;&#039;&#039; wurde und die zugehörigen &#039;&#039;&#039;Befehle&#039;&#039;&#039; ausgeführt worden sind.&lt;br /&gt;
&lt;br /&gt;
Ein DOIF mit nur einem Zweig enthält ein internes &#039;&#039;&#039;DOELSE&#039;&#039;&#039;, d.h. bei &#039;&#039;&#039;unwahrer&#039;&#039;&#039; Bedingung und vorhandenem &#039;&#039;&#039;Auslöser&#039;&#039;&#039;, findet ein &#039;&#039;&#039;Statuswechsel&#039;&#039;&#039; auf &#039;&#039;&#039;cmd_2&#039;&#039;&#039; statt.&lt;br /&gt;
&lt;br /&gt;
==== Auslöser ====&lt;br /&gt;
&lt;br /&gt;
Auslöser können durch direkte Angabe des Gerätenamen, [[Readings]], [[Internals]] usw. angegeben werden.&lt;br /&gt;
&lt;br /&gt;
===== Readings und Internals =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; oder &#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&amp;amp;STATE]&#039;&#039;&#039; bezieht sich auf das Internal &#039;&#039;&#039;STATE&#039;&#039;&#039; des Gerätes.&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Ereignissteuerung}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Readingname&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; bezieht sich auf das &#039;&#039;&#039;Reading&#039;&#039;&#039; des Gerätes.&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Ereignissteuerung}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Readingname&#039;&#039;&amp;gt;&#039;&#039;&#039;:d]&#039;&#039;&#039; bezieht sich auf den &#039;&#039;&#039;ersten numerischen Teil&#039;&#039;&#039; des &#039;&#039;&#039;Reading-Wertes&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Filtern_nach_Zahlen}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Readingname&#039;&#039;&amp;gt;&#039;&#039;&#039;:d&amp;lt;Anzahl der gerundeten Stellen nach dem Dezimaltrenner&amp;gt;]&#039;&#039;&#039; bezieht sich auf den &#039;&#039;&#039;ersten numerischen Teil&#039;&#039;&#039; des &#039;&#039;&#039;Reading-Wertes&#039;&#039;&#039;, der auf &#039;&#039;&#039;Anzahl&#039;&#039;&#039; Stellen gerundet ist.&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Filtern_nach_Zahlen}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Readingname&#039;&#039;&amp;gt;&#039;&#039;&#039;:sec]&#039;&#039;&#039; bezieht sich auf das &#039;&#039;&#039;Alter des Zeitstempels&#039;&#039;&#039; in Sekunden.&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Zeitspanne_eines_Readings_seit_der_letzten_Aenderung}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&amp;amp;&#039;&#039;&#039;&amp;lt;&#039;&#039;Internalname&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; bezieht sich auf das &#039;&#039;&#039;Internal&#039;&#039;&#039; des Gerätes.&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Ereignissteuerung}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Auslöserangabe&#039;&#039;&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039;&amp;lt;&#039;&#039;Vorgabewert&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; nicht existierende &#039;&#039;&#039;Auslöser&#039;&#039;&#039; können mit einem &#039;&#039;&#039;Vorgabewert&#039;&#039;&#039; angegeben werden.&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_notexist}}&lt;br /&gt;
&lt;br /&gt;
===== Zeitangaben =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Zeitpunkt&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; gibt einen Zeitpunkt an&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Zeitsteuerung}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Zeitpunkt Beginn&#039;&#039;&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;&#039;&#039;Zeitpunkt Ende&#039;&#039;&amp;gt;&#039;&#039;&#039;|&#039;&#039;&#039;&amp;lt;&#039;&#039;Wochentagangaben&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; gibt eine Zeitspanne an, optionale Wochentagangabe&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Zeitsteuerung_mit_Zeitintervallen}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;[[&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;&#039;&#039;Auslöserangabe&#039;&#039;&amp;gt;&#039;&#039;&#039;]]&#039;&#039;&#039; gibt einen Zeitpunkt indirekt an.&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Indirekten_Zeitangaben}}&lt;br /&gt;
&lt;br /&gt;
Mit Zeitangaben kann gerechnet werden, Berechnungen erfolgen in runden Klammern.&lt;br /&gt;
&lt;br /&gt;
Liefert eine Perl-Funktion HH:MM:SS muss sie in geschweifte Klammern eingeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[{sunrise}]&#039;&#039;&#039; z.B. Angabe eines Zeitpunktes durch die Perl-Funktion &#039;&#039;&#039;sunrise&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Zeitsteuerung_mit_Zeitberechnung}}&lt;br /&gt;
&lt;br /&gt;
==== Auslöser (erweitert) ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Auslöser&#039;&#039;&#039; können auch allgemein formuliert werden, dazu ist die Fertigkeit erforderlich [[regulärer Ausdruck|&#039;&#039;&#039;Reguläre Ausdrücke&#039;&#039;&#039;]] (Regex) formulieren zu können.&lt;br /&gt;
&lt;br /&gt;
===== Readings und Internals =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Auslöserangabe&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Filter&#039;&#039;&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039;&amp;lt;&#039;&#039;Ausgabeformatierung&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; &#039;&#039;&#039;Auslöser&#039;&#039;&#039; können mit einem Filter eränzt werden, die gefilterten Werte können in der Ausgabeformatierung weiterverarbeitet werden.&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Ereignissteuerung_ueber_Auswertung_von_Events}}&lt;br /&gt;
&lt;br /&gt;
===== Ereignisse =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&amp;quot;&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Ereignisrest&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;quot;]&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Ereignissteuerung_ueber_Auswertung_von_Events}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&amp;quot;&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Ereignisrest&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;quot;]&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Ereignissteuerung_ueber_Auswertung_von_Events}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&amp;quot;&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Ereignis&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;quot;,&#039;&#039;&#039;&amp;lt;&#039;&#039;Vorgabewert&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Ereignissteuerung_ueber_Auswertung_von_Events}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&amp;quot;&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Ereignis&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;quot;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Filter&#039;&#039;&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039;&amp;lt;&#039;&#039;Ausgabeformatierung&#039;&#039;&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039;&amp;lt;&#039;&#039;Vorgabewert&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; optional: Filter und Formatierung, verpflichtend: Vorgabe&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Ereignissteuerung_ueber_Auswertung_von_Events}} und {{Link2CmdRef|Lang=de|Anker=DOIF_Filtern_nach_Zahlen}}&lt;br /&gt;
&lt;br /&gt;
===== Ereignisse mit Aggregation (Sammlung) von Werten =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Funktion&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Format&#039;&#039;&amp;gt;&#039;&#039;&#039;:&amp;quot;&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Regex Ereignisrest&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;quot;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Reading&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Bedingung&#039;&#039;&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039;&amp;lt;&#039;&#039;Vorgabewert&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; optional: Format, Reading, Bedingung und Vorgabewert&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_aggregation}}&lt;br /&gt;
&lt;br /&gt;
===== Ereignisse mit vordefinierten Filtern (Durchschnitt, Median, Differenz, anteiliger Anstieg) =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[&#039;&#039;&#039;&amp;lt;&#039;&#039;Gerätename&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Reading&#039;&#039;&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&amp;lt;&#039;&#039;Filtername&#039;&#039;&amp;gt;&amp;lt;&#039;&#039;Pufferlänge&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Reading_Funktionen}}&lt;br /&gt;
&lt;br /&gt;
==== Alle Auslöser ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[?&#039;&#039;&#039;&amp;lt;&#039;&#039;Auslöserangabe&#039;&#039;&amp;gt;&#039;&#039;&#039;]&#039;&#039;&#039; Auslöser, die mit Fragezeichen beginnen lösen nicht aus, sie werden nur abgefragt&lt;br /&gt;
&lt;br /&gt;
{{Link2CmdRef|Lang=de|Anker=DOIF_Zeitintervalle_Readings_und_Status_ohne_Trigger}}&lt;br /&gt;
&lt;br /&gt;
==== Angaben im Befehlsteil ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Befehle&#039;&#039;&#039; stehen nach einer &#039;&#039;&#039;Bedingung&#039;&#039;&#039; oder nach &#039;&#039;&#039;DOELSE&#039;&#039;&#039; in runden Klammern (erste Klammerebene), das ist die FHEM-Ebene. Befehle können direkt angegeben werden.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;(&#039;&#039;&#039;&amp;lt;&#039;&#039;FHEM-Befehle&#039;&#039;&amp;gt;&#039;&#039;&#039;)&#039;&#039;&#039;, &#039;&#039;&#039;(&amp;quot;&#039;&#039;&#039;&amp;lt;&#039;&#039;Systembefehle&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;quot;)&#039;&#039;&#039; oder &#039;&#039;&#039;{&#039;&#039;&#039;&amp;lt;&#039;&#039;Perl-Befehle&#039;&#039;&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
Befehle können zu Sequenzen gruppiert werden durch mehrere runde Klammerpaare der ersten Ebene)&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;(&#039;&#039;&#039;&amp;lt;&#039;&#039;Befehle der Sequenz 1&#039;&#039;&amp;gt;&#039;&#039;&#039;)&#039;&#039;&#039; &#039;&#039;&#039;(&#039;&#039;&#039;&amp;lt;&#039;&#039;Befehle der Sequenz 2&#039;&#039;&amp;gt;&#039;&#039;&#039;)&#039;&#039;&#039; ... &#039;&#039;&#039;(&#039;&#039;&#039;&amp;lt;&#039;&#039;Befehle der Sequenz n&#039;&#039;&amp;gt;&#039;&#039;&#039;)&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
Trennzeichen für Befehle ist das Komma, daher ist keine Verdoppelung der Trennzeichen erforderlich.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;(&#039;&#039;&#039;&amp;lt;Befehl 1&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039; &amp;lt;Befehl 2&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039; ... &amp;lt;Befehl n&amp;gt;&#039;&#039;&#039;)&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
Enthält ein Befehl ein Komma, dass kein Befehlstrennzeichen ist, dann ist der Befehl in zusätzliche runde Klammern einzuschliessen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;((&#039;&#039;&#039;&amp;lt;Befehlsteil 1a&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039;&amp;lt;Befehlsteil 1b&amp;gt;&#039;&#039;&#039;),&#039;&#039;&#039; &amp;lt;Befehl 2&amp;gt;&#039;&#039;&#039;,&#039;&#039;&#039; ... &amp;lt;Befehl n&amp;gt;&#039;&#039;&#039;)&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
Berechnungen erfolgen in geschweiften Klammern auf der Perl-Ebene und müssen unmittelbar mit einer runden Klammer beginnen.&lt;br /&gt;
&lt;br /&gt;
Der Zugriff auf [[Readings]], [[Internals]] usw. erfolgt wie im DOIF üblich, über Angaben in eckigen Klammern inklusive Ausgabeformatierung und Präprozessorersatznamen, wie &#039;&#039;&#039;$SELF&#039;&#039;&#039;, &#039;&#039;&#039;$DEVICE&#039;&#039;&#039;, &#039;&#039;&#039;$EVENT&#039;&#039;&#039;, &#039;&#039;&#039;$EVENTS&#039;&#039;&#039; (extended [[set magic]]).&lt;br /&gt;
&lt;br /&gt;
=== Häufige Attribute ===&lt;br /&gt;
&lt;br /&gt;
Attribute verändern das Standardverhalten des DOIF.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== do always ====&lt;br /&gt;
&lt;br /&gt;
Ohne &#039;&#039;&#039;do always&#039;&#039;&#039; gilt:Die Befehle eines Bedingungszweiges werden ohne vorherigen Statuswechsel nur einmal ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Das Attribut setzt diese Regel ausser Kraft. Befehle werden wiederholt im bestehenden Status ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Das interne DOELSE entfällt bei DOIF mit einem Zweig.&lt;br /&gt;
&lt;br /&gt;
Wait-Timer werden bei wiederholtem Wahrwerden der Bedingung nicht abgebrochen.&lt;br /&gt;
&lt;br /&gt;
==== wait ====&lt;br /&gt;
&lt;br /&gt;
Das Attribut verzögert die Befehlsausführung, nach wahr werden einer Bedingung.&lt;br /&gt;
&lt;br /&gt;
Laufende Wait-Timer werden bei einem eingeleiteten Statuswechsel des DOIF abgebrochen, daher werden die zu verzögernden Befehle nicht mehr ausgeführt.&lt;br /&gt;
&lt;br /&gt;
==== do resetwait ====&lt;br /&gt;
&lt;br /&gt;
Das Attribut beinhaltet &#039;&#039;&#039;do always,&#039;&#039;&#039; bricht aber die Wait-Timer bei wiederholtem Wahrwerden der Bedingung ab.&lt;br /&gt;
&lt;br /&gt;
==== readingList, setList, webCmd, widgetOverride ====&lt;br /&gt;
&lt;br /&gt;
Diese Attribute statten DOIF mit Dummy-Eigenschaften aus, so dass DOIF als erweitertes Eingabeelement im Frontend dienen kann.&lt;br /&gt;
&lt;br /&gt;
== Erste Schritte mit DOIF: Zeit- und Ereignissteuerung ==&lt;br /&gt;
Die nachfolgenden Beispiele sind aus der Einleitung der Hilfe zum DOIF entnommen. Sie werden hier weiter erläutert.&lt;br /&gt;
===Beispiel A): Ereignissteuerung ===&lt;br /&gt;
{{Randnotiz|RNText=Hinweis: Verwendung von&lt;br /&gt;
* &amp;lt;code&amp;gt;[&amp;lt;Gerätename&amp;gt;:&amp;quot;&amp;lt;Ereignis&amp;gt;&amp;quot;]&amp;lt;/code&amp;gt; zur Abfrage eines Ereignisses von einem [[Gerät]]&lt;br /&gt;
* &#039;&#039;&#039;DOELSE&#039;&#039;&#039; das Schlüsselwort leitet einen Befehlszweig ohne explizite Bedingung ein. Dieser Zweig wird ausgeführt, wenn keine geprüfte Bedingung wahr ist.&lt;br /&gt;
* &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; zum direkten Ausführen eines Befehls im [[DOIF]] und zur Anzeige von Icons&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;u&amp;gt;Aufgabenstellung:&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Fernbedienung soll einen Fernseher einschalten, der über eine Funksteckdose angeschlossen ist.&lt;br /&gt;
&lt;br /&gt;
Das [[Gerät]] &#039;&#039;&#039;Fernbedienung&#039;&#039;&#039; wird durch den Dummy &#039;&#039;&#039;remotecontrol&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition eines Empfängers für eine Infrarot-Fernbedienung sein.&lt;br /&gt;
&lt;br /&gt;
Das [[Gerät]] &#039;&#039;&#039;Funksteckdose TV&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;tv&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition einer Intertechno-Funkstekdose aus dem Baumarkt sein.&lt;br /&gt;
&lt;br /&gt;
Die Signale von &#039;&#039;&#039;remotecontrol&#039;&#039;&#039; werden über das DOIF &#039;&#039;&#039;di_rc_tv&#039;&#039;&#039; alias &#039;&#039;&#039;Steuerlogik&#039;&#039;&#039; in einen Befehl für die Funksteckdose &#039;&#039;&#039;tv&#039;&#039;&#039; umgesetzt.&lt;br /&gt;
&lt;br /&gt;
Das Signal ist als [[Ereignis]] im [[Event monitor|Eventmonitor]] sichtbar &amp;lt;code&amp;gt;2017-02-28 09:07:03 dummy tv on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das [[DOIF]] reagiert durch die Angabe von &amp;lt;code&amp;gt;[remotecontrol:&amp;quot;on&amp;quot;]&amp;lt;/code&amp;gt; in der Schaltbedingung. Weil &#039;&#039;&#039;on&#039;&#039;&#039; als Wert in dem Ereignis enthalten ist, wird die Bedingung wahr. Das bewirkt das Ausführen des Befehls &amp;lt;code&amp;gt;set tv on&amp;lt;/code&amp;gt;. Danach nimmt das [[DOIF]] den Status &#039;&#039;&#039;cmd_1&#039;&#039;&#039; an.&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;off&#039;&#039;&#039; im Ereignis enthalten ist wird die Bedingung nicht wahr, daher wird der Befehl &amp;lt;code&amp;gt;set tv off&amp;lt;/code&amp;gt; des DOELSE-Zweiges des [[DOIF]] ausgeführt und [[DOIF]] nimmt den Status &#039;&#039;&#039;cmd_2&#039;&#039;&#039; an.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Definition:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;define di_rc_tv DOIF ([remotecontol:&amp;quot;on&amp;quot;]) (set tv on) DOELSE (set tv off)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über das [[Attribute|Attribut]] &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; können die Befehle des [[DOIF]] direkt ausgeführt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;attr di_rc_tv devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweis: In neueren Versionen ggf. &#039;&#039;&#039;initialized&#039;&#039;&#039; durch &#039;&#039;&#039;initialize&#039;&#039;&#039; ersetzen.&lt;br /&gt;
&lt;br /&gt;
Das erste Tripel &amp;lt;code&amp;gt;cmd_1:general_an:cmd_2&amp;lt;/code&amp;gt; hat die Bedeutung &#039;&#039;aktueller Status&#039;&#039;&#039;&#039;&#039;:&#039;&#039;&#039;&#039;&#039;Icon-Name&#039;&#039;&#039;&#039;&#039;:&#039;&#039;&#039;&#039;&#039;Status nach Betätigung des Icons&#039;&#039;. Also, wenn der Status &#039;&#039;&#039;cmd_2&#039;&#039;&#039; ist, dann zeige das Icon &#039;&#039;&#039;general_an&#039;&#039;&#039; und wenn das Icon betätigt wird, dann führe den Befehl aus, der zu &#039;&#039;&#039;cmd_1&#039;&#039;&#039; gehört.&lt;br /&gt;
&lt;br /&gt;
Das zweite Tripel hat die gleiche Funktion, jedoch wird in diesem Fall das Icon &#039;&#039;&#039;general_aus&#039;&#039;&#039; angezeigt, wenn der Status des [[DOIF]] &#039;&#039;&#039;cmd_1&#039;&#039;&#039; ist oder &#039;&#039;&#039;initialized&#039;&#039;&#039; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die nachstehende, komplette Definition für die Gruppe A) kann über &#039;&#039;&#039;[[Import von Code Snippets|Raw definition]]&#039;&#039;&#039; in [[FHEM]] importiert werden.&lt;br /&gt;
Hinweis: In neueren Versionen ggf. &#039;&#039;&#039;initialized&#039;&#039;&#039; durch &#039;&#039;&#039;initialize&#039;&#039;&#039; ersetzen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod di_rc_tv DOIF ([remotecontrol:&amp;quot;on&amp;quot;]) (set tv on) DOELSE (set tv off)&lt;br /&gt;
attr di_rc_tv alias Steuerlogik&lt;br /&gt;
attr di_rc_tv devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&lt;br /&gt;
attr di_rc_tv group A) Fernbedienung (Ereignissteuerung)&lt;br /&gt;
attr di_rc_tv icon helper_doif&lt;br /&gt;
attr di_rc_tv room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod remotecontrol dummy&lt;br /&gt;
attr remotecontrol alias Fernbedienung&lt;br /&gt;
attr remotecontrol devStateIcon .*:noIcon&lt;br /&gt;
attr remotecontrol group A) Fernbedienung (Ereignissteuerung)&lt;br /&gt;
attr remotecontrol icon it_remote&lt;br /&gt;
attr remotecontrol room Schulungsraum&lt;br /&gt;
attr remotecontrol webCmd on:off&lt;br /&gt;
&lt;br /&gt;
defmod tv dummy&lt;br /&gt;
attr tv alias Funksteckdose TV&lt;br /&gt;
attr tv devStateIcon on:it_television@red off:it_television@blue&lt;br /&gt;
attr tv group A) Fernbedienung (Ereignissteuerung)&lt;br /&gt;
attr tv icon it_television&lt;br /&gt;
attr tv room Schulungsraum&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  Beispiel B): Zeitsteuerung ===&lt;br /&gt;
{{Randnotiz|RNText=Hinweis: Verwendung von&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;Zeitpunkt&amp;gt;|&amp;lt;Wochentagangabe&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; zur Angabe eines Zeitpunktes mit Wochentagbeschränkung. Die Zeiten gelten für die angegebenen Wochentage.&lt;br /&gt;
* &#039;&#039;&#039;DOELSEIF&#039;&#039;&#039; das Schlüsselwort leitet einen Bedingungszweig ein und muss eine Bedingung enthalten. Dieser Zweig wird ausgeführt, wenn eine Bedingung geprüft wird und sie wahr ist.&lt;br /&gt;
* &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; zum direkten Ausführen eines Befehls im [[DOIF]] und zur Anzeige von Icons&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;u&amp;gt;Aufgabenstellung:&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Radio soll werktags und am Wochenende zu unterschiedlichen Zeiten ein- u. ausgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
Das [[Gerät]] &#039;&#039;&#039;Funksteckdose Radio&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;radio&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition einer Intertechno-Funkstekdose aus dem Baumarkt sein.&lt;br /&gt;
&lt;br /&gt;
Wenn die Uhrzeit mit einem Schaltzeitpunkt übereinstimmt, wird die Zeitpunktangabe wahr. Wird dann auch die gesamte Bedingung wahr, dann wird der zu diesem Bedingungszweig gehörende Befehl ausgeführt. Das [[DOIF]]  &#039;&#039;&#039;di_clock_radio&#039;&#039;&#039; alias &#039;&#039;&#039;Zeitschaltuhr&#039;&#039;&#039; setzt dann einen Befehl zum Schalten der Funksteckdose &#039;&#039;&#039;radio&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
Das Zeitereignis ist im [[Event monitor|Eventmonitor]] nicht sichtbar.&lt;br /&gt;
&lt;br /&gt;
Die Zeitpunkte eines Bedingungszweiges sind &#039;&#039;&#039;or&#039;&#039;&#039;(oder) verknüpft. Im ersten Bedingungszweig steht die Einschaltbedingung, im Zweiten (DOELSEIF) die Auschaltbedingung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Definition:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;define di_clock_radio DOIF ([06:30|Mo Di Mi] or [08:30|Do Fr Sa So]) (set radio on) DOELSEIF ([08:00|Mo Di Mi] or [09:30|Do Fr Sa So]) (set radio off)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über das [[Attribute|Attribut]] &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; können die Befehle des [[DOIF]] über das WEB-Frontend unabhängig von den Schaltzeitpunkten ausgeführt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;attr ddi_clock_radio devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweis: In neueren Versionen ggf. &#039;&#039;&#039;initialized&#039;&#039;&#039; durch &#039;&#039;&#039;initialize&#039;&#039;&#039; ersetzen.&lt;br /&gt;
&lt;br /&gt;
Die nachstehende, komplette Definition für die Gruppe B) kann über &#039;&#039;&#039;[[Import von Code Snippets|Raw definition]]&#039;&#039;&#039; in [[FHEM]] importiert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod di_clock_radio DOIF ([06:30|8] or [08:30|7]) (set radio on) DOELSEIF ([08:00|8] or [09:30|7]) (set radio off)&lt;br /&gt;
attr di_clock_radio alias Zeitschaltuhr&lt;br /&gt;
attr di_clock_radio devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&lt;br /&gt;
attr di_clock_radio group B) Zeitschaltuhr (Zeitsteuerung)&lt;br /&gt;
attr di_clock_radio icon helper_doif&lt;br /&gt;
attr di_clock_radio room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod radio dummy&lt;br /&gt;
attr radio alias Funksteckdose Radio&lt;br /&gt;
attr radio devStateIcon on:it_radio@red off:it_radio@blue&lt;br /&gt;
attr radio group B) Zeitschaltuhr (Zeitsteuerung)&lt;br /&gt;
attr radio icon it_radio&lt;br /&gt;
attr radio room Schulungsraum&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiel C): Kombinierte Ereignis- und Zeitsteuerung ===&lt;br /&gt;
{{Randnotiz|RNText=Hinweis: Verwendung von&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;Beginzeitpunkt&amp;gt;-&amp;lt;Endzeitpunkt&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; zur Angabe einer Zeitspanne.&lt;br /&gt;
* &amp;lt;code&amp;gt;[&amp;lt;Gerätename&amp;gt;:&amp;lt;Reading-Name&amp;gt;]&amp;lt;/code&amp;gt; zur Abfrage eines Reading-Inhaltes.&lt;br /&gt;
* &amp;lt;code&amp;gt; &amp;lt; &amp;lt;/code&amp;gt;, eines numerischen Vergleichsoperators und Vergleich mit einer Konstanten (40).&lt;br /&gt;
* &#039;&#039;&#039;DOELSE&#039;&#039;&#039; das Schlüsselwort leitet einen Befehlszweig ohne explizite Bedingung ein. Dieser Zweig wird ausgeführt, wenn keine geprüfte Bedingung wahr ist.&lt;br /&gt;
* &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; zum direkten Ausführen eines Befehls im [[DOIF]] und zur Anzeige von Icons&lt;br /&gt;
* &#039;&#039;&#039;readingList&#039;&#039;&#039;, &#039;&#039;&#039;setList&#039;&#039;&#039; und &#039;&#039;&#039;webCmd&#039;&#039;&#039; zur Erzeugung eines Eingabeelementes im Frontend&lt;br /&gt;
* &#039;&#039;&#039;stateFormat&#039;&#039;&#039; um einen benutzerdefinierten Status zu erzeugen.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;u&amp;gt;Aufgabenstellung:&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Lampe soll in einer Zeispanne eingeschaltet werden, wenn die Helligkeit einen bestimmten Wert unterschreitet.&lt;br /&gt;
&lt;br /&gt;
Das [[Gerät]] &#039;&#039;&#039;Lampe&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;lamp&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition einer funkgesteuerten Lampenfassung sein.&lt;br /&gt;
&lt;br /&gt;
Das [[Gerät]] &#039;&#039;&#039;Helligkeitssensor&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;sensor&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition eines Homematic Funk-Lichtsensor sein oder ein selbstgebauter Helligkeitssensor mit TSL2561-Chip.&lt;br /&gt;
&lt;br /&gt;
Wenn die aktuelle Uhrzeit in der angegebenen Zeitspanne liegt, ist die Zeitspanne wahr. Wenn dann auch die Helligkeit unter 40 sinkt, wird die gesamte Bedingung wahr, weil Zeitspanne und Hellikeitsvergleich &#039;&#039;&#039;and&#039;&#039;&#039;(und) verknupft sind. Der zu diesem Bedingungszweig gehörende Befehl wird dann ausgeführt. Das [[DOIF]]  &#039;&#039;&#039;di_lamp&#039;&#039;&#039; alias &#039;&#039;&#039;Lampenlogik&#039;&#039;&#039; setzt dann einen Befehl zum Schalten der Lampe &#039;&#039;&#039;lamp&#039;&#039;&#039; ab.&lt;br /&gt;
Der DOELSE-Zweig wird ausgeführt, wenn die Bedingung im ersten Zweig unwahr wird.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Definition:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;define di_lamp DOIF ([06:00-19:00] and [sensor:brightness] &amp;lt; 40) (set lamp on) DOELSE (set lamp off)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über das [[Attribute|Attribut]] &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; können die Befehle des [[DOIF]] über das WEB-Frontend unabhängig von den Schaltzeitpunkten ausgeführt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;attr di_lamp devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweis: In neueren Versionen ggf. &#039;&#039;&#039;initialized&#039;&#039;&#039; durch &#039;&#039;&#039;initialize&#039;&#039;&#039; ersetzen.&lt;br /&gt;
&lt;br /&gt;
Das [[Attribute|Attribut]] &#039;&#039;&#039;setList&#039;&#039;&#039; zusammen mit &#039;&#039;&#039;readingList&#039;&#039;&#039; und &#039;&#039;&#039;webCmd&#039;&#039;&#039; realisiert im [[Gerät]] &#039;&#039;&#039;sensor&#039;&#039;&#039; für das Reading &#039;&#039;&#039;brightness&#039;&#039;&#039; einen Schieberegler, mit dem eine Helligkeit zwischen 0 und 100 in in Schritten von 1 simuliert werden kann und der im Frontend angezeigt wird.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr sensor readingList brightness&lt;br /&gt;
attr sensor setList brightness:slider,0,1,100&lt;br /&gt;
attr sensor webCmd brightness&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem [[Attribute|Attribut]] &#039;&#039;&#039;stateFormat&#039;&#039;&#039; wird im [[Gerät]] &#039;&#039;&#039;sensor&#039;&#039;&#039; das Reading &#039;&#039;&#039;brightness&#039;&#039;&#039; in den Status geschrieben. Damit wird der Helligkeitswert auch im Frontend sichtbar.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr sensor stateFormat brightness&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die nachstehende, komplette Definition für die Gruppe C) kann über &#039;&#039;&#039;[[Import von Code Snippets|Raw definition]]&#039;&#039;&#039; in [[FHEM]] importiert werden.&lt;br /&gt;
Hinweis: In neueren Versionen ggf. &#039;&#039;&#039;initialized&#039;&#039;&#039; durch &#039;&#039;&#039;initialize&#039;&#039;&#039; ersetzen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod di_lamp DOIF ([06:00-19:00] and [sensor:brightness] &amp;lt; 40) (set lamp on) DOELSE (set lamp off)&lt;br /&gt;
attr di_lamp alias Lampenlogik&lt;br /&gt;
attr di_lamp devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&lt;br /&gt;
attr di_lamp group C) Kombinierte Ereignis- und Zeitsteuerung&lt;br /&gt;
attr di_lamp icon helper_doif&lt;br /&gt;
attr di_lamp room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod lamp dummy&lt;br /&gt;
attr lamp alias Lampe&lt;br /&gt;
attr lamp group C) Kombinierte Ereignis- und Zeitsteuerung&lt;br /&gt;
attr lamp icon light_light&lt;br /&gt;
attr lamp room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod sensor dummy&lt;br /&gt;
attr sensor alias Helligkeitssensor&lt;br /&gt;
attr sensor group C) Kombinierte Ereignis- und Zeitsteuerung&lt;br /&gt;
attr sensor icon message_light_intensity&lt;br /&gt;
attr sensor readingList brightness&lt;br /&gt;
attr sensor room Schulungsraum&lt;br /&gt;
attr sensor setList brightness:slider,0,1,100&lt;br /&gt;
attr sensor stateFormat brightness&lt;br /&gt;
attr sensor webCmd brightness&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ansicht der Gruppen A) bis C) im Frontend ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:erste_schritte_DOIF.png|670px]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [[DOIF]]&lt;br /&gt;
* [[DOIF/Tipps zur leichteren Bedienung]] Erstellung, Bearbeitung, Syntaxhervorhebung, Klammerprüfung, Suchen&amp;amp;Ersetzen, Zeilennummerierung, uvm. (nicht nur) von DOIF&lt;br /&gt;
* [[Regulärer_Ausdruck]]&lt;br /&gt;
* [[Event]] Ereignisse&lt;br /&gt;
* [[Readings]]&lt;br /&gt;
* [[Internals]]&lt;br /&gt;
* [[Attribute]]&lt;br /&gt;
&lt;br /&gt;
* [http://perldoc.perl.org/perlop.html http://perldoc.perl.org/perlop.html] Perloperatoren&lt;br /&gt;
* [http://perldoc.perl.org/perlre.html http://perldoc.perl.org/perlre.html] Reguläre Ausdrücke&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Plaicy</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Notify&amp;diff=16555</id>
		<title>Notify</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Notify&amp;diff=16555"/>
		<updated>2016-10-08T11:26:37Z</updated>

		<summary type="html">&lt;p&gt;Plaicy: remove duplicate &amp;lt;code&amp;gt;trigger&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:notify}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Ausführung von Anweisung(en) als Reaktion auf Ereignisse&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=notify&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=91_notify.pm&lt;br /&gt;
|ModOwner=rudolfkoenig ({{Link2FU|8|Forum}} / [[Benutzer Diskussion:Rudolfkoenig|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
{{Todo|generelle Überarbeitung, Fehlerkontrolle, Formatierung}}&lt;br /&gt;
{{Randnotiz|RNTyp=[g|Info|RNText= Tipps&lt;br /&gt;
* Weitere grundlegende Informationen/Beispiele zu notify enthält [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung mit Fhem] &amp;lt;br&amp;gt; &amp;quot;Um Ihren Perlcode zu testen, verwenden Sie das [http://fhem.de/commandref#trigger trigger-Kommando]. [...] Wenn Sie also z.B. ein &amp;lt;code&amp;gt;define Testcode notify Schalter1:on {Perlcode}&amp;lt;/code&amp;gt; testen möchten, können Sie Ihren Code mit &amp;lt;code&amp;gt;trigger Schalter1 on&amp;lt;/code&amp;gt; testen. trigger simuliert das Eintreten eines Ereignisses [...]&amp;quot; (Tipp von S. 38 der Version 4.0)&lt;br /&gt;
&amp;lt;!-- AUSKOMMENTIERT wegen derzeitiger Funktionsproblemen iZm codemirror  * FHEM enthält für notify eine eingebaute Perl-Syntax-Prüfung. Diese ist nach [http://fhem.de/commandref.html#perlSyntaxCheck Aktivierung] aber nur aktiv, wenn die [[Konfiguration]] -wie empfohlen- nicht direkt bearbeitet wird. ({{Link2Forum|Topic=51744}}) --&amp;gt; }}&lt;br /&gt;
== Notify, das mächtige Tool ==&lt;br /&gt;
Die nachfolgenden Beispiele beziehen sich hauptsächlich auf [[EIB / KNX|KNX (EIB)]]. Sie sind aber auf alle anderen Systeme übertragbar.&lt;br /&gt;
&lt;br /&gt;
Was ist notify? &lt;br /&gt;
Das Hilfsmodul notify dient dazu, Aktionen abhängig von einem anderen Ereignis/Event (siehe [[Event_monitor|Event monitor]]) auszulösen. Es ist damit möglich, Logikfunktionen im Fhem abzubilden.&lt;br /&gt;
&lt;br /&gt;
Z.B.: das Licht in der Küche wird eingeschaltet ====&amp;amp;gt; draus folgt, dass auch das Radio eingeschaltet wird.&lt;br /&gt;
&lt;br /&gt;
=== Syntax von notify ===&lt;br /&gt;
&lt;br /&gt;
 define &amp;lt;name&amp;gt; notify &amp;lt;Suchmuster&amp;gt; &amp;lt;command&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Das [[Regulärer Ausdruck|Suchmuster (auch Regexp = regulärer Ausdruck)]] ist sehr wichtig. Es ist entweder der Name des auslösenden (&amp;quot;triggernden&amp;quot;) Gerätes oder die Kombination aus Gerät und auslösendem Ereignis (Event) Gerätename:Event. Die Events kann man dem [[Event_monitor|Event-Monitor]] entnehmen. Wenn da z.B. Rollo1 steht, dann reagiert notify auf Rollo1 on und off und was es sonst noch alles gibt.&lt;br /&gt;
&lt;br /&gt;
Wenn man mehrere Suchmuster möchte, kann man diese in Klammer schreiben (Rollo1|Rollo2|Steckdose5)&lt;br /&gt;
als Trenner wird dann Pipe (|) genutzt.&lt;br /&gt;
&lt;br /&gt;
Man kann auch mit Platzhaltern arbeiten.&lt;br /&gt;
&lt;br /&gt;
* Rollo. ==&amp;gt; das notify reagiert auf alles was mit Rollo und &#039;&#039;&#039;einem&#039;&#039;&#039; weiteren beliebigen Zeichen anfängt. Also auf Rollo1 wie auch auf RolloG, aber nicht auf Rollo_wischundweg&lt;br /&gt;
* Rollo.* ==&amp;gt; das notify reagiert auf alles das mit Rollo beginnt.&lt;br /&gt;
* .*isch ==&amp;gt;; Reagiere auf alles das mit isch aufhört (Tisch, Fisch)&lt;br /&gt;
&lt;br /&gt;
Suchmuster/Regex kann man im Internet beispielsweise auf [http://regexpal.com/| http://regexpal.com/] testen.&lt;br /&gt;
&lt;br /&gt;
=== Regexp wizard - FHEMWEB-unterstützte Anlage eines notify ===&lt;br /&gt;
&amp;lt;!-- Warum Regex&#039;&#039;&#039;p&#039;&#039;&#039; wizard und nicht Regex wizard--&amp;gt;&lt;br /&gt;
Die Erstellung eines notify und insbesondere die korrekte Angabe des Suchmusters (Regex) führt gerade bei Einsteigern immer wieder zu Schwierigkeiten. Zur Fehlerminimierung empfiehlt es sich einmal die [[Konfiguration]] nicht direkt zu bearbeiten, sondern die &amp;quot;Befehl-Eingabezeile&amp;quot; und die &amp;quot;Objektdetails&amp;quot; zur Bearbeitung zu nutzen. Zudem enthält Fhem einen Regexp wizard mit dem Regex anhand der in Fhem vorhandenen Devices und deren Events aus einer Auswahlbox selektiert werden können. Voraussetzungen sind:&lt;br /&gt;
* Aktivierung des Hilfsmoduls [[eventTypes]] (bei allen Neuinstallationen Standard) &lt;br /&gt;
* das gesuchte Ereignis (Event) ist nach Aktivierung des Hilfsmoduls bereits mindestens einmal eingetreten&lt;br /&gt;
&lt;br /&gt;
Schrittweise Darstellung der Nutzung des Regexp wizard zur Anlage eines &amp;quot;notify&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
In das [[Konfiguration#Befehl-Eingabefeld|Befehls-Eingabefeld]] eingeben und mit {{Taste|Enter}} bestätigen:&lt;br /&gt;
 define ntest notify a b&lt;br /&gt;
Als Beispiel wird ein notify mit &amp;lt;name&amp;gt; &amp;quot;ntest&amp;quot; angelegt. &amp;quot;a&amp;quot; und &amp;quot;b&amp;quot; sind beliebige Platzhalter für &amp;lt;Suchmuster&amp;gt; und &amp;lt;Command&amp;gt;, die bei der weiteren Bearbeitung mit dem endgültigen Werten ersetzt werden.&lt;br /&gt;
Der Regexp wizard öffnet sich:&lt;br /&gt;
[[Datei:Regexp wizard1.JPG|400px|thumb|center]]&lt;br /&gt;
Nun in der Auswahlbox das auslösende Event (Ereignis) auswählen; zunächst das Device und dann das gewünschte Regex. Hier soll das notify bei jeder Veränderung der Temperatur (temperature.*) des Device BTHR918N reagieren. Abschließend mit einem Mausklick auf {{Taste|set}} bestätigen. Wählt man mehrere Regex in dieser Weise aus, so wird das &amp;quot;notify&amp;quot; bei Eintritt jedes dieser Events ausgeführt:&lt;br /&gt;
[[Datei:Regexp wizard2.JPG|400px|thumb|center]]&lt;br /&gt;
Anschließend den Platzhalter &amp;quot;a&amp;quot; mit Klick auf den Link &amp;quot;removeRegexpPart&amp;quot; löschen:&lt;br /&gt;
[[Datei:Regexp wizard3.JPG|400px|thumb|center]]&lt;br /&gt;
Den Link &amp;quot;DEF&amp;quot; anklicken, damit sich der DEF-Editor öffnet:&lt;br /&gt;
[[Datei:Regexp wizard4.JPG|400px|thumb|center]]&lt;br /&gt;
Jetzt den auszuführenden Befehl im &amp;quot;DEF&amp;quot;-Bereich durch Überschreiben des Platzhalters &amp;quot;b&amp;quot; eintragen und mit Klick auf {{Taste|modify ntest}} abschließen:&lt;br /&gt;
[[Datei:Regexp wizard5.JPG|400px|thumb|center]]&lt;br /&gt;
Das fertige und sofort aktive &amp;quot;notify&amp;quot; sieht abschließend folgendermaßen aus:&lt;br /&gt;
[[Datei:Regexp wizard6.JPG|400px|thumb|center]]&lt;br /&gt;
Am Schluss das Speichern über {{Taste|Save config}} nicht vergessen.&lt;br /&gt;
&lt;br /&gt;
=== Etwas schalten, wenn ein anderes Gerät geschaltet wird ===&lt;br /&gt;
Wenn man das obige mit KNX abbilden möchte, benötigt man auf der KNX Seite:&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitung ====&lt;br /&gt;
* Gruppenadresse (GA) für die Steckdose vom Radio (0/0/10)&lt;br /&gt;
* GA vom Licht (0/0/20)&lt;br /&gt;
&lt;br /&gt;
Auf der Fhem Seite wird benötigt:&lt;br /&gt;
&lt;br /&gt;
 define RadioKueche EIB 0/0/10&lt;br /&gt;
 define LichtKueche EIB 0/0/20&lt;br /&gt;
&lt;br /&gt;
==== notify Befehl ====&lt;br /&gt;
 define LichtamRadioan notify LichtKueche { fhem &amp;quot;set RadioKueche $EVENT&amp;quot; } &lt;br /&gt;
oder &#039;&#039;&#039;besser&#039;&#039;&#039;&lt;br /&gt;
 define LichtamRadioan notify LichtKueche set RadioKueche $EVENT &lt;br /&gt;
&lt;br /&gt;
==== Erklärung ====&lt;br /&gt;
* Der Begriff &amp;quot;LichtamRadioan&amp;quot; ist nur ein Platzhalter, damit das notify in Fhem verwaltet werden kann.&lt;br /&gt;
* &amp;quot;$EVENT&amp;quot; ist ein Platzhalter für den Zustand vom Pattern. $EVENT enthält ein &amp;quot;off&amp;quot; wenn das LichtKueche aus ist und ein &amp;quot;on&amp;quot; wenn das Licht eingeschaltet ist.&lt;br /&gt;
* &amp;quot;{ &amp;amp;lt;perlcode&amp;amp;gt; }&amp;quot; alles was zwischen {} steht ist Perl code. Perl kennt das Schlüsselwort Fhem. Das Schlüsselwort Fhem dient dazu, Fhem Befehle auszuführen. Es wird also der Fhem Befehl &amp;quot;set RadioKueche on/off&amp;quot; ausgeführt. on oder off ist abhängig vom Pattern. Der eigentliche Fhem Befehl muss in &amp;quot; &amp;quot; stehen.&lt;br /&gt;
* Warum ist die 2. Variante besser? In der 1. Variante wechselt man von Fhem-Ebene des notify mittels {} auf Perl-Ebene, wo man mit dem Schlüsselwort Fhem &amp;quot;&amp;quot; wieder einen Befehl auf Fhem-Ebene ausführt. In der 2. Variante werden diese unnötigen, resourcenverschwendenden Ebenen-Wechsel vermieden. Alles wird auf der Fhem-Ebene ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Einschalten von mehreren Geräten/Lampen, wenn das Licht eingeschaltet wird ===&lt;br /&gt;
==== Vorbereitung ====&lt;br /&gt;
KNX:&lt;br /&gt;
* 3 GAs für drei Geräten bzw Lampen (0/0/30 0/0/31 0/0/32)&lt;br /&gt;
&lt;br /&gt;
Fhem:&lt;br /&gt;
 define LichtWZ EIB 0/0/30&lt;br /&gt;
 define Steckdose1 EIB 0/0/31&lt;br /&gt;
 define Steckdose2 EIB 0/0/32&lt;br /&gt;
&lt;br /&gt;
==== notify Befehl ====&lt;br /&gt;
 define SteckdoseWZein notify LichtWZ { fhem &amp;quot;set Steckdose1 $EVENT;;set Steckdose2 $EVENT &amp;quot; } &lt;br /&gt;
oder &#039;&#039;&#039;besser&#039;&#039;&#039;&lt;br /&gt;
 define SteckdoseWZein notify LichtWZ set Steckdose1,Steckdose2 $EVENT&lt;br /&gt;
&lt;br /&gt;
==== Erklärung ====&lt;br /&gt;
Wenn das LichtWZ eingeschaltet wird, dann werden auch die Steckdosen (1 und 2) eingeschaltet.&lt;br /&gt;
&lt;br /&gt;
=== Einfache ODER Funktion ===&lt;br /&gt;
Eine einfache ODER Funktion kann sehr einfach realisiert werden&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitung ====&lt;br /&gt;
KNX:&lt;br /&gt;
* 3x GAs der abzufragende Werte (0/0/40 0/0/41 0/0/42)&lt;br /&gt;
&lt;br /&gt;
Fhem:&lt;br /&gt;
 define Licht1 EIB 0/0/40&lt;br /&gt;
 define Licht2 EIB 0/0/41&lt;br /&gt;
 define Steckdose EIB 0/0/42&lt;br /&gt;
&lt;br /&gt;
==== notify Befehl ====&lt;br /&gt;
 define SteckdoseWZein notify (Licht1|Licht2) set Steckdose $EVENT &lt;br /&gt;
oder&lt;br /&gt;
 define SteckdoseWZein notify (Licht.) set Steckdose $EVENT&lt;br /&gt;
&lt;br /&gt;
==== Erklärung ====&lt;br /&gt;
Die Werte in der Klammer (wichtig ist das »|«) sind die Rückgabewerte. Alternativ kann in diesem Beispiel auch »Licht.«  (zu beachten ist der Punkt) geschrieben werden. Der Punkt ist ein Platzhalter für (genau) ein beliebiges Zeichen.&lt;br /&gt;
&lt;br /&gt;
Danach folgt der set Befehl.&lt;br /&gt;
Wenn also das Licht1 oder Licht2 den Wert &amp;quot;on&amp;quot; hat, dann hat auch die Steckdose den Wert &amp;quot;on&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Alternative: [[structure]]&lt;br /&gt;
&lt;br /&gt;
=== Einfache UND Funktion ===&lt;br /&gt;
Ob man dieses Konstrukt noch als einfach bezeichnen kann, wage ich mal zu bezeifeln. In Fhem fehlen Loggingfunktionen, die man alle selber mit Perl Code erstellen kann (Danke an MAZ).&lt;br /&gt;
Dadurch ist Fhem zwar mächtig, wird aber für viele sehr kompliziert.&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel soll - wenn drei Rollos geschlossen sind - am Taster eine LED eingeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitung ====&lt;br /&gt;
KNX:&lt;br /&gt;
* 3x GDs für die Rückgabewert Rollo geschlossen == 1 (0/0/50 0/0/51 0/0/52)&lt;br /&gt;
* GD LED am Lichtschalter (0/0/106)&lt;br /&gt;
&lt;br /&gt;
Fhem:&lt;br /&gt;
 define R1ZU EIB 0/0/50&lt;br /&gt;
 attr R1ZU dummy 1&lt;br /&gt;
 define R2ZU EIB 0/0/51&lt;br /&gt;
 attr R1ZU dummy 1&lt;br /&gt;
 define R3ZU EIB 0/0/52&lt;br /&gt;
 attr R1ZU dummy 1&lt;br /&gt;
 define LEDalleRolloZu EIB 0/0/106&lt;br /&gt;
Durch das Atribut dummy werden keine Schaltfunktion angeboten. Es kann nur Werte anzeigen.&lt;br /&gt;
&lt;br /&gt;
==== notify Befehl ====&lt;br /&gt;
 define nt.allerolloszu notify (R1ZU|R2ZU|R6ZU) {&lt;br /&gt;
 my $r1 = Value(&amp;quot;R1ZU&amp;quot;);;&lt;br /&gt;
 my $r2 = Value(&amp;quot;R2ZU&amp;quot;);;&lt;br /&gt;
 my $r3 = Value(&amp;quot;R6ZU&amp;quot;);;&lt;br /&gt;
 if ($r1 eq &amp;quot;on&amp;quot; &amp;amp;amp;&amp;amp;amp; $r2 eq &amp;quot;on&amp;quot; &amp;amp;amp;&amp;amp;amp; $r3 eq &amp;quot;on&amp;quot;) {&lt;br /&gt;
   fhem &amp;quot;set LEDalleRolloZu on&amp;quot;&lt;br /&gt;
 } else {&lt;br /&gt;
   fhem &amp;quot;set LEDalleRolloZu off&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Erklärung ====&lt;br /&gt;
Es werden die drei Rückgabewerte R1ZU, R2ZU und R3ZU ausgewertet. Danach folgt Perl Code, deswegen beginnt das ganze mit einer { und endet mit }&lt;br /&gt;
&lt;br /&gt;
my $r1 =&amp;amp;gt; Variable $r1 definieren&lt;br /&gt;
= Value(&amp;quot;R1ZU&amp;quot;);; ==&amp;amp;gt; weist den Rückgabewert (on oder off) von R1ZU der Variable $r1 zu &lt;br /&gt;
&lt;br /&gt;
Der doppelte ;; ist ein Fhem Thema. Eigentlich würde für Perl ein ; reichen. Aber Fhem nutzt selbst das ; und daher wird ein ;; benötigt. Mit den ersten drei my Zeilen werden die Rückgabewerte den Variabeln zugewiesen.&lt;br /&gt;
&lt;br /&gt;
Danach erfolgt ein normales &amp;quot;if then else&amp;quot; Konstrukt. Die Zeile »($r1 eq &amp;quot;on&amp;quot; &amp;amp;amp;&amp;amp;amp; $r2 eq &amp;quot;on&amp;quot; &amp;amp;amp;&amp;amp;amp; $r3 eq &amp;quot;on&amp;quot;)«&amp;amp;#160;kann man so lesen: Wenn $r1 den Wert &amp;quot;on&amp;quot; und (&amp;amp;amp;&amp;amp;amp;) $r2 den Wert &amp;quot;on&amp;quot; und $r3 den Wert &amp;quot;on&amp;quot; dann schalte die LEDalleRolloZu ein {fhem(&amp;quot;set LEDalleRolloZu on&amp;quot;)}&lt;br /&gt;
ansonsten else schalte die LED aus. {fhem(&amp;quot;set LEDalleRolloZu off&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Alternative: [[structure]]&lt;br /&gt;
&lt;br /&gt;
=== Zeitverzögert schalten ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aufgabe:&#039;&#039;&#039; || Zeitverzögert schalten&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;Beschreibung:&#039;&#039;&#039; || Mit einem Notify zeitverzögert eine Aktion auslösen.&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;Vorbereitung:&#039;&#039;&#039; || Gerät &amp;quot;Lampe&amp;quot; ist definiert und es gibt eine Situation, die ein Ereignis &amp;quot;Fernbedienung:.*&amp;quot; generiert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Befehl:&#039;&#039;&#039; || &amp;lt;code&amp;gt;define ntfy1 notify Fernbedienung:.* sleep 7.5;; set Lampe $EVENT&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Erläuterungen:&#039;&#039;&#039; || Bei Eintreten eines Ereignisses &amp;quot;Fernbedienung*&amp;quot; wird nach einer Pause von siebeneinhalb Sekunden der Befehl &amp;lt;set Lampe ??&amp;gt; ausgeführt, wobei der eigentliche Befehl aus dem auslösenden Ereignis übernommen wird.&lt;br /&gt;
:&#039;&#039;Quelle: [http://forum.fhem.de/index.php/topic,17161.0.html Fhem Forum]&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Eine PV-Anlage (Solarstrom) zur Steuerung der Rollos nutzen (optional Zeit und Datums abhängig) ===&lt;br /&gt;
Hier ein kleines Beispiel, wie man mit Hilfe einer PV-Anlage die Sonneneinstrahlung auf der Südseite ermittelt und dies zur Rolladensteuerung nutzt.&lt;br /&gt;
Optional: Die Funktion soll allerdings nur zwischen 9:30 und 17:00 stattfinden. (zweites Beispiel)&lt;br /&gt;
Optional: Die Funktion soll nur zwischen dem 6. und 9. Monat funktioneren. (drittes Beispiel)&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitung ====&lt;br /&gt;
PV Anlage mit SolarView abfragen.&lt;br /&gt;
Per Hand ermitteln, ab wieviel erzeugtem Strom es sinnvoll ist die Rollos zu schließen.&lt;br /&gt;
&lt;br /&gt;
==== notify Syntax ====&lt;br /&gt;
Fhem:&lt;br /&gt;
&lt;br /&gt;
 define sv SolarView solarview 15000 wr1 wr2 wr3 wr4                           &amp;lt;----vier Wechselrichter&lt;br /&gt;
 attr sv event-on-change-reading currentPower                                &lt;br /&gt;
&lt;br /&gt;
 define nt.sonnenlichtpersolar notify (sv:currentPower.*) { &lt;br /&gt;
  if ($EVTPART1 &amp;amp;lt; 3000 ) {&lt;br /&gt;
  fhem(&#039;set Flur1 Auf&#039;);&lt;br /&gt;
 }else {&lt;br /&gt;
  if ($EVTPART1 &amp;amp;gt; 5000 ) {&lt;br /&gt;
  fhem(&#039;set Flur1 Ab&#039;);&lt;br /&gt;
  } &lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Optional 1: Zeitabhängig&lt;br /&gt;
&lt;br /&gt;
 (sv:currentPower.*) { &lt;br /&gt;
  my $hm = sprintf(&amp;quot;%02d:%02d&amp;quot;, $hour, $min);&lt;br /&gt;
   if ( $hm gt &amp;quot;09:30&amp;quot; &amp;amp;amp;&amp;amp;amp; $hm lt &amp;quot;17:00&amp;quot;) { &lt;br /&gt;
   if ($EVTPART1 &amp;amp;lt; 5000 ) {&lt;br /&gt;
    fhem(&#039;set Flur1 Auf&#039;);&lt;br /&gt;
    }else {&lt;br /&gt;
    if ($EVTPART1 &amp;amp;gt; 8000 ) {&lt;br /&gt;
    fhem(&#039;set Flur1 Ab&#039;);&lt;br /&gt;
    } &lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Optional 2: Zeit und Datum&lt;br /&gt;
&lt;br /&gt;
 (sv:currentPower.*) { &lt;br /&gt;
  my $hm = sprintf(&amp;quot;%02d:%02d&amp;quot;, $hour, $min);&lt;br /&gt;
  if ($month &amp;gt;= 6 &amp;amp;amp;&amp;amp;amp; $month &amp;lt;= 9) {&lt;br /&gt;
   if ( $hm gt &amp;quot;09:30&amp;quot; &amp;amp;amp;&amp;amp;amp; $hm lt &amp;quot;17:00&amp;quot;) { &lt;br /&gt;
   if ($EVTPART1 &amp;amp;lt; 5000 ) {&lt;br /&gt;
    fhem(&#039;set Flur1,RBUERO1,RBUERO2 Auf&#039;);&lt;br /&gt;
    }else {&lt;br /&gt;
    if ($EVTPART1 &amp;amp;gt; 8000 ) {&lt;br /&gt;
    fhem(&#039;set Flur1,Flur2,RBUERO1,RBUERO2 Ab&#039;);&lt;br /&gt;
    } &lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==== Erklärung ====&lt;br /&gt;
* Das define wird in der Kommandozeile im Webbrowser eingegeben.&lt;br /&gt;
* Anschliessend wird im Webbrowser die DEF bearbeitet, das erspart uns Probleme mit Perl&lt;br /&gt;
* define sv SolarView ... &amp;lt;==== ist die Schnittstelle vom SolarView&lt;br /&gt;
* define nt.sonnenlichtpersolar notify (sv:currentPower.*) { &amp;lt;==== hier wird ein notify angelegt, der auf das &amp;quot;define sv&amp;quot; Wert &amp;quot;currentPower.*&amp;quot; (.* ist irgendwas) reagiert&lt;br /&gt;
  if ($EVTPART1 &amp;amp;lt; 3000 ) {&lt;br /&gt;
    fhem(&#039;set Flur1 Auf&#039;);&lt;br /&gt;
  }else {&lt;br /&gt;
   if ($EVTPART1 &amp;amp;gt; 5000 ) {&lt;br /&gt;
    fhem(&#039;set Flur1 Ab&#039;);&lt;br /&gt;
  } &lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
Diese if-Funktion wertet den Rückgabewert von currentPower aus. Hierbei muss man wissen, dass $EVTPART1 das Splitergebnis vom Rückgabewert ist&lt;br /&gt;
&lt;br /&gt;
Beispiel: Der Rückgabewert (wie im Beispiel) ist &amp;quot;currentPower: 6000&amp;quot;.&lt;br /&gt;
Jetzt steht im &amp;quot;$EVTPART0 == currentPower:&amp;quot; und im &amp;quot;$EVTPART1 == 6000&amp;quot;&lt;br /&gt;
Das bedeutet, dass man sich nicht selbst den richtigen split (Perl Befehl) Aufruf ausdenken muss, dies übernimmt vielmehr Fhem.&lt;br /&gt;
&lt;br /&gt;
Ergebnis: &lt;br /&gt;
Das Rollo wird abhängig von der erzeugten IST_Strommenge auf und zu gefahren.&lt;br /&gt;
Damit dies nicht dauernd hin und her pendelt, wurde der Auf Wert sehr klein und den Ab Wert sehr groß gewählt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optional 1:&#039;&#039;&#039; Der Block &amp;quot;my $hm = sprintf(&amp;quot;%02d:%02d&amp;quot;, $hour, $min);&amp;quot; erzeugt die String-Variable $hm mit dem Inhalt $hour:$min. %02d begrenzt die Ausgabe auf zwei Stellen.&lt;br /&gt;
Danach wird mit &amp;quot;if ( $hm gt &amp;quot;09:30&amp;quot; &amp;amp;&amp;amp; $hm lt &amp;quot;17:00&amp;quot;)&amp;quot; mit stringvergleichende Operatoren geprüft, ob die Uhrzeit zwischen 9:30 und 17:00 liegt (lt = kleiner als; gt = größer als). Es wäre auch ein le und ge möglich: le =  kleiner/gleich als, ge =  größer/gleich als.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optional 2:&#039;&#039;&#039;if( $month &amp;gt;= 6 &amp;amp;&amp;amp; $month &amp;lt;= 9) {&lt;br /&gt;
&lt;br /&gt;
Hier wird die numerische Fhem-Standard-Variable $month (Monat) auf größer/gleich bzw kleiner/gleich mit den binären Operatoren überprüft.&lt;br /&gt;
Die Funktion arbeitet also nur zwischen dem 6. und dem 9. Monat und dann auch nur zwischen 9:31 und 16:59.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise ===&lt;br /&gt;
* Entsprechend zu $EVENT gibt es auch noch $NAME und $TYPE. $NAME und $TYPE enthalten den Namen bzw. Typ des Ereignis auslösenden Gerätes.&lt;br /&gt;
* Wird der Perl-Code in einem &amp;lt;code&amp;gt;notify&amp;lt;/code&amp;gt; immer länger, lagere den Code wegen der Übersichtlichkeit in eine eigene Programmdatei aus, wie in [[99_myUtils anlegen]] beschrieben.&lt;br /&gt;
* Achtung! Wenn man das Skript für den notify-Befehl über mehrere Zeilen schreibt, muss man anscheinend darauf achten, dass keine abschliessende Leerzeile mitgespeichert wird. Sonst wird der notify-Befehl ignoriert.&lt;br /&gt;
* Dieser {{Link2Forum|Topic=38520|Message=307325}} enthält Vorschläge zur Vorgehensweise bei der Erstellung von komplexen &#039;&#039;notify&#039;&#039; Definitionen bzw. bei deren Fehlerbehebung.&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
* [[Escapen in Perlbefehlen]]&lt;br /&gt;
* [[Klammerebenen]]&lt;br /&gt;
* [[DOIF]] als Alternative vereinigt die Funktionalität des notify-, at-, watchdog-Befehls in Kombination mit logischen Abfragen unter einem Dach&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Hilfsmodul]]&lt;/div&gt;</summary>
		<author><name>Plaicy</name></author>
	</entry>
</feed>