<?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=Muschelpuster</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=Muschelpuster"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Muschelpuster"/>
	<updated>2026-04-10T15:30:47Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Modul_Shelly&amp;diff=40456</id>
		<title>Modul Shelly</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Modul_Shelly&amp;diff=40456"/>
		<updated>2025-10-23T20:48:38Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Attribut webhook */ Hinweis eingebracht, dass die Webhooks erzeugt werden müssen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Todo|&#039;&#039;&#039;Achtung: Diese Seite ist teilweise veraltet, insbesondere unterstützt das Modul weitere Aktoren. Bitte Commandref lesen - diese Seite ist in Überarbeitung&#039;&#039;&#039;}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Das Modul stellt ein Interface zur Bedienung von Shelly Devices zur Verfügung&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=Shelly&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModFTopic=118446&lt;br /&gt;
|ModTechName=36_Shelly.pm&lt;br /&gt;
|ModOwner=Starkstrombastler ({{Link2FU|3884|Forum}}/[[Benutzer Diskussion:Starkstrombastler|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
Auf dieser Seite werden die Aktoren des bulgarischen Herstellers Allterco Robotics beschrieben (Markenname Shelly) sowie deren Ansteuerung mit FHEM und aufgetretene Probleme. &lt;br /&gt;
{{Randnotiz|RNTyp=r|RNText=&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Einige der auf dieser Seite erwähnten Geräte und Funktionen sind derzeit nur mit {{Link2Forum|Topic=111905|Message=1285498|LinkText=dieser Testversion}} verfügbar, die manuell installiert werden muss!&lt;br /&gt;
* Für die Weiterentwicklung des Moduls wurde im Forum ein neues Thema &#039;&#039;&#039;({{Link2Forum|Topic=137222|LinkText=Entwicklungs-Thread Modul 36_Shelly.pm}})&#039;&#039;&#039; aufgemacht.}}&lt;br /&gt;
Bei den Shelly-Geräten handelt es sich um IP-basierte Schalt- und Dimmaktoren, die auf verschiedene Weise angesteuert werden können &lt;br /&gt;
*über die Web-Oberfläche des eingebauten Mikro-Webservers,&lt;br /&gt;
*über eine proprietäre App des Herstellers (Achtung, Cloud!),&lt;br /&gt;
*über das hier beschriebene FHEM-Modul 36_Shelly.pm&lt;br /&gt;
*über MQTT&lt;br /&gt;
Ein Teil der Aktoren verfügt über eine eingebaute Leistungsmessung (siehe Spalte Messkanäle in unten stehender Tabelle).&lt;br /&gt;
&lt;br /&gt;
==Geräteübersicht==&lt;br /&gt;
Übersicht der IP-basierten Produktreihen&lt;br /&gt;
{| class=&amp;quot;wikitable mw:datatable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:15px&amp;quot; |ID&lt;br /&gt;
! style=&amp;quot;width:100px&amp;quot; | Produktreihe&lt;br /&gt;
! style=&amp;quot;width:225px&amp;quot; |gemeinsame Merkmale&lt;br /&gt;
|-&lt;br /&gt;
|SH&lt;br /&gt;
|erste Generation&lt;br /&gt;
|COIOT (Nutzung mit Shelly-Monitor), kein Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
|SN&lt;br /&gt;
|Shelly Plus&lt;br /&gt;
Shelly Plus mini&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SP&lt;br /&gt;
|Shelly Pro&lt;br /&gt;
|Montage auf Hutschiene, zusätzlicher Ethernet-Port (RJ45)&lt;br /&gt;
|-&lt;br /&gt;
|S3&lt;br /&gt;
|Shelly Gen3&lt;br /&gt;
Shelly Gen3 mini&lt;br /&gt;
|proprietärer Prozessor&lt;br /&gt;
|-&lt;br /&gt;
|SA&lt;br /&gt;
|Control Panel&lt;br /&gt;
|Android-System&lt;br /&gt;
|}&lt;br /&gt;
ID: erste beiden Stellen der Modell-ID &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Liste der aktuell unterstützten Geräte &lt;br /&gt;
(hier nicht aufgeführte Geräte der ersten Generation können zusammen mit dem Shelly-Monitor genutzt werden):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! data-sort-type=&amp;quot;text&amp;quot; style=&amp;quot;width:150px&amp;quot; |Modell&lt;br /&gt;
! data-sort-type=&amp;quot;text&amp;quot; style=&amp;quot;width:75px&amp;quot; |Typ&lt;br /&gt;
! data-sort-type=&amp;quot;number&amp;quot; style=&amp;quot;width:20px;text-align:center;&amp;quot; |Schalt- kanäle&lt;br /&gt;
! data-sort-type=&amp;quot;number&amp;quot; style=&amp;quot;width:20px;text-align:center;&amp;quot; |Dimm- kanäle&lt;br /&gt;
! data-sort-type=&amp;quot;number&amp;quot; style=&amp;quot;width:20px;text-align:center;&amp;quot; |Mess- kanäle&lt;br /&gt;
! data-sort-type=&amp;quot;number&amp;quot; style=&amp;quot;width:20px;text-align:center;&amp;quot; |Digital Eingänge&lt;br /&gt;
! |Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; |&#039;&#039;&#039;Gen 1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Shelly 1&lt;br /&gt;
|Schalter&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly 1PM&lt;br /&gt;
|Schalter&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly 1L&lt;br /&gt;
|Schalter&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |Shelly 2&lt;br /&gt;
| Schalter&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Rollladenaktor&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |Shelly 2.5&lt;br /&gt;
|Schalter&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Rollladenaktor&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly 4Pro&lt;br /&gt;
|Schalter&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly i3&lt;br /&gt;
| Digitale Eingänge&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly EM&lt;br /&gt;
|Leistungsmessung&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Shelly 3EM]]&#039;&#039;&#039;&lt;br /&gt;
|Leistungsmessung&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Shelly Uni]]&#039;&#039;&#039;&lt;br /&gt;
|Universal&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|*)&lt;br /&gt;
|1-Wire, 2 potentialfreie Relaisausgänge&lt;br /&gt;
Analogeingänge&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Plug&lt;br /&gt;
Shelly Plug S &lt;br /&gt;
|Schaltsteckdose&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1 Taster&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |Shelly RGBW2&lt;br /&gt;
|Dimmer&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|1&lt;br /&gt;
|4-fach Aktor&lt;br /&gt;
|-&lt;br /&gt;
|Dimmer&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
| 1&lt;br /&gt;
|1&lt;br /&gt;
|RGBW Controller&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Dimmer2&lt;br /&gt;
|Dimmer&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Duo&lt;br /&gt;
|Leuchte&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|E27 oder GU10 Fassung&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Vintage&lt;br /&gt;
|Leuchte&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Bulb&lt;br /&gt;
|Leuchte&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Modi: weiß oder farbe&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; |&#039;&#039;&#039;Shelly Plus&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Plus 1&lt;br /&gt;
&lt;br /&gt;
|Schalter &lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Shelly Plus 1PM]]&#039;&#039;&#039;&lt;br /&gt;
|Schalter&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |&#039;&#039;&#039;[[Shelly Plus 2PM]]&#039;&#039;&#039;&lt;br /&gt;
| Schalter&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Rollladenaktor&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Plus i4&lt;br /&gt;
|Digitale Eingänge&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|AC und DC - Variante&lt;br /&gt;
|-&lt;br /&gt;
| Shelly Plus Plug S&lt;br /&gt;
Shelly Plus Plug IT&lt;br /&gt;
Shelly Plus Plug UK&lt;br /&gt;
Shelly Plus Plug US&lt;br /&gt;
|Schaltsteckdose&lt;br /&gt;
&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1 Taster;&lt;br /&gt;
Varianten V1, V2&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Plus Uni&lt;br /&gt;
|Universal&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|*)&lt;br /&gt;
|1-Wire, 2 potentialfreie Relaisausgänge &lt;br /&gt;
Analogeingänge; Neu in 2024&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Plus 0-10V Dimmer&lt;br /&gt;
|Dimmer &lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|0-10 V DC Ausgang&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |Shelly Plus RGBW&lt;br /&gt;
|Dimmer&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|4-fach Aktor&lt;br /&gt;
|-&lt;br /&gt;
|Dimmer&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|RGBW Controller&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | &#039;&#039;&#039;Shelly Plus Mini&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Plus 1 Mini&lt;br /&gt;
|Schalter&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Plus 1PM Mini&lt;br /&gt;
|Schalter&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly PM Mini&lt;br /&gt;
|Leistungsmessung&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; |&#039;&#039;&#039;Shelly Pro&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Pro 1&lt;br /&gt;
|Schalter&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Pro 1PM&lt;br /&gt;
|Schalter&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Pro 2&lt;br /&gt;
| Schalter&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Pro 2PM&lt;br /&gt;
|Schalter&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Pro Dual&lt;br /&gt;
|Rollladenaktor&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|2 Rolladenaktoren&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Pro Dimmer 1PM &lt;br /&gt;
|Dimmer&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Pro Dimmer 2PM&lt;br /&gt;
|Dimmer&lt;br /&gt;
|&lt;br /&gt;
| 2&lt;br /&gt;
|2&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Pro 3&lt;br /&gt;
|Schalter&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Pro 3EM&lt;br /&gt;
|Leistungsmessung&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|1 Schaltkanal mit Addon&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Pro EM50 &lt;br /&gt;
|Leistungsmessung&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Pro 4PM&lt;br /&gt;
|Schalter&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; |&#039;&#039;&#039;Shelly Gen3&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Shelly 1 Gen3&lt;br /&gt;
|Schalter&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly 1PM Gen3&lt;br /&gt;
|Schalter&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly i4 Gen3&lt;br /&gt;
|Digitale Eingänge&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Dimmer 0/1-10V Gen3&lt;br /&gt;
|Dimmer&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|2&lt;br /&gt;
|0-10V DC oder&lt;br /&gt;
1-10V DC Ausgang&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; |&#039;&#039;&#039;Shelly Gen3 Mini&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Shelly 1 Mini Gen3&lt;br /&gt;
|Schalter&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly 1PM Mini Gen3 &lt;br /&gt;
|Schalter&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Shelly PM Mini Gen3&lt;br /&gt;
|Leistungsmessung&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | &#039;&#039;&#039;Control Panels&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Shelly Wall Display&lt;br /&gt;
| Control Panel&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Einbindung in FHEM==&lt;br /&gt;
Vorgehensweise zur Einbindung eines Shelly-Gerätes in FHEM:&lt;br /&gt;
*Aktor nach Vorschrift anschließen&lt;br /&gt;
*mit einem WLAN-fähigen Gerät (Laptop, Smartphone, Tablet...; im Folgenden als &#039;&#039;&#039;Laptop&#039;&#039;&#039; bezeichnet) nach dem internen Access Point suchen, der durch das Shelly-Gerät erzeugt wird; typischerweise hat es eine SSID ähnlich wie&lt;br /&gt;
:&amp;lt;code&amp;gt;shelly1-..., shellyswitch-..., shelly4pro-..., &amp;lt;/code&amp;gt; &lt;br /&gt;
*&#039;&#039;&#039;Laptop&#039;&#039;&#039; mit diesem Access Point verbinden; typischerweise bekommt das Gerät dabei die IP-Adresse 192.168.33.2 zugewiesen.&lt;br /&gt;
*im Browser des &#039;&#039;&#039;Laptops&#039;&#039;&#039; die IP-Adresse 192.168.33.1 aufrufen - das ist der Shelly selbst; in der damit angezeigten Weboberfläche kann das Shelly-Gerät konfiguriert werden&lt;br /&gt;
**Shelly ins häusliche WLAN anmelden (mit fester IP-Adresse &amp;lt;shelly-ip&amp;gt; natürlich...)&lt;br /&gt;
**Internen Access Point abschalten (kann auch nach dem nächsten Schritt oder noch später erfolgen)&lt;br /&gt;
**Testen: &#039;&#039;&#039;Laptop&#039;&#039;&#039; wieder mit dem häuslichen WLAN verbinden, und im Browser die Adresse &amp;lt;shelly-ip&amp;gt; aufrufen&lt;br /&gt;
*In FHEM definieren &lt;br /&gt;
:&amp;lt;code&amp;gt;define myShelly Shelly &amp;lt;shelly-ip&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
*Das Modul setzt bei bekannten Geräten das Attribut &amp;lt;code&amp;gt;model&amp;lt;/code&amp;gt; automatisch. Bei nicht unterstützten Geräten wird das Attribut auf den Wert &amp;lt;code&amp;gt;generic&amp;lt;/code&amp;gt; gesetzt. In diesen Fällen kann das Attribut &amp;lt;code&amp;gt;model&amp;lt;/code&amp;gt; auf der Detailseite des Devices manuell gesetzt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt; attr myShelly model shellyrgbw|shellydimmer|shelly2.5|shelly2|shellyem|shelly3em|shelly4|shellyplug|shelly1|shellybulb|shelly1pm|shellyuni|generic&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls es sich um einen Shelly2 oder 2.5 handelt, muss ferner das Attribut &amp;lt;code&amp;gt;mode&amp;lt;/code&amp;gt; auf &amp;quot;roller&amp;quot; oder &amp;quot;relay&amp;quot; gesetzt werden. Mit diesem Modul können alle Daten übertragen und (prinzipiell) alle Konfigurationsänderungen durchgeführt werden, außerdem ist es auf einfachste Weise zu installieren. Das Modul pollt im per Attribut &amp;lt;code&amp;gt;interval&amp;lt;/code&amp;gt; einstellbaren Abstand zyklisch den Aktor auf Statusänderungen (Wert 0 =&amp;gt; kein Polling). Damit der Aktor im Stande ist, irgendwelche Zustandsänderungen &#039;&#039;von sich aus&#039;&#039; an FHEM zu melden, müssen diese als REST-Befehle (also URL-Aufrufe) in der Konfigurationsoberfläche des Shelly-Aktors eingetragen werden. Siehe CommandRef.&lt;br /&gt;
&lt;br /&gt;
Zum Betrieb ist ferner noch zu bemerken, dass das Modul zwar meldet, ob ein Firmware-Update nötig ist, ausgelöst werden muss dieses aber über die Web-Oberfläche des Shelly selber.&lt;br /&gt;
&lt;br /&gt;
===Actions/Webhooks (nur Testversion)===&lt;br /&gt;
Ab Shelly Firmware 1.5.0 werden Actions unterstützt. Damit besteht die Möglichkeit, dass ein Shelly bei Eintreten bestimmter Ereignisse von sich aus Meldungen an andere Shellies und/oder übergeordnete Systeme wie FHEM absetzt. Dies ist nützlich, um Statusänderungen, die z.B. durch lokal betätigte Tasten entstehen, direkt an FHEM zu übermitteln.&lt;br /&gt;
&lt;br /&gt;
Nachfolgende Beispiele zeigen den Code, der im Shelly unter URL einzutragen ist:&lt;br /&gt;
&lt;br /&gt;
Ausgang (Relais) eines Shelly1 schaltet ein:      &lt;br /&gt;
:&amp;lt;code&amp;gt;http://&amp;lt;FHEM-IP&amp;gt;:&amp;lt;Port&amp;gt;/fhem?cmd=set%20&amp;lt;name&amp;gt;%20out_on&amp;lt;/code&amp;gt;&lt;br /&gt;
hierbei sind: &lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;FHEM-IP&amp;gt;&amp;lt;/code&amp;gt; die IP-Adresse des Servers auf dem FHEM läuft&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;Port&amp;gt;&amp;lt;/code&amp;gt; die Port-Nummer&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt; der Name des FHEM-Devices&lt;br /&gt;
:&amp;lt;code&amp;gt;%20&amp;lt;/code&amp;gt;    stellt ein Leerzeichen dar&lt;br /&gt;
&lt;br /&gt;
Beispiel 2: Eingang eines Shelly2 wird betätigt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;http://&amp;lt;FHEM-IP&amp;gt;:&amp;lt;Port&amp;gt;/fhem?cmd=set%20&amp;lt;name&amp;gt;%20input_on%20&amp;lt;ch&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;ch&amp;gt;&amp;lt;/code&amp;gt;  die Nummer des Schaltkanals (Nummer des Eingangs), z.B. &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel 3: Eingang1 eines ShellyDimmers wird betätigt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;http://&amp;amp;#x3C;FHEM-IP&amp;amp;#x3E;:&amp;amp;#x3C;Port&amp;amp;#x3E;/fhem?cmd=set%20&amp;amp;#x3C;name&amp;amp;#x3E;%20short_push&amp;lt;nowiki/&amp;gt;%20&amp;lt;inp&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;inp&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;  Nummer des Eingangs, 0 oder 1 (ShellyDimmer verfügen je Schaltkanal über zwei Eingänge)&lt;br /&gt;
&lt;br /&gt;
Beispiel 4: Wirkleistung eines ShellyPro3EM:  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;http://&amp;lt;FHEM-IP&amp;gt;:&amp;lt;Port&amp;gt;/fhem?fwcsrf=csrf_368985985592099&amp;amp;cmd=set%20Y173%20Active_Power_$phase%20$active_power&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
:&amp;lt;code&amp;gt;fwcsrf=csrf_368985985592099&amp;lt;/code&amp;gt;    das CSRF-Token (FHEMWeb)&lt;br /&gt;
:&amp;lt;code&amp;gt;$phase&amp;lt;/code&amp;gt;   wird vom Shelly durch a, b oder c ersetzt&lt;br /&gt;
: &amp;lt;code&amp;gt;$active_power&amp;lt;/code&amp;gt;  wird vom Shelly durch die aktuelle Wirkleistung ersetzt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Endpoints&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In vorstehenden Beispielen stellt der Teil &amp;lt;code&amp;gt;set%20&amp;lt;name&amp;gt;%20&amp;lt;cmd&amp;gt;&amp;lt;/code&amp;gt; den Endpoint dar, d.h. dies ist der Befehl, der vom Shelly-Device in FHEM verarbeitet werden muss.&lt;br /&gt;
&lt;br /&gt;
=====Liste der Befehle der Set-Endpoints:=====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable mw-collapsible&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&amp;lt;cmd&amp;gt;&lt;br /&gt;
!Wert&lt;br /&gt;
!Reading&lt;br /&gt;
!Erläuterung &lt;br /&gt;
!Geräte&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;out_on&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |&amp;lt;code&amp;gt;relay_&amp;lt;ch&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt;&lt;br /&gt;
|Ausgang ein&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |alle Shelly mit Relaisausgang&lt;br /&gt;
ShellyBulb&lt;br /&gt;
ShellyRGBW&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;out_off&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|Ausgang aus&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;button_on&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |&amp;lt;code&amp;gt;button_&amp;lt;ch&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Eingang ein&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |ShellyPlug&lt;br /&gt;
ShellyPlugS&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;button_off&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|Eingang aus&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;input_on&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |&amp;lt;code&amp;gt;input_&amp;lt;ch&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Eingang ein&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |alle Shelly mit HW-Eingang, aber nicht Shelly-I-Geräte&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;input_off&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|Eingang aus&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;input_on&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; |&amp;lt;code&amp;gt;input_&amp;lt;inp&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Eingang ein&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; |ShellyDimmer&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;input_off&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|Eingang aus&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;short_push&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|kurzer Tastendruck&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;long_push&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|langer Tastendruck&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;single_push&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; |&amp;lt;code&amp;gt;input_&amp;lt;ch&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;input_&amp;lt;ch&amp;gt;_action&amp;lt;/code&amp;gt;&lt;br /&gt;
|kurzer Tastendruck&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; |ShellyI3&lt;br /&gt;
ShellyI4 &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;long_push&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|langer Tastendruck&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;double_push&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|zweifacher Tastendruck&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;triple_push&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|dreifacher Tastendruck&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;short_long_push&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|Tastersequenz lang-kurz&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |ShellyI3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;long_short_push&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|Tastersequenz kurz-lang&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;stopped&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |&amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt;&lt;br /&gt;
|Rollo angehalten&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | Shelly2/2.5/Plus2/Pro2 mode=roller&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;) nur für Shelly Plus2/Pro2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;opening&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|Rollo wird geöffnet&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;closing&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|Rollo wird geschlossen&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;is_open   *)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|Rollo offen (in oberer Endlage)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;is_closed   *)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|Rollo geschlossen (in unterer Endlage)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;temperature_over&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;temperature_&amp;lt;ch&amp;gt;_range&amp;lt;/code&amp;gt;&lt;br /&gt;
|Temperatur überschreitet eingestellten Grenzwert&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |ShellyAddOn&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;temperature_under&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;temperature_&amp;lt;ch&amp;gt;_range&amp;lt;/code&amp;gt;&lt;br /&gt;
|Temperatur unterschreitet eingestellten Grenzwert&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;humidity_over&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;humidity_&amp;lt;ch&amp;gt;_range&amp;lt;/code&amp;gt;&lt;br /&gt;
|Luftfeuchtigkeit überschreitet eingestellten Grenzwert&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;humidity_under&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;humidity_&amp;lt;ch&amp;gt;_range&amp;lt;/code&amp;gt;&lt;br /&gt;
|Luftfeuchtigkeit unterschreitet eingestellten Grenzwert&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;tempC&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;$temperature&amp;lt;/code&amp;gt; &lt;br /&gt;
|&amp;lt;code&amp;gt;temperature&amp;lt;/code&amp;gt;&lt;br /&gt;
|Temperatur in °C&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;voltage_over&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |&amp;lt;code&amp;gt;voltage_range&amp;lt;/code&amp;gt;&lt;br /&gt;
|Spannung überschreitet eingestellten Grenzwert&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |ShellyUni&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;voltage_under&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|Spannung unterschreitet eingestellten Grenzwert&lt;br /&gt;
|-&lt;br /&gt;
| Active_Power_$phase&lt;br /&gt;
|&amp;lt;code&amp;gt;$active_power&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;Active_Power_&amp;lt;ph&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Änderung Wirkleistung&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; |ShellyPro3EM&lt;br /&gt;
|-&lt;br /&gt;
|Voltage_$phase&lt;br /&gt;
|&amp;lt;code&amp;gt;$voltage&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;Voltage_&amp;lt;ph&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Änderung Spannung&lt;br /&gt;
|-&lt;br /&gt;
|Current_$phase&lt;br /&gt;
|&amp;lt;code&amp;gt;$current&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;Current_&amp;lt;ph&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Änderung Strom&lt;br /&gt;
|}&lt;br /&gt;
Bei Eintreffen eines Set-Endpoints wird im Shelly-Device das zugeordnete Reading entsprechend gesetzt. Damit kann das Shelly-Ereignis z.B. mit einem &amp;lt;code&amp;gt;notify&amp;lt;/code&amp;gt; ausgewertet werden. Im Anschluss daran holt sich das Modul die aktuellen Daten vom Shelly und setzt das Intervall zurück.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zum ShellyPro3EM: Die Action wird erst bei einer gewissen Änderung des jeweiligen Wertes ausgelöst. Bei kleinen Schwankungen kommen also keine Webhooks in FHEM an. &lt;br /&gt;
&lt;br /&gt;
===== Get-Endpoint =====&lt;br /&gt;
Eine besondere Form stellt der Get-Endpoint dar, mit dem das Shelly-Device in FHEM aufgefordert wird, den Status des Shelly zu holen. Beispiel: &lt;br /&gt;
:&amp;lt;code&amp;gt;http://&amp;lt;FHEM-IP&amp;gt;:&amp;lt;Port&amp;gt;/fhem?cmd=get%20&amp;lt;name&amp;gt;%20status&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Attribut webhook (derzeit nur Gen2)====&lt;br /&gt;
Durch Setzten des Attributes &amp;lt;code&amp;gt;webhook&amp;lt;/code&amp;gt; werden auf dem Shelly die verfügbaren Webhooks automatisiert angelegt (auf der Shelly Oberfläche unter Actions zu sehen). Als Attribut-Wert muss das empfangende FHEMWeb-Device ausgewählt werden. Wird das FHEMWeb-Device mit einem csrf-Token abgesichert, wird der Token in den Webhook eingebunden. Bei Änderungen des Tokens (z.B. bei Neustart von FHEM) werden die entsprechenden Webhooks mit angepasst. &lt;br /&gt;
&lt;br /&gt;
Nach dem Setzen des Attributes müssen die Webhooks mit &amp;lt;code&amp;gt;set myShellyDevice actions create all&amp;lt;/code&amp;gt; angelegt werden.&lt;br /&gt;
&lt;br /&gt;
Die vom Modul angelegten Webhooks erhalten im Shelly einen Namen, beginnend mit einem Unterstrich (&amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;). Wird das Attribut geändert oder gelöscht, dann werden auch zugehörige Actions geändert bzw. gelöscht. Durch Entfernen des Unterstrichs im Namen der Action kann dieser Mechanismus unterbunden werden.&lt;br /&gt;
&lt;br /&gt;
Das Reading &amp;lt;code&amp;gt;webhook_cnt&amp;lt;/code&amp;gt; zeigt die Anzahl aller auf dem Shelly hinterlegten Webhooks und &amp;lt;code&amp;gt;webhooks_ver&amp;lt;/code&amp;gt; den Versionszähler des Shelly.&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht aller Actions/Webhooks eines Shelly bekommt man für Gen2-Geräte mit:  &lt;br /&gt;
:&amp;lt;code&amp;gt;http://&amp;lt;ip-des-Shelly&amp;gt;/rpc/Webhook.List&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MQTT===&lt;br /&gt;
MQTT (Message Queue Telemetry Transport) ist ein nachrichtenbasiertes Protokoll, bei dem Geräte (Devices) nicht direkt miteinander, sondern mit einem zentralen MQTT-Server (in alter Nomenklatur &#039;&#039;Broker&#039;&#039; genannt) kommunizieren. Eine kurze Einführung in MQTT findet man auf der Seite [[MQTT Einführung]]. Mit entsprechend gesetzten Attributen lassen sich die Shelly-Aktoren auch steuern ([[MQTT2-Module - Praxisbeispiele#Shelly|Praxisbeispiele zu den MQTT2-Modulen]]), für Anfänger ist das allerdings nicht unbedingt zu empfehlen.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*{{Link2Forum|Topic=118446|LinkText=Support Thread}} zu diesem Modul&lt;br /&gt;
*{{Link2Forum|Topic=137222|LinkText=Entwicklungs Thread}} zur Weiterentwicklung des Moduls, ab Februar 2024&lt;br /&gt;
*[http://www.shelly.com Website des Herstellers der Geräte]&lt;br /&gt;
*[https://community.shelly.cloud Forum des Herstellers (englischsprachig]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Energieverbrauchsmessung]]&lt;br /&gt;
[[Kategorie:MQTT]]&lt;br /&gt;
[[Kategorie:Bluetooth]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;br /&gt;
[[Kategorie:Shelly]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Harmony&amp;diff=33473</id>
		<title>Harmony</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Harmony&amp;diff=33473"/>
		<updated>2020-07-12T11:53:23Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Geräteebene */ Hinweis auf EInschränkungen bei Harmony Companion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:harmony}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Anbindung Logitech Harmony Hub basierter Fernbedienungen&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=harmony&lt;br /&gt;
|ModForumArea=Multimedia&lt;br /&gt;
|ModTechName=37_harmony.pm&lt;br /&gt;
|ModOwner=Andre ([http://forum.fhem.de/index.php?action=profile;u=430 Forum] / [[Benutzer Diskussion:justme|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das FHEM-[[:Kategorie:Gerätemodul|Gerätemodul]] [[harmony]] bietet die Möglichkeit Logitech Harmony Hub basierte Fernbedienungen an FHEM anzubinden und so von FHEM aus Aktivitäten zu starten und zu stoppen, in FHEM auf das Starten und Stoppen von Aktivitäten über eine der mit dem Hub verbundenen Fernbedienungen zu reagieren oder auf Geräteebene jedes im Hub konfigurierte Gerät über IR, Bluetooth und/oder einen Smart Keyboard USB Dongle zu steuern.&lt;br /&gt;
&lt;br /&gt;
Unterstützt werden zur Zeit die Modelle Ultimate Hub, Ultimate Smart Control, Ultimate, Smart Keyboard sowie alle darauf basierenden Kombinationen mit Smart Control und Smart Keyboard Add-On.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung ==&lt;br /&gt;
Seit Ende 2018 hat Logitech die undokumentierte Schnittstelle die für die Anbindung der Harmony an FHEM verwendet werden geschlossen. Nach viel Protest aus der Community wurde die XMPP-Schnittstelle als &amp;quot;Entwickler-Option&amp;quot; nach akzeptieren von Haftungsausschlüssen wieder zur Verfügung gestellt. Ab Firmware 4.15.250 und Harmony-App-Version 5.6 für iOS und Android ist die Option zur Aktivierung von XMPP direkt in den Einstellungen der Harmony App zu finden. Die Einstellung versteckt sich unter Menü &amp;gt; Harmony-Einrichtung &amp;gt; Geräte und Aktionen hinzufügen und bearbeiten &amp;gt; Fernbedienung und Hub &amp;gt; XMPP aktivieren.&lt;br /&gt;
&lt;br /&gt;
== Define ==&lt;br /&gt;
  define &amp;lt;hub&amp;gt; harmony [&amp;lt;username&amp;gt; &amp;lt;password&amp;gt;] &amp;lt;ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; die myharmony Zugangsdaten und &amp;lt;code&amp;gt;ip&amp;lt;/code&amp;gt; ist die IP-Adresse des Hub im lokalen Netz.&lt;br /&gt;
&lt;br /&gt;
Für die Firmware-Versionen 3.x ist die volle Funktionalität des Moduls auch ohne Angaben von &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; gegeben. Ab Firmware 4.x muss beides angegeben werden. Sonst ist keine Steuerung auf Geräteebene möglich.&lt;br /&gt;
&lt;br /&gt;
==Allgemeines==&lt;br /&gt;
Aktivitäten und Geräte lassen sich an allen Stellen entweder als ID oder als Name angeben. Wenn der Name angegeben wird, müssen hierbei Leerzeichen durch einen Punkt ersetzt werden. Dies kann auch für eventuell andere im Namen vorhandene Sonderzeichen gelten.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten ==&lt;br /&gt;
Das Reading &amp;lt;code&amp;gt;currentActivity&amp;lt;/code&amp;gt; enthält die gerade laufende Aktivität. Beim Wechsel zwischen Aktivitäten erzeugt es Events, auf die in FHEM über &#039;&#039;notify&#039;&#039; reagiert werden kann. Das Reading &amp;lt;code&amp;gt;previousActivity&amp;lt;/code&amp;gt; enthält die davor laufende Aktivität, sofern diese bekannt ist. Dieses Reading erzeugt keine Events.&lt;br /&gt;
&lt;br /&gt;
In den Internals &amp;lt;code&amp;gt;currentActivityID&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;previousActivityID&amp;lt;/code&amp;gt; stehen die dazu gehörenden IDs der Aktivitäten.&lt;br /&gt;
&lt;br /&gt;
Mögliche Aktivitäten anzeigen geht über&lt;br /&gt;
  get &amp;lt;hub&amp;gt; activities&lt;br /&gt;
&lt;br /&gt;
Eine der Aktivitäten via FHEM starten über&lt;br /&gt;
  set &amp;lt;hub&amp;gt; activity &amp;lt;activityname&amp;gt; &lt;br /&gt;
Wobei der Activityname zwingend so geschrieben werden muss wie FHEM ihn im Dropdown anzeigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Innerhalb einer laufenden Aktivität kann mit&lt;br /&gt;
  set &amp;lt;hub&amp;gt; command &amp;lt;command&amp;gt;&lt;br /&gt;
ein IR-Kommando an eines der beteiligten Geräte gesendet werden.&lt;br /&gt;
&lt;br /&gt;
== Geräteebene ==&lt;br /&gt;
Innerhalb und außerhalb einer laufenden Aktivität kann mit&lt;br /&gt;
  set &amp;lt;hub&amp;gt; command &amp;lt;id|name&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
ein IR-Kommando an eines der im Hub bekannten Geräte gesendet werden. Hierbei ist darauf zu achten, dass innerhalb einer Aktivität keine Kommandos verwendet werden sollten, die den Smart-State betreffen.&lt;br /&gt;
&lt;br /&gt;
Die möglichen Kommandos kann man sich über &lt;br /&gt;
  get &amp;lt;hub&amp;gt; deviceCommands&lt;br /&gt;
anzeigen lassen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass wenn in der so erzeugten Liste ein Gerät mit Leerzeichen geschrieben wird, dass man im FHEM Befehl das Leerzeichen durch einen &amp;quot;.&amp;quot; ersetzen muss. Hat man bspw. ein Harmony Device &amp;quot;Samsung TV&amp;quot; ist der Gerätebefehl zum anschalten:&lt;br /&gt;
  set &amp;lt;hub&amp;gt; command Samsung.TV PowerOn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== FHEM Devices auf Geräteebene ===&lt;br /&gt;
Es ist möglich, sich für einzelne oder alle im Hub konfigurierten Geräte ein zugehöriges FHEM-Device anlegen zu lassen:&lt;br /&gt;
  set &amp;lt;hub&amp;gt; autocreate [&amp;lt;id|name&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
Beim Umschalten zwischen Aktivitäten wird in diesen FHEM-Devices im Reading power der in der Aktivität konfigurierten Einschaltzustand (on, off oder manual) angezeigt. Mit einem &#039;&#039;notify&#039;&#039; auf &amp;lt;code&amp;gt;power&amp;lt;/code&amp;gt; Events lässt sich in FHEM auf einzelne Geräte reagieren.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Diese FHEM-Device spiegeln nicht den tatsächlichen Gerätezustand wieder, sondern den innerhalb einer Aktivität beabsichtigen Zustand. Der tatsächliche Zustand kann z.B. auf Grund von Empfangsproblemen abweichen.&lt;br /&gt;
&lt;br /&gt;
Das get &amp;lt;code&amp;gt;commands&amp;lt;/code&amp;gt; sowie die set &amp;lt;code&amp;gt;command&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;hidDevice&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cursor&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;special&amp;lt;/code&amp;gt; Kommandos auf Hub-Ebene stehen hier direkt und ohne Angabe von Device-ID oder Name zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
=== Kommandos an FHEM senden ===&lt;br /&gt;
Da es (zur Zeit) nicht möglich ist, Geräte-Kommandos oder einzelne Tasten direkt vom HUB zu empfangen, muss hierzu ein zusätzlicher Empfänger in FHEM eingebunden werden. Dies kann z.B. mit einem MCE-IR Empfänger oder per Bluetooth geschehen. Ein FHEM-Modul hierzu findet sich im in diesem {{Link2Forum|Topic=36257|LinkText=Forenthread}}.&lt;br /&gt;
&lt;br /&gt;
Mit dem in diesem {{Link2Forum|Topic=51619|LinkText=Forenthread}} vorgestellten Modul ist es möglich einzeln belegte Tasten der Harmony über das Roku External Control Protocol per Netzwerk an FHEM zu senden und dort auszuwerten.&lt;br /&gt;
&lt;br /&gt;
Leider ist es bei der Harmony Companion nicht möglich, die für die Heimautomatisierung vorgesehen Tasten beliebig zu belegen. Hier können nur unterstützte Geräte (Phillips Hue Bridge, LIFX Smart Bulls, Hunter Douglas Powerview Hub, PC - Stand 07/2020) zugeordnet werden. Somit ist fakeRoku hier nicht möglich. Hier kann über die Installation von HAbridge eine Hue Bridge emuliert werden, welche dann mit FHEM verbunden werden kann.&lt;br /&gt;
&lt;br /&gt;
== Smart Keyboard ==&lt;br /&gt;
Der Harmony Hub kann über Bluetooth oder die zum Smart Keyboard gehörenden USB-Dongle mit einem Rechner, Media PC oder sonstigem Gerät, das Tastatureingabe unterstützt, verbunden werden. FHEM kann diese Verbindung nutzen, um beliebige Tastendrücke an ein solches Gerät zu senden. Das können Texte sein, Cursorbewegungen oder die Power-, Multimedia oder sonstigen Funktionstasten, die das Gerät unterstützt.&lt;br /&gt;
&lt;br /&gt;
Alle gesendeten Tastendrücke beziehen sich normalerweise auf das zur gerade laufenden Aktivität gehörende Tastatureingabegerät. Mit dem &amp;lt;code&amp;gt;hidDevice&amp;lt;/code&amp;gt; Kommando lässt sich die Tastatureingabe auf jedes im Hub dafür konfigurierte Gerät umschalten.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Dieses Umschalten kann einige Sekunden dauern, da hierbei die bestehende Bluetooth-Verbindung getrennt und eine neue aufgebaut wird.&lt;br /&gt;
&lt;br /&gt;
Es stehen die Kommandos &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cursor&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;special&amp;lt;/code&amp;gt; zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
Gehe in PLEX auf die Library Musik und spiele das erste Item in der OnDeck Liste:&lt;br /&gt;
  set &amp;lt;hub&amp;gt; text M&lt;br /&gt;
  set &amp;lt;hub&amp;gt; cursor right&lt;br /&gt;
  set &amp;lt;hub&amp;gt; text p&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Vorgeschaltete Funksteckdose ansteuern ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorbereitung Harmony&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nachdem die Geräte mit Strom versorgt werden, benötigen sie einige Sekunden, bis sie ihre Einschaltsignale verarbeiten können. Diese Verzögerung wird durch ein Dummy Gerät in jeder Aktion erzeugt.&lt;br /&gt;
&lt;br /&gt;
1) In MyHarmony einen Amazon Fire TV anlegen und ihm einen passenden Namen geben (z.B. Pause)&lt;br /&gt;
&lt;br /&gt;
2) Unter &amp;quot;Geräte&amp;quot; dieses markieren und per &amp;quot;Ändern der Betriebseinstellungen&amp;quot; die Einstellungen aufrufen&lt;br /&gt;
&lt;br /&gt;
3) Punkt &amp;quot;Ich möchte dieses Gerät eingeschaltet lassen, wenn Aktionen gewechselt werden und nur durch Drücken der Off-Taste ausschalten&amp;quot; auswählen&lt;br /&gt;
&lt;br /&gt;
4) Einen harmlosen Befehl einfügen (&amp;quot;Search&amp;quot;), danach eine Verzögerung von 5000ms einbauen und dann noch einen Befehl (&amp;quot;Search&amp;quot;). Dies bewirkt eine Verzögerung von 5 Sekunden beim Ein- und Ausschalten&lt;br /&gt;
&lt;br /&gt;
5) Unter Aktionen die Aktion auswählen und per &amp;quot;Einstellung ändern&amp;quot; das neue Gerät hinzufügen&lt;br /&gt;
&lt;br /&gt;
6) Per &amp;quot;Diese Aktion anpassen&amp;quot; das neue Gerät an die erste Stelle schieben&lt;br /&gt;
&lt;br /&gt;
7) Schritte 5-7 für alle Aktionen wiederholen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Konfiguration in FHEM&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1) Der Harmony Hub muss existieren&lt;br /&gt;
&lt;br /&gt;
  #Harmony Hub Wohnzimmer definieren&lt;br /&gt;
  define wz_harmonyhub harmony 192.168.123.123&lt;br /&gt;
&lt;br /&gt;
2) Ihr benötigt eine fertig konfigurierte Funksteckdose (hier &amp;quot;wz_Multimedia&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
3) Ihr baut eine Bedingung, die auf den Ein- und Ausschaltvorgang des Harmony Hub (hier wz_harmonyhub) reagiert und die Steckdose (hier wz_Multimedia) schaltet. Es wird eine &#039;&#039;&#039;zusätzliche&#039;&#039;&#039; Pause genutzt von 0 Sekunden bei der ersten Bedingung (wäre kontraproduktiv) und 10 Sekunden bei der zweiten Bedingung (DOELSEIF). Bei der Nutzung eines Beamers lässt sich hierüber die Abkühlzeit einstellen. Im Beispiel bleiben den Geräten somit 15 Sekunden zum Ausschalten und 5 Sekunden um die Empfangsbereitschaft herzustellen. Die erste Bedingung im DOIF ist eine Regex, da &amp;quot;currentActivity&amp;quot; bei mehrfachem Abschalten hintereinander immer wieder von &amp;quot;PowerOff&amp;quot; auf &amp;quot;Stopping PowerOff&amp;quot; wechselt. &lt;br /&gt;
&lt;br /&gt;
  #Auf den Schaltvorgang des Hubs reagieren&lt;br /&gt;
  define wz_Multimedia_Automatik DOIF ([wz_harmonyhub:currentActivity] !~ /PowerOff/) (set wz_Multimedia on) DOELSEIF ([wz_harmonyhub:activity] eq &amp;quot;PowerOff&amp;quot;) (set wz_Multimedia off)&lt;br /&gt;
  attr wz_Multimedia_Automatik wait 0:10&lt;br /&gt;
&lt;br /&gt;
====Weitere Möglichkeiten====&lt;br /&gt;
Statt Fire TV kann jedes andere nicht vorhandene Gerät als Platzhalter in der Harmony verwendet werden. In diesem Gerät kann man auch direkt die Einschaltverzögerung anpassen um die nötige Wartezeit zu erhalten.&lt;br /&gt;
Besser als ein notify oder DOIF auf Activity-Ebene ist es über die Harmony autocreate funktion ein FHEM Device für die platzhalter Steckdose anzulegen und dort dann auf das power Event zu reagieren. Damit ist man unabhängig von allen Änderungen bei den Activities.&lt;br /&gt;
&lt;br /&gt;
===Button für eine bestimmte Activity im Frontend und Homekit über readingsProxy ===&lt;br /&gt;
In FHEMWEB und Homebridge:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
define Fernsehen readingsProxy &amp;lt;hub&amp;gt;:activity&lt;br /&gt;
attr Fernsehen devStateIcon on:control_on_off@green off:control_standby&lt;br /&gt;
attr Fernsehen event-on-change-reading .*&lt;br /&gt;
attr Fernsehen genericDeviceType switch&lt;br /&gt;
attr Fernsehen setFn { return &#039;activity &amp;lt;meine activity&amp;gt;&#039; if( $CMD eq &#039;on&#039; );; return &#039;off&#039;;; }&lt;br /&gt;
attr Fernsehen setList on off&lt;br /&gt;
attr Fernsehen valueFn { return &#039;on&#039; if( $VALUE eq &#039;&amp;lt;meine activity&amp;gt;&#039; );; return &#039;off&#039;;; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich im TableUI:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div data-type=&amp;quot;switch&amp;quot; data-device=&amp;quot;Fernsehen&amp;quot; data-icon=&amp;quot;fa-tv&amp;quot; class=&amp;quot;cell&amp;quot; &amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div data-type=&amp;quot;label&amp;quot; class=&amp;quot;narrow&amp;quot;&amp;gt;FERNSEHEN&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Wenn FHEM den Harmony Hub nicht erreichen kann, blockiert das Modul FHEM für den Timeout von 2 Sekunden im Abstand von nur wenigen Sekunden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[...]&lt;br /&gt;
2015.12.26 18:25:45 1: Perfmon: possible freeze starting at 18:25:43, delay is 2.794&lt;br /&gt;
2015.12.26 18:25:58 1: Perfmon: possible freeze starting at 18:25:56, delay is 2.709&lt;br /&gt;
2015.12.26 18:26:11 1: Perfmon: possible freeze starting at 18:26:09, delay is 2.676&lt;br /&gt;
2015.12.26 18:26:24 1: Perfmon: possible freeze starting at 18:26:22, delay is 2.686&lt;br /&gt;
2015.12.26 18:26:37 1: Perfmon: possible freeze starting at 18:26:35, delay is 2.686&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da dieses Blockieren die Funktionalität von FHEM beeinträchtigen kann, sollte man bei geplanten Auszeiten des Hubs diesen disablen:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;hub&amp;gt; disable 1&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://myharmony.com myHarmony] Logitech Harmony Hersteller&lt;br /&gt;
* [http://www.harmony-remote-forum.de/portal.php Harmony Remote Forum] deutsches Harmony Forum&lt;br /&gt;
* {{Link2Forum|Topic=14163|LinkText=Thread im FHEM Forum}} Weitere Infos im FHEM Forum Thread&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterhaltungselektronik]]&lt;br /&gt;
[[Kategorie:IP Components]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=OWServer_%26_OWDevice&amp;diff=26524</id>
		<title>OWServer &amp; OWDevice</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=OWServer_%26_OWDevice&amp;diff=26524"/>
		<updated>2018-04-30T05:24:17Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Installation einer abweichenden Version von OWNet.pm&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Bei OWServer handelt es sich um eine 1-Wire Server Komponente und bei OWDevice um eine Geräte-Komponente, die die angeschlossenen Module definiert-&lt;br /&gt;
Die Module benötigen die Serverkomponente von [http://www.owfs.org OWFS].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Module sind eine eigenständige Möglichkeit, den 1-Wire Bus anzusteuern und kommen ohne die Module aus, deren Namen aus Großbuchstaben bestehen (wie OWX, OWSWITCH, OWTHERM, etc.). &lt;br /&gt;
Umgekehrt können die Module OWSWITCH, OWTHERM, etc. auch mit dem Backendmodul OWServer zusammenarbeiten, siehe dazu die {{Link2CmdRef}} der betreffenden Module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung==&lt;br /&gt;
&lt;br /&gt;
Wie oben erwähnt, setzt OWServer/OWDevice auf OWFS auf. Dazu ist eine funktionierende OWFS Installation notwendig. Die Installation ist auf der selben Plattform (Debian-based) möglich oder auch Remote (zBsp Dockstar oder RPi). Eine gute [http://owfs.org/index.php?page=standard-devices Liste der Standard Devices]auf der Homepage von OWFS einzusehen. Nicht alle Standard Devices sind in OWDevice verfügbar (siehe unten).Wenn OWFS funktioniert kann&#039;s weiter gehen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===owfs Pakete installieren===&lt;br /&gt;
&lt;br /&gt;
====Erste Variante====&lt;br /&gt;
Die Pakete sind bereits vorpaketiert und man muss nur das [http://owfs.davromaniak.eu/ Repository] noch in /etc/apt/sources.list eintragen&lt;br /&gt;
====Zweite Variante==== &lt;br /&gt;
Man muss selber kompilieren ([http://www.navitron.org.uk/forum/index.php?topic=12604.msg151750#msg151750 Quelle]). Version 3.1p0 von owfs lässt sich derzeit für den Raspberry Pi mit USB-Unterstützung nur kompilieren, wenn man einiges in den Make-Files patcht, wie [https://www.mail-archive.com/owfs-developers@lists.sourceforge.net/msg11484.html hier] beschrieben. Eine ältere, kompilierte Version für den RaspberryPi kann hier heruntergeladen werden: [http://forum.fhem.de/index.php?action=dlattach;topic=12219.0;attach=2463 owfs_2.8p17-1_all.zip]&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt-get install automake autoconf autotools-dev gcc g++ libtool libusb-dev fuse-utils libfuse-dev swig python-dev tcl-dev php5-dev&lt;br /&gt;
sudo apt-get install git git-buildpackage dh-make quilt php5-cli&lt;br /&gt;
git clone [git://git.debian.org/collab-maint/owfs.git git://git.debian.org/collab-maint/owfs.git] git&lt;br /&gt;
git-buildpackage -uc -us&lt;br /&gt;
cd ..&lt;br /&gt;
sudo dpkg -i ./owserver_2.8p7+cvs20110310-1_i386.deb ./libow-2.8-7_2.8p7+cvs20110310-1_i386.deb ./owfs-common_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
sudo dpkg -i ./owhttpd_2.8p7+cvs20110310-1_i386.deb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
diese Pakete wurden alle gebaut:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;libow-2.8-7_2.8p7+cvs20110310-1_i386.deb   owfs-common_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
libowcapi-2.8-7_2.8p7+cvs20110310-1_i386.deb owfs-dbg_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-dev_2.8p7+cvs20110310-1_i386.deb    owfs-doc_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
libownet-2.8-7_2.8p7+cvs20110310-1_i386.deb  owfs-fuse_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-dev_2.8p7+cvs20110310-1_i386.deb   owftpd_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-perl_2.8p7+cvs20110310-1_all.deb   owhttpd_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-php_2.8p7+cvs20110310-1_all.deb   owserver_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-perl_2.8p7+cvs20110310-1_i386.deb    ow-shell_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-php5_2.8p7+cvs20110310-1_i386.deb    python-ow_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-tcl_2.8p7+cvs20110310-1_i386.deb    python-ownet_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
owfs_2.8p7+cvs20110310-1_all.deb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====Dritte Variante====&lt;br /&gt;
*In ältere Versionen von Raspbian (Debian wheezy) sind die notwendigen Pakete für Version 2.8p15 schon in den konfigurierten Quellen vorhanden. &lt;br /&gt;
*In der zukünftigen Version (Debian stretch) sind die Pakete ebenfalls (Version 3.1p1-6) enthalten. Zur Installation reicht jeweils ein&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install owserver ow-shell owhttpd owftpd&lt;br /&gt;
&lt;br /&gt;
*Die aktuellen Version von Raspbian (Debian jessie) enthält die Version 2.9p8-6. Diese hat einen Fehler und funktioniert nicht mit Device DS2408. Hier kann alternativ das oben zum Download angegebene Paket owfs_2.8p17-1_all.zip herunter geladen und nach dem Wechsel in das Verzeichnis mit den entpackten Dateien mit &lt;br /&gt;
 dpkg -i *.deb&lt;br /&gt;
installiert werden.&lt;br /&gt;
&lt;br /&gt;
Diese /etc/owfs.conf wurde mit dem Downgrade erfolgreich getestet:&lt;br /&gt;
&lt;br /&gt;
 ######################## SOURCES ########################&lt;br /&gt;
 # With this setup, any client (but owserver) uses owserver on the&lt;br /&gt;
 # local machine...&lt;br /&gt;
 ! server: server = localhost:4304&lt;br /&gt;
 # ...and owserver uses the real hardware, by default fake devices&lt;br /&gt;
 # This part must be changed on real installation&lt;br /&gt;
 #server: FAKE = DS18S20,DS2405&lt;br /&gt;
 #USB device: DS9490&lt;br /&gt;
 #server: usb = all&lt;br /&gt;
 #&lt;br /&gt;
 #Schnittstelle mit dmesg nach Einstecken ermittelt -&amp;gt; /dev/ttyUSB4&lt;br /&gt;
 # für Fuchs LinkUSB™ bzw. DS2480B/9097U Emulation&lt;br /&gt;
 Serial port: DS9097&lt;br /&gt;
 server: device = /dev/ttyUSB4&lt;br /&gt;
 #&lt;br /&gt;
 # owserver tcp address&lt;br /&gt;
 #server: server = 192.168.10.1:3131&lt;br /&gt;
 # random simulated device&lt;br /&gt;
 #server: FAKE = DS18S20,DS2405&lt;br /&gt;
 ######################### OWFS ##########################&lt;br /&gt;
 #mountpoint = /mnt/1wire&lt;br /&gt;
 #allow_other&lt;br /&gt;
 ####################### OWHTTPD #########################&lt;br /&gt;
 http: port = 2121&lt;br /&gt;
 ####################### OWFTPD ##########################&lt;br /&gt;
 ftp: port = 2120&lt;br /&gt;
 ####################### OWSERVER ########################&lt;br /&gt;
 server: port = localhost:4304&lt;br /&gt;
&lt;br /&gt;
====Vierte Variante====&lt;br /&gt;
*Der in der dritten Variante beschriebene Fehler nach installation aus den offiziellen Quellen kann umgangen werden, indem man /opt/fhem/FHEM/lib/OWNet.pm durch folgende OWNet.pm ersetzt: https://sourceforge.net/p/owfs/code/ci/master/tree/module/ownet/perl5/OWNet/lib/ Dann geht es auch ohne Downgrade (Dank an ak323). Auf der FHEM-Kommandozeile &lt;br /&gt;
 attr global exclude_from_update lib/OWNet.pm&lt;br /&gt;
verhindert das Überschreiben beim FHEM-Update.&lt;br /&gt;
&lt;br /&gt;
====Ermitteln der installierten Version====&lt;br /&gt;
*Bei einer bestehenden Installation oder auch einer direkten Installation nach Variante 3 kann es erforderlich sein, die installierte Version zu prüfen. Dies kann über folgenden Befehl erfolgen:&lt;br /&gt;
 /usr/bin/owhttpd -V&lt;br /&gt;
&lt;br /&gt;
===Unterstütze Geräte===&lt;br /&gt;
Eine aktuelle Liste der von OWDevice unterstützen Geräte findet man in der FHEM-{{Link2CmdRef|Anker=OWDevice}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfiguration von owserver==&lt;br /&gt;
&lt;br /&gt;
Folgendes ist eine beispielhafte Konfiguration für OWFS mit einem am USB-Port angeschlossenen [http://denkovi.com/usb-to-one-wire-interface-adaptor-converter-thermometer Denkovi-Adapter] (Klon von DS9097U).&lt;br /&gt;
&lt;br /&gt;
Es ist praktisch, dem Adapter ein festes Device zuzuordnen. Als erstes ermittelt man dazu den spezifischen Wert ATTRS{serial} mit:&lt;br /&gt;
&lt;br /&gt;
 udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0) | grep ATTRS{serial}&lt;br /&gt;
&lt;br /&gt;
Dananach legt man in /etc/udev/rules.d/ eine Datei 11-onewire.rules mit folgendem Inhalt an:&lt;br /&gt;
&lt;br /&gt;
 ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, ATTRS{serial}==&amp;quot;DAE001nq&amp;quot;, SUBSYSTEMS==&amp;quot;usb&amp;quot;, ACTION==&amp;quot;add&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;, SYMLINK+=&amp;quot;onewire&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem Einstöpseln des USB-Kabels vom Adapter wird über die Seriennummer DAE001nq des USB-Wandlers auf dem Adapter das Gerät erkannt und der Symlink /dev/onewire auf das eigentliche USB-Gerät (z.B. /dev/ttyUSB1) erstellt.&lt;br /&gt;
&lt;br /&gt;
Eine Minimalkonfiguration für /etc/owfs.conf ist&lt;br /&gt;
&lt;br /&gt;
 server: device = /dev/onewire&lt;br /&gt;
 http: port = 2121&lt;br /&gt;
 ftp: port = 2120&lt;br /&gt;
 server: port = 4304&lt;br /&gt;
&lt;br /&gt;
Es ist sinnvoll, owhttpd installiert und laufen zu haben, um über die URL http://deinRaspberryPi:2121 zu sehen, dass owserver läuft und die Geräte am 1-wire-Bus erkennt.&lt;br /&gt;
&lt;br /&gt;
==Konfiguration in FHEM==&lt;br /&gt;
Als erstes definiert man OWServer. Hiermit wird ein logischer OWServer definiert, auf welchem OWFS installiert ist&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;name&amp;amp;gt; OWServer &amp;amp;lt;protocol&amp;amp;gt; &amp;amp;#x5b;&amp;amp;lt;version&amp;amp;gt;&amp;amp;#x5d;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;amp;lt;protocol&amp;amp;gt; hat das Format &amp;amp;lt;hostname&amp;amp;gt;:&amp;amp;lt;port&amp;amp;gt;.&lt;br /&gt;
&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer 192.168.14.100:4304&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
oder wenn sich OWFS auf dem gleichen Server befindet wie FHEM:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer localhost:4304&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;#x5b;&amp;amp;lt;version&amp;amp;gt;&amp;amp;#x5d; ist seit Mitte März 2018 optional anzugeben. Im Standard verbindet sich OWServer mit V 3.1p5 und versucht die Version des OWFS-Servers zu ermitteln. Wenn dies scheitert, kann die Version gezielt angegeben werden. Dazu muss die komplette Versionsnummer angegeben werden. Beispiel:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer 192.168.14.100:4304 2.8p17&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da OWServer die OWNet.pm von Sourceforge verwendet um sich zu verbinden, muss die passende Version der OWNet.pm unter ../FHEM/lib/ vorhanden sein. Per Default wird FHEM mit der V 3.1p5 und 2.8p17 ausgeliefert, andere Versionen müssen manuell hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreichem &amp;quot;define&amp;quot; ist ein Klick auf den &amp;quot;Save&amp;quot; Button notwenig. Wenn nun der Status von myOWServer auf &amp;quot;Initialized&amp;quot; steht, ist der Server verbunden. Um sicher zu sein, dass der OWServer funktioniert, kann eine manuelle Abfrage der Device durchgeführt werden mit:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get myOWServer devices&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Danach werden sämtliche angeschlossene Geräte angezeigt, inkl. Busmaster&lt;br /&gt;
&lt;br /&gt;
===OWServer Set Befehle===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;set &amp;amp;lt;name&amp;amp;gt; &amp;amp;lt;value&amp;amp;gt;&lt;br /&gt;
value:&lt;br /&gt;
timeout/directory&lt;br /&gt;
timeout/ftp&lt;br /&gt;
timeout/ha7&lt;br /&gt;
timeout/network&lt;br /&gt;
timeout/presence&lt;br /&gt;
timeout/serial&lt;br /&gt;
timeout/server&lt;br /&gt;
timeout/stable&lt;br /&gt;
timeout/uncached&lt;br /&gt;
timeout/usb&lt;br /&gt;
timeout/volatile&lt;br /&gt;
timeout/w1&lt;br /&gt;
units/pressure_scale&lt;br /&gt;
units/temperature_scale&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Weitere Informationen zu den Set Befehlen sind im [http://owfs.org/uploads/owserver.1.html#sect41 OWServer Manual] zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
===OWServer Get Befehle===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;name&amp;amp;gt; &amp;amp;lt;value&amp;amp;gt;&lt;br /&gt;
value:&lt;br /&gt;
/settings/timeout/directory&lt;br /&gt;
/settings/timeout/ftp&lt;br /&gt;
/settings/timeout/ha7&lt;br /&gt;
/settings/timeout/network&lt;br /&gt;
/settings/timeout/presence&lt;br /&gt;
/settings/timeout/serial&lt;br /&gt;
/settings/timeout/server&lt;br /&gt;
/settings/timeout/stable&lt;br /&gt;
/settings/timeout/uncached&lt;br /&gt;
/settings/timeout/usb&lt;br /&gt;
/settings/timeout/volatile&lt;br /&gt;
/settings/timeout/w1&lt;br /&gt;
/settings/units/pressure_scale&lt;br /&gt;
/settings/units/temperature_scale&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zusätzlich stehen die FHEM-internen Befehle &amp;quot;errors&amp;quot; und &amp;quot;devices&amp;quot; zur Verfügung.&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;Devicename&amp;amp;gt; errors #listet die Fehler des Device auf&lt;br /&gt;
get &amp;amp;lt;Devicename&amp;amp;gt; devices #scan den Server nach Device&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Angeschlossene Geräte auslesen===&lt;br /&gt;
Grundsätzlich werden die am Busmaster von OWFS angeschlossenen 1-Wire Geräte durch aktives autocreate nach einem Neustart (erfordert shutdown restart) selber in FHEM definiert.&lt;br /&gt;
Der Busmaster (zBsp ein DS9490r) selbst wird ebenfalls eingelesen und angezeigt.&lt;br /&gt;
&lt;br /&gt;
===Definition von Geräten===&lt;br /&gt;
Es ist auch möglich, Geräte manuell anzulegen. Dies erfolgt in folgendem Format:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;name&amp;amp;gt; OWDevice &amp;amp;lt;address&amp;amp;gt; [&amp;amp;lt;interval&amp;amp;gt;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Vorlauftemp OWDevice 28.334F2B040000 60&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wobei der Wert 60 als Abfrageintervall in Sekunden zu verstehen ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWDevice State===&lt;br /&gt;
Bei Temperaturfühler wie DS18S20 wird das Reading &amp;quot;state&amp;quot; wie folgt ausgegeben:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;temperature: 56.1875 alarm: 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Um die Temperatur wie bei anderen Temperatur-Sensoren (zBsp. CUL_WS) anzuzeigen, hilft das Attribut &amp;quot;stateFormat&amp;quot;. Dies kann wie folgt definiert werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr &amp;amp;lt;Devicename&amp;amp;gt; stateFormat T: &amp;amp;lt;wert&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr Boiler stateFormat T: temperature&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
alternativ&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr &amp;amp;lt;Devicename&amp;amp;gt; stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal(&amp;quot;&amp;amp;lt;Devicename&amp;amp;gt;&amp;quot;,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C&amp;quot;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zusätzlich rundet das obenstehende Attribut mit &amp;quot;%.1f&amp;quot; die Temperatur auf eine Kommastelle.&lt;br /&gt;
&lt;br /&gt;
==Tipps und Tricks==&lt;br /&gt;
1-wire-Geräte sind häufig generische Geräte, wie Zähler und Spannungsmesser (A/D-Wandler), an denen Sensorik hängt. Die rohen Werte vom 1-wire-Gerät (Zählimpulse, Spannungen) sind dann noch in menschenlesbare Werte zu verwandeln. Hier helfen userReadings, z.B.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr myEnergyMeter userReadings energy { (ReadingsVal(&amp;quot;myEnergyMeter&amp;quot;,&amp;quot;count.A&amp;quot;,0)+AttrVal(&amp;quot;myEnergyMeter&amp;quot;,&amp;quot;myBasis&amp;quot;,0))/1250.0;; }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
[[Stromzähler_und_1-Wire,_OWServer,_OWDevice|Hier]] findet man ein Beispiel einer Anbindung zweier Leistungsmesser (aka Stromzähler) mit S0 Ausgang über einen 1-wire-S0-Zähler an FHEM.&lt;br /&gt;
&lt;br /&gt;
==Installation einer abweichenden Version von  OWNet.pm==&lt;br /&gt;
Die benötigte Datei befindet sich im jeweiligen Paket auf [https://sourceforge.net/projects/owfs/files/owfs/ Sourceforge]. Nach dem Entpacken ist im Ordner ../module/ownet/perl5/OWNet/lib die Datei OWNet.pm. Diese Datei ist nach OWNet-Version.pm umzubenennen und in den FHEM-Ordner ../FHEM/lib/ zu kopieren. Abschließend müssen ggf. die Dateirechte angepasst werden.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== FHEM hängt, wenn OWServer nicht erreichbar ist ===&lt;br /&gt;
Am Anfang gab es mit OWServer das Problem, dass FHEM immer komplett hing, wenn OWServer nicht erreichbar war (siehe z.&amp;amp;nbsp;B. [http://www.fischer-net.de/hausautomation/haustechnik/1-wire/60-1-wire-integration-in-fhem.html hier am Ende]). Das Problem wurde inzwischen dankenswerterweise für den laufenden Betrieb {{Link2Forum|Topic=16945|LinkText=behoben}} - &amp;lt;code&amp;gt;attr myOWServer nonblocking 1&amp;lt;/code&amp;gt; muss dazu gesetzt werden -, aber zumindest beim Start hängt FHEM nach wie vor, wenn OWServer nicht erreichbar ist.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=OWServer_%26_OWDevice&amp;diff=26523</id>
		<title>OWServer &amp; OWDevice</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=OWServer_%26_OWDevice&amp;diff=26523"/>
		<updated>2018-04-30T05:10:31Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: optionale Angabe von Version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Bei OWServer handelt es sich um eine 1-Wire Server Komponente und bei OWDevice um eine Geräte-Komponente, die die angeschlossenen Module definiert-&lt;br /&gt;
Die Module benötigen die Serverkomponente von [http://www.owfs.org OWFS].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Module sind eine eigenständige Möglichkeit, den 1-Wire Bus anzusteuern und kommen ohne die Module aus, deren Namen aus Großbuchstaben bestehen (wie OWX, OWSWITCH, OWTHERM, etc.). &lt;br /&gt;
Umgekehrt können die Module OWSWITCH, OWTHERM, etc. auch mit dem Backendmodul OWServer zusammenarbeiten, siehe dazu die {{Link2CmdRef}} der betreffenden Module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung==&lt;br /&gt;
&lt;br /&gt;
Wie oben erwähnt, setzt OWServer/OWDevice auf OWFS auf. Dazu ist eine funktionierende OWFS Installation notwendig. Die Installation ist auf der selben Plattform (Debian-based) möglich oder auch Remote (zBsp Dockstar oder RPi). Eine gute [http://owfs.org/index.php?page=standard-devices Liste der Standard Devices]auf der Homepage von OWFS einzusehen. Nicht alle Standard Devices sind in OWDevice verfügbar (siehe unten).Wenn OWFS funktioniert kann&#039;s weiter gehen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===owfs Pakete installieren===&lt;br /&gt;
&lt;br /&gt;
====Erste Variante====&lt;br /&gt;
Die Pakete sind bereits vorpaketiert und man muss nur das [http://owfs.davromaniak.eu/ Repository] noch in /etc/apt/sources.list eintragen&lt;br /&gt;
====Zweite Variante==== &lt;br /&gt;
Man muss selber kompilieren ([http://www.navitron.org.uk/forum/index.php?topic=12604.msg151750#msg151750 Quelle]). Version 3.1p0 von owfs lässt sich derzeit für den Raspberry Pi mit USB-Unterstützung nur kompilieren, wenn man einiges in den Make-Files patcht, wie [https://www.mail-archive.com/owfs-developers@lists.sourceforge.net/msg11484.html hier] beschrieben. Eine ältere, kompilierte Version für den RaspberryPi kann hier heruntergeladen werden: [http://forum.fhem.de/index.php?action=dlattach;topic=12219.0;attach=2463 owfs_2.8p17-1_all.zip]&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt-get install automake autoconf autotools-dev gcc g++ libtool libusb-dev fuse-utils libfuse-dev swig python-dev tcl-dev php5-dev&lt;br /&gt;
sudo apt-get install git git-buildpackage dh-make quilt php5-cli&lt;br /&gt;
git clone [git://git.debian.org/collab-maint/owfs.git git://git.debian.org/collab-maint/owfs.git] git&lt;br /&gt;
git-buildpackage -uc -us&lt;br /&gt;
cd ..&lt;br /&gt;
sudo dpkg -i ./owserver_2.8p7+cvs20110310-1_i386.deb ./libow-2.8-7_2.8p7+cvs20110310-1_i386.deb ./owfs-common_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
sudo dpkg -i ./owhttpd_2.8p7+cvs20110310-1_i386.deb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
diese Pakete wurden alle gebaut:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;libow-2.8-7_2.8p7+cvs20110310-1_i386.deb   owfs-common_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
libowcapi-2.8-7_2.8p7+cvs20110310-1_i386.deb owfs-dbg_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-dev_2.8p7+cvs20110310-1_i386.deb    owfs-doc_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
libownet-2.8-7_2.8p7+cvs20110310-1_i386.deb  owfs-fuse_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-dev_2.8p7+cvs20110310-1_i386.deb   owftpd_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-perl_2.8p7+cvs20110310-1_all.deb   owhttpd_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-php_2.8p7+cvs20110310-1_all.deb   owserver_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-perl_2.8p7+cvs20110310-1_i386.deb    ow-shell_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-php5_2.8p7+cvs20110310-1_i386.deb    python-ow_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-tcl_2.8p7+cvs20110310-1_i386.deb    python-ownet_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
owfs_2.8p7+cvs20110310-1_all.deb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====Dritte Variante====&lt;br /&gt;
*In ältere Versionen von Raspbian (Debian wheezy) sind die notwendigen Pakete für Version 2.8p15 schon in den konfigurierten Quellen vorhanden. &lt;br /&gt;
*In der zukünftigen Version (Debian stretch) sind die Pakete ebenfalls (Version 3.1p1-6) enthalten. Zur Installation reicht jeweils ein&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install owserver ow-shell owhttpd owftpd&lt;br /&gt;
&lt;br /&gt;
*Die aktuellen Version von Raspbian (Debian jessie) enthält die Version 2.9p8-6. Diese hat einen Fehler und funktioniert nicht mit Device DS2408. Hier kann alternativ das oben zum Download angegebene Paket owfs_2.8p17-1_all.zip herunter geladen und nach dem Wechsel in das Verzeichnis mit den entpackten Dateien mit &lt;br /&gt;
 dpkg -i *.deb&lt;br /&gt;
installiert werden.&lt;br /&gt;
&lt;br /&gt;
Diese /etc/owfs.conf wurde mit dem Downgrade erfolgreich getestet:&lt;br /&gt;
&lt;br /&gt;
 ######################## SOURCES ########################&lt;br /&gt;
 # With this setup, any client (but owserver) uses owserver on the&lt;br /&gt;
 # local machine...&lt;br /&gt;
 ! server: server = localhost:4304&lt;br /&gt;
 # ...and owserver uses the real hardware, by default fake devices&lt;br /&gt;
 # This part must be changed on real installation&lt;br /&gt;
 #server: FAKE = DS18S20,DS2405&lt;br /&gt;
 #USB device: DS9490&lt;br /&gt;
 #server: usb = all&lt;br /&gt;
 #&lt;br /&gt;
 #Schnittstelle mit dmesg nach Einstecken ermittelt -&amp;gt; /dev/ttyUSB4&lt;br /&gt;
 # für Fuchs LinkUSB™ bzw. DS2480B/9097U Emulation&lt;br /&gt;
 Serial port: DS9097&lt;br /&gt;
 server: device = /dev/ttyUSB4&lt;br /&gt;
 #&lt;br /&gt;
 # owserver tcp address&lt;br /&gt;
 #server: server = 192.168.10.1:3131&lt;br /&gt;
 # random simulated device&lt;br /&gt;
 #server: FAKE = DS18S20,DS2405&lt;br /&gt;
 ######################### OWFS ##########################&lt;br /&gt;
 #mountpoint = /mnt/1wire&lt;br /&gt;
 #allow_other&lt;br /&gt;
 ####################### OWHTTPD #########################&lt;br /&gt;
 http: port = 2121&lt;br /&gt;
 ####################### OWFTPD ##########################&lt;br /&gt;
 ftp: port = 2120&lt;br /&gt;
 ####################### OWSERVER ########################&lt;br /&gt;
 server: port = localhost:4304&lt;br /&gt;
&lt;br /&gt;
====Vierte Variante====&lt;br /&gt;
*Der in der dritten Variante beschriebene Fehler nach installation aus den offiziellen Quellen kann umgangen werden, indem man /opt/fhem/FHEM/lib/OWNet.pm durch folgende OWNet.pm ersetzt: https://sourceforge.net/p/owfs/code/ci/master/tree/module/ownet/perl5/OWNet/lib/ Dann geht es auch ohne Downgrade (Dank an ak323). Auf der FHEM-Kommandozeile &lt;br /&gt;
 attr global exclude_from_update lib/OWNet.pm&lt;br /&gt;
verhindert das Überschreiben beim FHEM-Update.&lt;br /&gt;
&lt;br /&gt;
====Ermitteln der installierten Version====&lt;br /&gt;
*Bei einer bestehenden Installation oder auch einer direkten Installation nach Variante 3 kann es erforderlich sein, die installierte Version zu prüfen. Dies kann über folgenden Befehl erfolgen:&lt;br /&gt;
 /usr/bin/owhttpd -V&lt;br /&gt;
&lt;br /&gt;
===Unterstütze Geräte===&lt;br /&gt;
Eine aktuelle Liste der von OWDevice unterstützen Geräte findet man in der FHEM-{{Link2CmdRef|Anker=OWDevice}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfiguration von owserver==&lt;br /&gt;
&lt;br /&gt;
Folgendes ist eine beispielhafte Konfiguration für OWFS mit einem am USB-Port angeschlossenen [http://denkovi.com/usb-to-one-wire-interface-adaptor-converter-thermometer Denkovi-Adapter] (Klon von DS9097U).&lt;br /&gt;
&lt;br /&gt;
Es ist praktisch, dem Adapter ein festes Device zuzuordnen. Als erstes ermittelt man dazu den spezifischen Wert ATTRS{serial} mit:&lt;br /&gt;
&lt;br /&gt;
 udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0) | grep ATTRS{serial}&lt;br /&gt;
&lt;br /&gt;
Dananach legt man in /etc/udev/rules.d/ eine Datei 11-onewire.rules mit folgendem Inhalt an:&lt;br /&gt;
&lt;br /&gt;
 ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, ATTRS{serial}==&amp;quot;DAE001nq&amp;quot;, SUBSYSTEMS==&amp;quot;usb&amp;quot;, ACTION==&amp;quot;add&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;, SYMLINK+=&amp;quot;onewire&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem Einstöpseln des USB-Kabels vom Adapter wird über die Seriennummer DAE001nq des USB-Wandlers auf dem Adapter das Gerät erkannt und der Symlink /dev/onewire auf das eigentliche USB-Gerät (z.B. /dev/ttyUSB1) erstellt.&lt;br /&gt;
&lt;br /&gt;
Eine Minimalkonfiguration für /etc/owfs.conf ist&lt;br /&gt;
&lt;br /&gt;
 server: device = /dev/onewire&lt;br /&gt;
 http: port = 2121&lt;br /&gt;
 ftp: port = 2120&lt;br /&gt;
 server: port = 4304&lt;br /&gt;
&lt;br /&gt;
Es ist sinnvoll, owhttpd installiert und laufen zu haben, um über die URL http://deinRaspberryPi:2121 zu sehen, dass owserver läuft und die Geräte am 1-wire-Bus erkennt.&lt;br /&gt;
&lt;br /&gt;
==Konfiguration in FHEM==&lt;br /&gt;
Als erstes definiert man OWServer. Hiermit wird ein logischer OWServer definiert, auf welchem OWFS installiert ist&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;name&amp;amp;gt; OWServer &amp;amp;lt;protocol&amp;amp;gt; &amp;amp;#x5b;&amp;amp;lt;version&amp;amp;gt;&amp;amp;#x5d;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;amp;lt;protocol&amp;amp;gt; hat das Format &amp;amp;lt;hostname&amp;amp;gt;:&amp;amp;lt;port&amp;amp;gt;.&lt;br /&gt;
&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer 192.168.14.100:4304&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
oder wenn sich OWFS auf dem gleichen Server befindet wie FHEM:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer localhost:4304&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;#x5b;&amp;amp;lt;version&amp;amp;gt;&amp;amp;#x5d; ist seit Mitte März 2018 optional anzugeben. Im Standard verbindet sich OWServer mit V 3.1p5 und versucht die Version des OWFS-Servers zu ermitteln. Wenn dies scheitert, kann die Version gezielt angegeben werden. Dazu muss die komplette Versionsnummer angegeben werden. Beispiel:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer 192.168.14.100:4304 2.8p17&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da OWServer die OWNet.pm von Sourceforge verwendet um sich zu verbinden, muss die passende Version der OWNet.pm unter ../FHEM/lib/ vorhanden sein. Per Default wird FHEM mit der V 3.1p5 und 2.8p17 ausgeliefert, andere Versionen müssen manuell hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreichem &amp;quot;define&amp;quot; ist ein Klick auf den &amp;quot;Save&amp;quot; Button notwenig. Wenn nun der Status von myOWServer auf &amp;quot;Initialized&amp;quot; steht, ist der Server verbunden. Um sicher zu sein, dass der OWServer funktioniert, kann eine manuelle Abfrage der Device durchgeführt werden mit:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get myOWServer devices&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Danach werden sämtliche angeschlossene Geräte angezeigt, inkl. Busmaster&lt;br /&gt;
&lt;br /&gt;
===OWServer Set Befehle===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;set &amp;amp;lt;name&amp;amp;gt; &amp;amp;lt;value&amp;amp;gt;&lt;br /&gt;
value:&lt;br /&gt;
timeout/directory&lt;br /&gt;
timeout/ftp&lt;br /&gt;
timeout/ha7&lt;br /&gt;
timeout/network&lt;br /&gt;
timeout/presence&lt;br /&gt;
timeout/serial&lt;br /&gt;
timeout/server&lt;br /&gt;
timeout/stable&lt;br /&gt;
timeout/uncached&lt;br /&gt;
timeout/usb&lt;br /&gt;
timeout/volatile&lt;br /&gt;
timeout/w1&lt;br /&gt;
units/pressure_scale&lt;br /&gt;
units/temperature_scale&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Weitere Informationen zu den Set Befehlen sind im [http://owfs.org/uploads/owserver.1.html#sect41 OWServer Manual] zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
===OWServer Get Befehle===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;name&amp;amp;gt; &amp;amp;lt;value&amp;amp;gt;&lt;br /&gt;
value:&lt;br /&gt;
/settings/timeout/directory&lt;br /&gt;
/settings/timeout/ftp&lt;br /&gt;
/settings/timeout/ha7&lt;br /&gt;
/settings/timeout/network&lt;br /&gt;
/settings/timeout/presence&lt;br /&gt;
/settings/timeout/serial&lt;br /&gt;
/settings/timeout/server&lt;br /&gt;
/settings/timeout/stable&lt;br /&gt;
/settings/timeout/uncached&lt;br /&gt;
/settings/timeout/usb&lt;br /&gt;
/settings/timeout/volatile&lt;br /&gt;
/settings/timeout/w1&lt;br /&gt;
/settings/units/pressure_scale&lt;br /&gt;
/settings/units/temperature_scale&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zusätzlich stehen die FHEM-internen Befehle &amp;quot;errors&amp;quot; und &amp;quot;devices&amp;quot; zur Verfügung.&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;Devicename&amp;amp;gt; errors #listet die Fehler des Device auf&lt;br /&gt;
get &amp;amp;lt;Devicename&amp;amp;gt; devices #scan den Server nach Device&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Angeschlossene Geräte auslesen===&lt;br /&gt;
Grundsätzlich werden die am Busmaster von OWFS angeschlossenen 1-Wire Geräte durch aktives autocreate nach einem Neustart (erfordert shutdown restart) selber in FHEM definiert.&lt;br /&gt;
Der Busmaster (zBsp ein DS9490r) selbst wird ebenfalls eingelesen und angezeigt.&lt;br /&gt;
&lt;br /&gt;
===Definition von Geräten===&lt;br /&gt;
Es ist auch möglich, Geräte manuell anzulegen. Dies erfolgt in folgendem Format:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;name&amp;amp;gt; OWDevice &amp;amp;lt;address&amp;amp;gt; [&amp;amp;lt;interval&amp;amp;gt;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Vorlauftemp OWDevice 28.334F2B040000 60&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wobei der Wert 60 als Abfrageintervall in Sekunden zu verstehen ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWDevice State===&lt;br /&gt;
Bei Temperaturfühler wie DS18S20 wird das Reading &amp;quot;state&amp;quot; wie folgt ausgegeben:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;temperature: 56.1875 alarm: 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Um die Temperatur wie bei anderen Temperatur-Sensoren (zBsp. CUL_WS) anzuzeigen, hilft das Attribut &amp;quot;stateFormat&amp;quot;. Dies kann wie folgt definiert werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr &amp;amp;lt;Devicename&amp;amp;gt; stateFormat T: &amp;amp;lt;wert&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr Boiler stateFormat T: temperature&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
alternativ&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr &amp;amp;lt;Devicename&amp;amp;gt; stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal(&amp;quot;&amp;amp;lt;Devicename&amp;amp;gt;&amp;quot;,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C&amp;quot;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zusätzlich rundet das obenstehende Attribut mit &amp;quot;%.1f&amp;quot; die Temperatur auf eine Kommastelle.&lt;br /&gt;
&lt;br /&gt;
==Tipps und Tricks==&lt;br /&gt;
1-wire-Geräte sind häufig generische Geräte, wie Zähler und Spannungsmesser (A/D-Wandler), an denen Sensorik hängt. Die rohen Werte vom 1-wire-Gerät (Zählimpulse, Spannungen) sind dann noch in menschenlesbare Werte zu verwandeln. Hier helfen userReadings, z.B.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr myEnergyMeter userReadings energy { (ReadingsVal(&amp;quot;myEnergyMeter&amp;quot;,&amp;quot;count.A&amp;quot;,0)+AttrVal(&amp;quot;myEnergyMeter&amp;quot;,&amp;quot;myBasis&amp;quot;,0))/1250.0;; }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
[[Stromzähler_und_1-Wire,_OWServer,_OWDevice|Hier]] findet man ein Beispiel einer Anbindung zweier Leistungsmesser (aka Stromzähler) mit S0 Ausgang über einen 1-wire-S0-Zähler an FHEM. &lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== FHEM hängt, wenn OWServer nicht erreichbar ist ===&lt;br /&gt;
Am Anfang gab es mit OWServer das Problem, dass FHEM immer komplett hing, wenn OWServer nicht erreichbar war (siehe z.&amp;amp;nbsp;B. [http://www.fischer-net.de/hausautomation/haustechnik/1-wire/60-1-wire-integration-in-fhem.html hier am Ende]). Das Problem wurde inzwischen dankenswerterweise für den laufenden Betrieb {{Link2Forum|Topic=16945|LinkText=behoben}} - &amp;lt;code&amp;gt;attr myOWServer nonblocking 1&amp;lt;/code&amp;gt; muss dazu gesetzt werden -, aber zumindest beim Start hängt FHEM nach wie vor, wenn OWServer nicht erreichbar ist.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=OWServer_%26_OWDevice&amp;diff=26522</id>
		<title>OWServer &amp; OWDevice</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=OWServer_%26_OWDevice&amp;diff=26522"/>
		<updated>2018-04-30T04:44:50Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Vierte Variante */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Bei OWServer handelt es sich um eine 1-Wire Server Komponente und bei OWDevice um eine Geräte-Komponente, die die angeschlossenen Module definiert-&lt;br /&gt;
Die Module benötigen die Serverkomponente von [http://www.owfs.org OWFS].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Module sind eine eigenständige Möglichkeit, den 1-Wire Bus anzusteuern und kommen ohne die Module aus, deren Namen aus Großbuchstaben bestehen (wie OWX, OWSWITCH, OWTHERM, etc.). &lt;br /&gt;
Umgekehrt können die Module OWSWITCH, OWTHERM, etc. auch mit dem Backendmodul OWServer zusammenarbeiten, siehe dazu die {{Link2CmdRef}} der betreffenden Module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung==&lt;br /&gt;
&lt;br /&gt;
Wie oben erwähnt, setzt OWServer/OWDevice auf OWFS auf. Dazu ist eine funktionierende OWFS Installation notwendig. Die Installation ist auf der selben Plattform (Debian-based) möglich oder auch Remote (zBsp Dockstar oder RPi). Eine gute [http://owfs.org/index.php?page=standard-devices Liste der Standard Devices]auf der Homepage von OWFS einzusehen. Nicht alle Standard Devices sind in OWDevice verfügbar (siehe unten).Wenn OWFS funktioniert kann&#039;s weiter gehen...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===owfs Pakete installieren===&lt;br /&gt;
&lt;br /&gt;
====Erste Variante====&lt;br /&gt;
Die Pakete sind bereits vorpaketiert und man muss nur das [http://owfs.davromaniak.eu/ Repository] noch in /etc/apt/sources.list eintragen&lt;br /&gt;
====Zweite Variante==== &lt;br /&gt;
Man muss selber kompilieren ([http://www.navitron.org.uk/forum/index.php?topic=12604.msg151750#msg151750 Quelle]). Version 3.1p0 von owfs lässt sich derzeit für den Raspberry Pi mit USB-Unterstützung nur kompilieren, wenn man einiges in den Make-Files patcht, wie [https://www.mail-archive.com/owfs-developers@lists.sourceforge.net/msg11484.html hier] beschrieben. Eine ältere, kompilierte Version für den RaspberryPi kann hier heruntergeladen werden: [http://forum.fhem.de/index.php?action=dlattach;topic=12219.0;attach=2463 owfs_2.8p17-1_all.zip]&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt-get install automake autoconf autotools-dev gcc g++ libtool libusb-dev fuse-utils libfuse-dev swig python-dev tcl-dev php5-dev&lt;br /&gt;
sudo apt-get install git git-buildpackage dh-make quilt php5-cli&lt;br /&gt;
git clone [git://git.debian.org/collab-maint/owfs.git git://git.debian.org/collab-maint/owfs.git] git&lt;br /&gt;
git-buildpackage -uc -us&lt;br /&gt;
cd ..&lt;br /&gt;
sudo dpkg -i ./owserver_2.8p7+cvs20110310-1_i386.deb ./libow-2.8-7_2.8p7+cvs20110310-1_i386.deb ./owfs-common_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
sudo dpkg -i ./owhttpd_2.8p7+cvs20110310-1_i386.deb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
diese Pakete wurden alle gebaut:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;libow-2.8-7_2.8p7+cvs20110310-1_i386.deb   owfs-common_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
libowcapi-2.8-7_2.8p7+cvs20110310-1_i386.deb owfs-dbg_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-dev_2.8p7+cvs20110310-1_i386.deb    owfs-doc_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
libownet-2.8-7_2.8p7+cvs20110310-1_i386.deb  owfs-fuse_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-dev_2.8p7+cvs20110310-1_i386.deb   owftpd_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-perl_2.8p7+cvs20110310-1_all.deb   owhttpd_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libownet-php_2.8p7+cvs20110310-1_all.deb   owserver_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-perl_2.8p7+cvs20110310-1_i386.deb    ow-shell_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-php5_2.8p7+cvs20110310-1_i386.deb    python-ow_2.8p7+cvs20110310-1_i386.deb&lt;br /&gt;
libow-tcl_2.8p7+cvs20110310-1_i386.deb    python-ownet_2.8p7+cvs20110310-1_all.deb&lt;br /&gt;
owfs_2.8p7+cvs20110310-1_all.deb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====Dritte Variante====&lt;br /&gt;
*In ältere Versionen von Raspbian (Debian wheezy) sind die notwendigen Pakete für Version 2.8p15 schon in den konfigurierten Quellen vorhanden. &lt;br /&gt;
*In der zukünftigen Version (Debian stretch) sind die Pakete ebenfalls (Version 3.1p1-6) enthalten. Zur Installation reicht jeweils ein&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install owserver ow-shell owhttpd owftpd&lt;br /&gt;
&lt;br /&gt;
*Die aktuellen Version von Raspbian (Debian jessie) enthält die Version 2.9p8-6. Diese hat einen Fehler und funktioniert nicht mit Device DS2408. Hier kann alternativ das oben zum Download angegebene Paket owfs_2.8p17-1_all.zip herunter geladen und nach dem Wechsel in das Verzeichnis mit den entpackten Dateien mit &lt;br /&gt;
 dpkg -i *.deb&lt;br /&gt;
installiert werden.&lt;br /&gt;
&lt;br /&gt;
Diese /etc/owfs.conf wurde mit dem Downgrade erfolgreich getestet:&lt;br /&gt;
&lt;br /&gt;
 ######################## SOURCES ########################&lt;br /&gt;
 # With this setup, any client (but owserver) uses owserver on the&lt;br /&gt;
 # local machine...&lt;br /&gt;
 ! server: server = localhost:4304&lt;br /&gt;
 # ...and owserver uses the real hardware, by default fake devices&lt;br /&gt;
 # This part must be changed on real installation&lt;br /&gt;
 #server: FAKE = DS18S20,DS2405&lt;br /&gt;
 #USB device: DS9490&lt;br /&gt;
 #server: usb = all&lt;br /&gt;
 #&lt;br /&gt;
 #Schnittstelle mit dmesg nach Einstecken ermittelt -&amp;gt; /dev/ttyUSB4&lt;br /&gt;
 # für Fuchs LinkUSB™ bzw. DS2480B/9097U Emulation&lt;br /&gt;
 Serial port: DS9097&lt;br /&gt;
 server: device = /dev/ttyUSB4&lt;br /&gt;
 #&lt;br /&gt;
 # owserver tcp address&lt;br /&gt;
 #server: server = 192.168.10.1:3131&lt;br /&gt;
 # random simulated device&lt;br /&gt;
 #server: FAKE = DS18S20,DS2405&lt;br /&gt;
 ######################### OWFS ##########################&lt;br /&gt;
 #mountpoint = /mnt/1wire&lt;br /&gt;
 #allow_other&lt;br /&gt;
 ####################### OWHTTPD #########################&lt;br /&gt;
 http: port = 2121&lt;br /&gt;
 ####################### OWFTPD ##########################&lt;br /&gt;
 ftp: port = 2120&lt;br /&gt;
 ####################### OWSERVER ########################&lt;br /&gt;
 server: port = localhost:4304&lt;br /&gt;
&lt;br /&gt;
====Vierte Variante====&lt;br /&gt;
*Der in der dritten Variante beschriebene Fehler nach installation aus den offiziellen Quellen kann umgangen werden, indem man /opt/fhem/FHEM/lib/OWNet.pm durch folgende OWNet.pm ersetzt: https://sourceforge.net/p/owfs/code/ci/master/tree/module/ownet/perl5/OWNet/lib/ Dann geht es auch ohne Downgrade (Dank an ak323). Auf der FHEM-Kommandozeile &lt;br /&gt;
 attr global exclude_from_update lib/OWNet.pm&lt;br /&gt;
verhindert das Überschreiben beim FHEM-Update.&lt;br /&gt;
&lt;br /&gt;
====Ermitteln der installierten Version====&lt;br /&gt;
*Bei einer bestehenden Installation oder auch einer direkten Installation nach Variante 3 kann es erforderlich sein, die installierte Version zu prüfen. Dies kann über folgenden Befehl erfolgen:&lt;br /&gt;
 /usr/bin/owhttpd -V&lt;br /&gt;
&lt;br /&gt;
===Unterstütze Geräte===&lt;br /&gt;
Eine aktuelle Liste der von OWDevice unterstützen Geräte findet man in der FHEM-{{Link2CmdRef|Anker=OWDevice}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfiguration von owserver==&lt;br /&gt;
&lt;br /&gt;
Folgendes ist eine beispielhafte Konfiguration für OWFS mit einem am USB-Port angeschlossenen [http://denkovi.com/usb-to-one-wire-interface-adaptor-converter-thermometer Denkovi-Adapter] (Klon von DS9097U).&lt;br /&gt;
&lt;br /&gt;
Es ist praktisch, dem Adapter ein festes Device zuzuordnen. Als erstes ermittelt man dazu den spezifischen Wert ATTRS{serial} mit:&lt;br /&gt;
&lt;br /&gt;
 udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0) | grep ATTRS{serial}&lt;br /&gt;
&lt;br /&gt;
Dananach legt man in /etc/udev/rules.d/ eine Datei 11-onewire.rules mit folgendem Inhalt an:&lt;br /&gt;
&lt;br /&gt;
 ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, ATTRS{serial}==&amp;quot;DAE001nq&amp;quot;, SUBSYSTEMS==&amp;quot;usb&amp;quot;, ACTION==&amp;quot;add&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;, SYMLINK+=&amp;quot;onewire&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem Einstöpseln des USB-Kabels vom Adapter wird über die Seriennummer DAE001nq des USB-Wandlers auf dem Adapter das Gerät erkannt und der Symlink /dev/onewire auf das eigentliche USB-Gerät (z.B. /dev/ttyUSB1) erstellt.&lt;br /&gt;
&lt;br /&gt;
Eine Minimalkonfiguration für /etc/owfs.conf ist&lt;br /&gt;
&lt;br /&gt;
 server: device = /dev/onewire&lt;br /&gt;
 http: port = 2121&lt;br /&gt;
 ftp: port = 2120&lt;br /&gt;
 server: port = 4304&lt;br /&gt;
&lt;br /&gt;
Es ist sinnvoll, owhttpd installiert und laufen zu haben, um über die URL http://deinRaspberryPi:2121 zu sehen, dass owserver läuft und die Geräte am 1-wire-Bus erkennt.&lt;br /&gt;
&lt;br /&gt;
==Konfiguration in FHEM==&lt;br /&gt;
Als erstes definiert man OWServer. Hiermit wird ein logischer OWServer definiert, auf welchem OWFS installiert ist&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;name&amp;amp;gt; OWServer &amp;amp;lt;protocol&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;amp;lt;protocol&amp;amp;gt; hat das Format &amp;amp;lt;hostname&amp;amp;gt;:&amp;amp;lt;port&amp;amp;gt;.&lt;br /&gt;
&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer 192.168.14.100:4304&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
oder wenn sich OWFS auf dem gleichen Server befindet wie FHEM:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define myOWServer OWServer localhost:4304&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nach erfolgreichem &amp;quot;define&amp;quot; ist ein Klick auf den &amp;quot;Save&amp;quot; Button notwenig. Wenn nun der Status von myOWServer auf &amp;quot;Initialized&amp;quot; steht, ist der Server verbunden. Um sicher zu sein, dass der OWServer funktioniert, kann eine manuelle Abfrage der Device durchgeführt werden mit:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get myOWServer devices&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Danach werden sämtliche angeschlossene Geräte angezeigt, inkl. Busmaster&lt;br /&gt;
&lt;br /&gt;
===OWServer Set Befehle===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;set &amp;amp;lt;name&amp;amp;gt; &amp;amp;lt;value&amp;amp;gt;&lt;br /&gt;
value:&lt;br /&gt;
timeout/directory&lt;br /&gt;
timeout/ftp&lt;br /&gt;
timeout/ha7&lt;br /&gt;
timeout/network&lt;br /&gt;
timeout/presence&lt;br /&gt;
timeout/serial&lt;br /&gt;
timeout/server&lt;br /&gt;
timeout/stable&lt;br /&gt;
timeout/uncached&lt;br /&gt;
timeout/usb&lt;br /&gt;
timeout/volatile&lt;br /&gt;
timeout/w1&lt;br /&gt;
units/pressure_scale&lt;br /&gt;
units/temperature_scale&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Weitere Informationen zu den Set Befehlen sind im [http://owfs.org/uploads/owserver.1.html#sect41 OWServer Manual] zu entnehmen.&lt;br /&gt;
&lt;br /&gt;
===OWServer Get Befehle===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;name&amp;amp;gt; &amp;amp;lt;value&amp;amp;gt;&lt;br /&gt;
value:&lt;br /&gt;
/settings/timeout/directory&lt;br /&gt;
/settings/timeout/ftp&lt;br /&gt;
/settings/timeout/ha7&lt;br /&gt;
/settings/timeout/network&lt;br /&gt;
/settings/timeout/presence&lt;br /&gt;
/settings/timeout/serial&lt;br /&gt;
/settings/timeout/server&lt;br /&gt;
/settings/timeout/stable&lt;br /&gt;
/settings/timeout/uncached&lt;br /&gt;
/settings/timeout/usb&lt;br /&gt;
/settings/timeout/volatile&lt;br /&gt;
/settings/timeout/w1&lt;br /&gt;
/settings/units/pressure_scale&lt;br /&gt;
/settings/units/temperature_scale&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zusätzlich stehen die FHEM-internen Befehle &amp;quot;errors&amp;quot; und &amp;quot;devices&amp;quot; zur Verfügung.&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;Devicename&amp;amp;gt; errors #listet die Fehler des Device auf&lt;br /&gt;
get &amp;amp;lt;Devicename&amp;amp;gt; devices #scan den Server nach Device&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Angeschlossene Geräte auslesen===&lt;br /&gt;
Grundsätzlich werden die am Busmaster von OWFS angeschlossenen 1-Wire Geräte durch aktives autocreate nach einem Neustart (erfordert shutdown restart) selber in FHEM definiert.&lt;br /&gt;
Der Busmaster (zBsp ein DS9490r) selbst wird ebenfalls eingelesen und angezeigt.&lt;br /&gt;
&lt;br /&gt;
===Definition von Geräten===&lt;br /&gt;
Es ist auch möglich, Geräte manuell anzulegen. Dies erfolgt in folgendem Format:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;name&amp;amp;gt; OWDevice &amp;amp;lt;address&amp;amp;gt; [&amp;amp;lt;interval&amp;amp;gt;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Vorlauftemp OWDevice 28.334F2B040000 60&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wobei der Wert 60 als Abfrageintervall in Sekunden zu verstehen ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWDevice State===&lt;br /&gt;
Bei Temperaturfühler wie DS18S20 wird das Reading &amp;quot;state&amp;quot; wie folgt ausgegeben:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;temperature: 56.1875 alarm: 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Um die Temperatur wie bei anderen Temperatur-Sensoren (zBsp. CUL_WS) anzuzeigen, hilft das Attribut &amp;quot;stateFormat&amp;quot;. Dies kann wie folgt definiert werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr &amp;amp;lt;Devicename&amp;amp;gt; stateFormat T: &amp;amp;lt;wert&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zBsp:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr Boiler stateFormat T: temperature&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
alternativ&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr &amp;amp;lt;Devicename&amp;amp;gt; stateFormat {sprintf(&amp;quot;%.1f&amp;quot;,ReadingsVal(&amp;quot;&amp;amp;lt;Devicename&amp;amp;gt;&amp;quot;,&amp;quot;temperature&amp;quot;,0)).&amp;quot;°C&amp;quot;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Zusätzlich rundet das obenstehende Attribut mit &amp;quot;%.1f&amp;quot; die Temperatur auf eine Kommastelle.&lt;br /&gt;
&lt;br /&gt;
==Tipps und Tricks==&lt;br /&gt;
1-wire-Geräte sind häufig generische Geräte, wie Zähler und Spannungsmesser (A/D-Wandler), an denen Sensorik hängt. Die rohen Werte vom 1-wire-Gerät (Zählimpulse, Spannungen) sind dann noch in menschenlesbare Werte zu verwandeln. Hier helfen userReadings, z.B.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr myEnergyMeter userReadings energy { (ReadingsVal(&amp;quot;myEnergyMeter&amp;quot;,&amp;quot;count.A&amp;quot;,0)+AttrVal(&amp;quot;myEnergyMeter&amp;quot;,&amp;quot;myBasis&amp;quot;,0))/1250.0;; }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
[[Stromzähler_und_1-Wire,_OWServer,_OWDevice|Hier]] findet man ein Beispiel einer Anbindung zweier Leistungsmesser (aka Stromzähler) mit S0 Ausgang über einen 1-wire-S0-Zähler an FHEM. &lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== FHEM hängt, wenn OWServer nicht erreichbar ist ===&lt;br /&gt;
Am Anfang gab es mit OWServer das Problem, dass FHEM immer komplett hing, wenn OWServer nicht erreichbar war (siehe z.&amp;amp;nbsp;B. [http://www.fischer-net.de/hausautomation/haustechnik/1-wire/60-1-wire-integration-in-fhem.html hier am Ende]). Das Problem wurde inzwischen dankenswerterweise für den laufenden Betrieb {{Link2Forum|Topic=16945|LinkText=behoben}} - &amp;lt;code&amp;gt;attr myOWServer nonblocking 1&amp;lt;/code&amp;gt; muss dazu gesetzt werden -, aber zumindest beim Start hängt FHEM nach wie vor, wenn OWServer nicht erreichbar ist.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Raspberry_Pi_und_1-Wire&amp;diff=21442</id>
		<title>Raspberry Pi und 1-Wire</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Raspberry_Pi_und_1-Wire&amp;diff=21442"/>
		<updated>2017-05-03T17:50:48Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Link zum RPI2-Modul hat sich geändert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der [[:Kategorie:Raspberry Pi|Raspberry Pi]], abgekürzt RPi ist ein Einplatinencomputer der [http://www.raspberrypi.org/ Raspberry Pi Foundation], der unter Linux läuft und über eine Vielzahl von Anschlüssen verfügt.&lt;br /&gt;
&lt;br /&gt;
FHEM läuft auf allen Modell des Raspberry Pi. Während [[:Kategorie:Raspberry Pi|hier]] die Installation von FHEM beschrieben wird, soll sich diese Seite nur mit dem Anschluss von 1-Wire Devices an den RPi befassen.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Bereits von der Hardware her bietet der RPi verschiedene Möglichkeiten zum Anschluss von 1-Wire-Devices&lt;br /&gt;
&lt;br /&gt;
=== USB-Port ===&lt;br /&gt;
Über einen der USB-Ports des RPi mit entsprechendem Adapter. Hierbei sollte, wenn es sich nicht nur um wenige 1-Wire-Devices handelt, ein USB-Hub mit eigener Stromversorgung zwischengeschaltet werden. Mit USB-Extendern lässt sich dies bequem auch bis zu 20m entfernt vom RPi bewerkstelligen.&lt;br /&gt;
&lt;br /&gt;
Alle bekannten USB/1-Wire Adapter arbeiten mit dem RPi. Allerdings ist es möglicherweise (nur, wenn Fehler auftreten&amp;amp;#160;!) nötig, dafür ein Kernel-Update durchzuführen, da in manchen älteren Versionen des Linux-Kernels für den RPi Fehler im USB-Stack enthalten sind.&lt;br /&gt;
&lt;br /&gt;
=== COC-Modul ===&lt;br /&gt;
Anschluss über ein COC-Modul des Herstellers [http://busware.de busware.de]. Siehe hierzu im Detail [[COC und 1-wire]]].&lt;br /&gt;
&lt;br /&gt;
=== RPI2-Modul ===&lt;br /&gt;
Anschluss über ein RPI2-Modul des Herstellers [http://www.sheepwalkelectronics.co.uk/product_info.php?products_id=30 Sheepwalk Electronics]. Dieses Modul wird direkt auf den internen I2C-Bus des RPi aufgesteckt. Im Kaufzustand bietet es für den 1-Wire-Bus sowohl eine RJ45-Buchse, als auch einen Schraubklemmenanschluss. Diese sind leider beide so hoch, dass das Modul nicht mehr in das RPi-Gehäuse passt. Hier kann aber leicht abgeholfen werden (to be continued).&lt;br /&gt;
&lt;br /&gt;
Zur Ansteuerung ist auf dem RPi zunächst das Starten zweier Kernelmodule nötig, dazu als root ausführen&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;modprobe i2c-bcm2708&lt;br /&gt;
modprobe i2c-dev&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Der automatische Start dieser beiden Module kann in der Datei /etc/modules eingetragen werden. &lt;br /&gt;
&lt;br /&gt;
Zudem muss beim aktuellen Raspian noch die Datei /boot/config.txt angepasst werden:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;dtparam=i2c_arm=on&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die oben genannten Schritte können auch über (sudo) raspi-config durchgeführt werden. Damit wird sichergestellt, dass die für die jeweilige Kernelversion notwendigen Schritte durchgeführt werden (&#039;8 Advanced Options&#039; -&amp;gt; &#039;A7 I2C&#039;).&lt;br /&gt;
&lt;br /&gt;
Bei Vorhandensein des Paketes i2c-tools wird dann die korrekte Erkennung des Adapters mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;i2cdetect -y 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
überprüft, der 1-Wire-Busmaster DS2482-100 sollte als I2C-Device mit der ID 0x18 gefunden werden.&lt;br /&gt;
&lt;br /&gt;
=== GPIO4-Port ===&lt;br /&gt;
1-wire-Komponenten können direkt an den GPIO-Port des RPi angeschlossen und in FHEM konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
==== Software-Installation ====&lt;br /&gt;
Die Software-Installation des GPIO im RPi erfolgt je nach Kernelversion unterschiedlich:&lt;br /&gt;
&lt;br /&gt;
===== vor 2015 bzw. Kernelversion 3.18.3 =====&lt;br /&gt;
Zur Ansteuerung ist auf dem RPi zunächst das Starten zweier Kernelmodule nötig, dazu als root ausführen&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;modprobe w1-gpio pullup=1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;modprobe w1-therm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Waren die Schritte erfolgreich, gibt es jetzt im Verzeichnis &#039;&#039;/sys/bus/w1/devices/&#039;&#039; für jeden Sensor ein Unterverzeichnis mit seiner Kennung, z.B. &#039;&#039;28-000004e147d6&#039;&#039;. Die dort stehende Datei &#039;&#039;w1_slave&#039;&#039; enthält das Ergebnis der Datenübertragung vom Sensor. Um die Module dauerhaft zu laden, sind sie noch in die Datei &#039;&#039;/etc/modules&#039;&#039; einzutragen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# /etc/modules&lt;br /&gt;
w1-gpio pullup=1&lt;br /&gt;
w1-therm &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den 1-Wire Bus in FHEM einzubinden, muss noch das Modul 58_GPIO4.pm aus dem Verzeichnis &#039;&#039;/opt/fhem/contrib&#039;&#039; in das Hauptverzeichnis &#039;&#039;/opt/fhem/FHEM/&#039;&#039; kopiert werden und mit &lt;br /&gt;
:&amp;lt;code&amp;gt;define RPi GPIO4 BUSMASTER&amp;lt;/code&amp;gt;&lt;br /&gt;
bekannt gemacht werden. Nach einem Neustart von FHEM werden die Sensoren automatisch erkannt (FHEM-Forum-Beitrag {{Link2Forum|Topic=10431}}).&lt;br /&gt;
&lt;br /&gt;
Das beschriebene Kernelmodul unterstützt momentan die IDs 10- (DS1820 u. DS18S20) sowie 28- (DS18B20). Im &amp;quot;Auslieferungszustand&amp;quot; können maximal 10 Sensoren angeschlossen werden. &lt;br /&gt;
Unter [http://www.raspiprojekt.de/anleitungen/schaltungen/9-1wire-mit-temperatursensor-ds18b20.html?showall=&amp;amp;start=4] ist beschrieben, wie man die Anzahl erhöhen kann. Anschließend ist nur noch ein Neustart des RPi nötig.&lt;br /&gt;
&lt;br /&gt;
===== ab 2015 bzw. Kernelversion 3.18.3 =====&lt;br /&gt;
Da sich mit Kernelversion 3.18.3 die Handhabung der Module geändert hat (vgl. [[#1-wire am GPIO4-Port funktioniert nicht mehr nach Systemupdate]] - die Datei &amp;lt;code&amp;gt;/etc/modules&amp;lt;/code&amp;gt; wird im Prinzip garnicht mehr benötigt (Details s. [[#Links]]). Somit ist hier eine andere (einfachere) Konfiguration nötig:&lt;br /&gt;
* Am besten erst einmal ein ordentliches System-Update durchführen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get dist-upgrade -f&lt;br /&gt;
sudo rpi-update&lt;br /&gt;
sudo reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Kernelversion kontrollieren (muss jetzt mind. v3.18.3 sein):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uname -r&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Dann fügt man den folgende Zeile in &amp;lt;code&amp;gt;/boot/config.txt&amp;lt;/code&amp;gt; ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# activating 1-wire with pullup&lt;br /&gt;
dtoverlay=w1-gpio-pullup&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Und startet das System neu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich kann man gleich eine &#039;&#039;&#039;Debugging-Funktion&#039;&#039;&#039; aktivieren:&lt;br /&gt;
* Dazu fügt man den folgende Zeile in &amp;lt;code&amp;gt;/boot/config.txt&amp;lt;/code&amp;gt; ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# activating device tree debugging (use: sudo vcdbg log msg)&lt;br /&gt;
dtdebug=on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Abrufen kann man die Debug-Informationen dann mit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo vcdbg log msg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Elektrische Installation ====&lt;br /&gt;
Eine gute Einführung zum Thema geben die Links von RaspiProjekt.de (s. [[#Links]]).&lt;br /&gt;
&lt;br /&gt;
Dazu wird im ersten Schritt der 1-Wire Bus (bzw. zum Test nur ein einzelner Sensor) mit dem GPIO-Port des RPi verbunden, und zwar&lt;br /&gt;
*1-Wire GND an GND vom Pi (Pin 6)&lt;br /&gt;
*1-Wire Datenleitung an GPIO04 (Pin 7)&lt;br /&gt;
*1-Wire VDD an +3,3V vom Pi (Pin 1)&lt;br /&gt;
*Ausserdem ist noch ein Pullup-Widerstand von z.B. 4,7kOhm zwischen Pin1 und Pin7 zu schalten.&lt;br /&gt;
&lt;br /&gt;
Obwohl die nominale Spannung für 1-Wire Devices 5V beträgt, ist hier die verringerte Spannung nötig, weil die GPIO-Ports des RPi nur 3,3, V vertragen und durch höhere Spannungen zerstört werden. Als Alternative kann man den 1-Wire Bus auch 5V (Pin 2) anschließen, dann &#039;&#039;&#039;muss&#039;&#039;&#039; aber zwingend das Signal der 1-Wire Datenleitung durch einen Spannungsteiler (z.B. 10 kOhm und 6.8 kOhm) auf 3,3 V begrenzt werden. Besser man verwendet einen aktiven Pegelwandler der sich mit einem einfachen MOS-FET realisieren lässt : [[1-Wire Pegelwandler]]&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration von 1-wire-Komponenten am GPIO ====&lt;br /&gt;
Im Folgenden sind für verschiedene 1-wire-Komponenten die grundlegenden fhem-Konfigurationen beschrieben.&lt;br /&gt;
&lt;br /&gt;
===== Konfiguration des Busmasters =====&lt;br /&gt;
Um 1-wire-Komponenten auslesen zu können muss zuerst der Busmaster im FHEM konfiguriert werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define RPi GPIO4 BUSMASTER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Temperatursensor DS18B20 =====&lt;br /&gt;
Ist der Temperatursensor richtig elektrisch installiert (vgl. [[#Links]] von RaspiProjekt.de), so wird automatisch ein eigenes Verzeichnis mit der ID des Sensors im 1-wire-Pfad des RPi angelegt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 1-wire-Pfad des RPi:&lt;br /&gt;
/sys/bus/w1/devices/&lt;br /&gt;
&lt;br /&gt;
# Bsp.:&lt;br /&gt;
$ ls /sys/bus/w1/devices/&lt;br /&gt;
28-001451df14ff  # ID des Temperatursensors  &lt;br /&gt;
w1_bus_master1   # Standardeintrag des 1-wire-Bus&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Am besten schliesst man mehrere Sensoren nacheinander an, damit man die ID dem richtigen Sensor zuordnen kann.&lt;br /&gt;
&lt;br /&gt;
Mit der ID wird der Sensor jetzt im FHEM konfiguriert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define EG_Balkon GPIO4 28-001451df14ff&lt;br /&gt;
attr EG_Balkon model DS18B20&lt;br /&gt;
attr EG_Balkon room GPIO-Devices&lt;br /&gt;
attr EG_Balkon group 1-wire&lt;br /&gt;
&lt;br /&gt;
define FileLog_EG_Balkon FileLog ./log/EG_Balkon-%Y-%W.log EG_Balkon&lt;br /&gt;
attr FileLog_EG_Balkon logtype text&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den zugehörigen Plot erstellt man am einfachsten über die WebGUI des FHEM:&lt;br /&gt;
* ggf. FHEM neu starten (falls die Komponente und der FileLog nicht auftauchen)&lt;br /&gt;
* FileLog aufrufen&lt;br /&gt;
* &amp;quot;Create SVG Plot&amp;quot; auswählen&lt;br /&gt;
* ggf. Einstellungen anpassen (geht auch im Nachhinein)&lt;br /&gt;
* &amp;quot;Write .gplot file&amp;quot; auswählen&lt;br /&gt;
* weiter unten &amp;lt;code&amp;gt;attr SVG_FileLog_EG_Balkon room Balkon&amp;lt;/code&amp;gt; eingeben&lt;br /&gt;
&lt;br /&gt;
=== UART-Schnittstelle ===&lt;br /&gt;
Der RPi verfügt auch über eine UART-Schnittstelle, an diese kann direkt ein Serielles 1-Wire Interface angeschlossen werden (IN VORBEREITUNG)&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Ansteuerung des 1-Wire Bus auf dem RPi kann durch unterschiedliche Software-Systeme erfolgen. Verbreitet mit FHEM sind&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;OWX&#039;&#039;&#039; sowie die zugehörigen Frontendmodule OWAD, [[OWCOUNT]], OWID, OWLCD, OWMULTI, OWSWITCH und OWTHERM. Das &#039;&#039;&#039;OWX&#039;&#039;&#039;-Modul operiert direkt auf der jeweiligen Hardware (USB bzw. Seriell) oder liest die Daten über Netzwerk (COC/CUNO/Arduino) und reicht sie an spezialisierte Frontendmodule weiter.&lt;br /&gt;
* &#039;&#039;&#039;OWServer&#039;&#039;&#039;, ein Modul, welches die vorhergehende Installation des Softwarepaketes [http://www.owfs.org OWFS] erfordert. OWFS startet einen speziellen Server, der die Kommunikation mit der Hardware übernimmt und die Daten dann an &#039;&#039;&#039;OWServer&#039;&#039;&#039; weiterleitet. Die Installtion bzw Kompilierung vom OWServer auf dem Rasperry ist unter [[OWServer &amp;amp; OWDevice#owfs Pakete installieren|owfs Pakete installieren]] beschrieben. Zu OWServer passt ein generisches Frontendmodul OWDevice, siehe [[OWServer &amp;amp; OWDevice]].&lt;br /&gt;
&lt;br /&gt;
Nachfolgend ist die Kompatibilität dieser Softwaresysteme mit den einzelnen Hardware-Möglichkeiten aufgeführt.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
!  Anschluss &lt;br /&gt;
!  Gerät &lt;br /&gt;
!  Unterstützte 1-Wire Devices &lt;br /&gt;
!  Besonderheit &lt;br /&gt;
!  Stromversorgung 1-Wire Bus&lt;br /&gt;
|- &lt;br /&gt;
|  Direkt an USB &lt;br /&gt;
|  DS9490 Adapter &lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;b&amp;gt;funktioniert&amp;lt;/b&amp;gt; (DS9490R) auf dem Raspi mit OWServer ({{Link2Forum|Topic=59900}})&lt;br /&gt;
&amp;lt;b&amp;gt;funktioniert nicht&amp;lt;/b&amp;gt; mit OWX, weil der enthaltene Chip DS2490 derzeit nur über &amp;lt;br /&amp;gt;&amp;lt;i&amp;gt;libusb&amp;lt;/i&amp;gt; ansteuerbar ist. Abhilfe ist in Arbeit. &lt;br /&gt;
| &amp;amp;#160;??&lt;br /&gt;
|- &lt;br /&gt;
|  Direkt an USB &lt;br /&gt;
|  USB9097 Adapter&lt;br /&gt;
|  rowspan=&amp;quot;8&amp;quot; |  Alle von OWX unterstützten Devices, d.h. &amp;lt;br /&amp;gt;&amp;lt;p&amp;gt;DS18x20, DS1822 Temperatursensor &amp;lt;br /&amp;gt; DS2406, DS2408, DS2413 Schalter &amp;lt;br /&amp;gt; DS2423 Zähler &amp;lt;br /&amp;gt;DS2438 Multisensor &amp;lt;br /&amp;gt; DS2450 4 Kanal ADC &amp;lt;br /&amp;gt;LCD-Controller von  [http://www.fuchs-shop.com/de/shop/6/1/13372316/ Louis Swart]&amp;lt;br /&amp;gt;Alle anderen 1-Wire Devices: Nur ID&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
| &amp;lt;b&amp;gt;funktioniert&amp;lt;/b&amp;gt; auf der FB7390, das Kernelmodul &amp;lt;i&amp;gt;ch341.ko&amp;lt;/i&amp;gt; findet man [https://sites.google.com/site/fhemarduino/file-cabinet/ch341.ko?attredirects=0&amp;amp;amp;d=1 hier]&lt;br /&gt;
|  Ja, 5V&lt;br /&gt;
|- &lt;br /&gt;
|  Direkt an USB &lt;br /&gt;
|  Eigenbau, &amp;lt;br /&amp;gt; mit FT232RL und DS2480 Bus-Master &lt;br /&gt;
| &amp;lt;b&amp;gt;funktioniert&amp;lt;/b&amp;gt;, Fertiggeräte eventuell bei EBay erhältlich, &amp;lt;br /&amp;gt;siehe auch [[Interfaces für 1-Wire]]&lt;br /&gt;
|  Ja, 5V&lt;br /&gt;
|- &lt;br /&gt;
|  Direkt an USB &lt;br /&gt;
|  LinkUSBi Adapter &lt;br /&gt;
| &amp;lt;b&amp;gt;funktioniert&amp;lt;/b&amp;gt;, verwendet das FTDI Kernelmodul.&amp;lt;br /&amp;gt;Achtung: Es kann zu Timing-Problemem kommen. &amp;lt;br /&amp;gt; Erhältlich z.B. [http://www.fuchs-shop.com/de/shop/17/1/13372210/ hier]&lt;br /&gt;
|  Ja, 5V an Pin2 (limited to 50mA)&lt;br /&gt;
|- &lt;br /&gt;
|  Über USB-zu-Seriell-Konverter &amp;lt;br /&amp;gt; 9- oder 25-polig &amp;lt;br /&amp;gt; mit Winchiphead CH341-Chip&lt;br /&gt;
|  Konverter + DS9097U-(009/S09, E25) &lt;br /&gt;
| &amp;lt;b&amp;gt;funktioniert&amp;lt;/b&amp;gt; auf der FB7390, das Kernelmodul &amp;lt;i&amp;gt;ch341.ko&amp;lt;/i&amp;gt; findet man [https://sites.google.com/site/fhemarduino/file-cabinet/ch341.ko?attredirects=0&amp;amp;amp;d=1 hier]&lt;br /&gt;
|  Nur bei den 25-poligen Modellen als Standard,&amp;lt;br /&amp;gt; bei den 9-poligen Modellen&amp;lt;br /&amp;gt; externe Versorgung oder Modifikation des DS9097 nötig&lt;br /&gt;
|- &lt;br /&gt;
|  Über USB-zu-Seriell-Konverter &amp;lt;br /&amp;gt; 9- oder 25-polig &amp;lt;br /&amp;gt; mit Prolific PL2303-Chip&lt;br /&gt;
|  Konverter + DS9097U-(009/S09, E25) &lt;br /&gt;
| &amp;lt;b&amp;gt;funktioniert&amp;lt;/b&amp;gt; auf der FB7390, das Kernelmodul &amp;lt;i&amp;gt;pl2303.ko&amp;lt;/i&amp;gt; findet man [https://groups.google.com/group/fhem-users/attach/1c0530caa5d8a864/pl2303.ko?part=2&amp;amp;amp;authuser=0 hier]&lt;br /&gt;
|  Nur bei den 25-poligen Modellen als Standard,&amp;lt;br /&amp;gt; bei den 9-poligen Modellen&amp;lt;br /&amp;gt; externe Versorgung oder Modifikation des DS9097 nötig&lt;br /&gt;
|- &lt;br /&gt;
|  Über USB-zu-Seriell-Konverter &amp;lt;br /&amp;gt; 9- oder 25-polig &amp;lt;br /&amp;gt; mit FTDI RL232-Chip&lt;br /&gt;
|  Konverter + DS9097U-(009/S09, E25) &lt;br /&gt;
| &amp;lt;b&amp;gt;funktioniert&amp;lt;/b&amp;gt; auf der FB7390, das Kernelmodul &amp;lt;i&amp;gt;ftdi_sio.ko&amp;lt;/i&amp;gt; ist auf der &amp;lt;br /&amp;gt; FritzBox vorhanden &lt;br /&gt;
|  Nur bei den 25-poligen Modellen als Standard,&amp;lt;br /&amp;gt; bei den 9-poligen Modellen&amp;lt;br /&amp;gt; externe Versorgung oder Modifikation des DS9097 nötig&lt;br /&gt;
|- &lt;br /&gt;
|  Direct an USB&lt;br /&gt;
|  Arduino mit USB-Anschluss (UNO, Mega, Nano...)&lt;br /&gt;
|  rowspan=&amp;quot;2&amp;quot;| 1-Wire Bus direkt am Arduino (reine Softwarelösung) oder (stabiler im Betrieb) in Verbindung mit DS2482-Busmaster (am I2C des Arduinos). Mit DS2482-100 ist 1 1-Wire-Bus (optional mit Strong-pullup über externen MosFET), mit DS2482-800 sind 8 busse (nur mit internem Strong-pullup) an 1 Arduino gleichzeitig möglich.&lt;br /&gt;
|  rowspan=&amp;quot;2&amp;quot;| Ja, 3,3V oder 5V je nach Arduino-modell.&lt;br /&gt;
|-&lt;br /&gt;
|  Über Netzwerk&lt;br /&gt;
|  Arduino mit Ethernetshield, Arduino mit ENC28J60-shield, Arduino Ethernet &lt;br /&gt;
|-&lt;br /&gt;
|  Über Netzwerk und CUNO&lt;br /&gt;
|  CUNO &lt;br /&gt;
|  Mit OWX: Alle von OWX unterstützten Devices &amp;lt;br /&amp;gt; Ohne OWX: Nur  DS18x20, DS1822 Temperatursensor  &lt;br /&gt;
| &amp;lt;b&amp;gt;funktioniert&amp;lt;/b&amp;gt; mit gewissen Einschränkungen, siehe [[CUNO und 1-wire]]&lt;br /&gt;
|  Ja, aber nur 3,3 V. &amp;lt;br /&amp;gt; Kann allerdings zu 5V modifiziert werden&lt;br /&gt;
|- &lt;br /&gt;
|  Über Netzwerk und &amp;lt;br /&amp;gt; Ethersex-Gerät&lt;br /&gt;
|  AVR-Net-IO oder ähnliches &lt;br /&gt;
|  DS18x20, DS1822 Temperatursensor &amp;lt;br /&amp;gt; DS2502 EEPROM &amp;lt;br /&amp;gt;DS2450 4 Kanal ADC &lt;br /&gt;
| &amp;lt;b&amp;gt;funktioniert&amp;lt;/b&amp;gt;, siehe [[FHEM und 1-Wire]]und [[AVR-NET-IO]]&amp;lt;br /&amp;gt;&lt;br /&gt;
| &amp;amp;#160;??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Problembehebung ==&lt;br /&gt;
=== 1-wire am GPIO4-Port funktioniert nicht mehr nach Systemupdate ===&lt;br /&gt;
&#039;&#039;&#039;Problem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es kann passieren, dass nach einem Systemupdate (apt-get update oder apt-get dist-upgrade) die 1-wire-Geräte am GPIO4-Port plötzlich nicht mehr funktionieren. Dies hat dann aller Wahrscheinlichkeit die Ursache, dass ein Kernel-Upgrade von &amp;quot;vor 3.18.3&amp;quot; auf &amp;quot;danach&amp;quot; gemacht wurde. Mit Kernelversion 3.18.3 ist die Handhabung der Kernelmodule umgestellt worden (vgl. auch [[#GPIO4-Port]]):&lt;br /&gt;
* vor v3.18.3: hier wurden Module in die /etc/modules eingetragen. Dieses Vorgehen ist fast überall beschrieben.&lt;br /&gt;
* ab v3.18.3: jetzt wurde das sog. Device-Tree-Verfahren eingeführt, das anders arbeitet - und erst einmal die alte Konfiguration blockiert (!). (Details s. unter [[#Links]])&lt;br /&gt;
Auch ein Aufruf von &amp;lt;code&amp;gt;sudo rpi-update&amp;lt;/code&amp;gt; hilft allein nicht weiter (ist aber immer sinnvoll).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lösung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die &amp;quot;korrekte&amp;quot; Lösung wäre die Umstellung auf Device-Tree-Konfiguration: &lt;br /&gt;
* Dazu fügt man den folgende Zeile in &amp;lt;code&amp;gt;/boot/config.txt&amp;lt;/code&amp;gt; ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# activating 1-wire with pullup&lt;br /&gt;
dtoverlay=w1-gpio-pullup&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Entfernt die Module &amp;lt;code&amp;gt;w1-gpio&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;w1-therm&amp;lt;/code&amp;gt; aus das &amp;lt;code&amp;gt;/etc/modules&amp;lt;/code&amp;gt; (oder kommentiert sie aus)&lt;br /&gt;
* Und startet das System neu&lt;br /&gt;
&lt;br /&gt;
Zusätzlich kann man gleich eine &#039;&#039;&#039;Debugging-Funktion&#039;&#039;&#039; aktivieren:&lt;br /&gt;
* Dazu fügt man den folgende Zeile in &amp;lt;code&amp;gt;/boot/config.txt&amp;lt;/code&amp;gt; ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# activating device tree debugging (use: sudo vcdbg log msg)&lt;br /&gt;
dtdebug=on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Abrufen kann man die Debug-Informationen dann mit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo vcdbg log msg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alternativer Workaround&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Alternativ zur &amp;quot;korrekten&amp;quot; Lösung kann man die Device-Tree-Funktionalität auch einfach deaktivieren - dann bleibt alles wie bisher.&lt;br /&gt;
&lt;br /&gt;
* Dazu fügt man den folgende Zeile in &amp;lt;code&amp;gt;/boot/config.txt&amp;lt;/code&amp;gt; ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# disabling device tree functionality:&lt;br /&gt;
device_tree=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Und startet das System neu.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
Zu GPIO:&lt;br /&gt;
* [http://neubert-volmar.de/Hausautomation/RaspberryPi/index.html Beispiel zur Nutzung von 1-wire am GPIO-Port &amp;amp; eines Eigenbau-Adapters]&lt;br /&gt;
* [https://raspiprojekt.de/anleitungen/hardware/147-gpio-grundlagen.html RaspiProjekt.de - GPIO-Grundlagen]&lt;br /&gt;
* [http://www.raspberrypi.org/documentation/usage/gpio/ RaspberryPi.org - GPIO-Grundlagen]&lt;br /&gt;
* [http://pi.gadgetoid.com/pinout/pin7_gpio4 Pin-Belegungen des Raspi]&lt;br /&gt;
* [https://www.raspiprojekt.de/anleitungen/schaltungen/9-1wire-mit-temperatursensor-ds18b20.html RaspiProjekt.de - Anbindung von Temperatursensoren]&lt;br /&gt;
&lt;br /&gt;
Zu Device-Tree:&lt;br /&gt;
* [https://www.raspiprojekt.de/21-blog/153-neuer-kernel-neues-glueck.html RaspiProjekt.de - Neuer Kernel neues Glück]&lt;br /&gt;
* [http://www.raspberrypi.org/documentation/configuration/device-tree.md RaspberryPi.org - Device Trees, Overlays and Parameters]&lt;br /&gt;
* [https://raspiprojekt.de/anleitungen/hardware/154-geraetetreiber-und-device-tree.html RaspiProjekt.de - Gerätetreiber und Device Tree]&lt;br /&gt;
* [https://github.com/raspberrypi/linux/tree/rpi-3.18.y/arch/arm/boot/dts Liste aller verfügbaren Device-Tree Module]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Batteriewarnung_via_Telegram&amp;diff=18119</id>
		<title>DOIF/do always Alternative am Beispiel einer Batteriewarnung via Telegram</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Batteriewarnung_via_Telegram&amp;diff=18119"/>
		<updated>2016-12-30T15:34:29Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Erstellung des Beitrages - leider ohne Labor-Import, da zu viele Abhängigkeiten erfüllt sein müssten&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOIF führt die Anweisungen einer Bedingung nur 1x aus. Das kann durch Setzen des Attributes &#039;do&#039; mit dem Wert &#039;always&#039; geändert werden, doch manchmal ist eine Mix aus beiden Situationen interessant, wie dieses Beispiel zeigen soll.&lt;br /&gt;
==Alarm bei Battery low eines Homematic-Gerätes==&lt;br /&gt;
Würde ohne das Attribut do always gearbeitet werden, so würde das DOIF genau eine Meldung verschicken. Selbst, wenn die Batterie getauscht wurde und eine eine andere Batterie zur Neige geht, käme keine Meldung mehr, da DOIF noch auf ein &#039;Rücksetzen&#039; der Meldung wartet. Das Attribut do always würde jedoch wiederum bei jedem Event eine Meldung erzeugen (z.B. alle 30 Min.), was doch etwas zu sehr nerven könnte. Das Ziel ist es also, 1x täglich die Meldung zu versenden.&lt;br /&gt;
===Beschreibung===&lt;br /&gt;
Mittels einer strikten Namensvergabe der Devices kann man sehr einfach alle Homatic-Geräte greifen. Hierbei ist es auch erst einmal unerheblich, ob sie eine Batterie haben, denn netzbetriebene Geräte werden nie das passende Event schicken. Im Beispiel wird nun davon ausgegangen, dass alle Homematic-Geräte mit dem Namenspräfix HM_ beginnen.&amp;lt;br&amp;gt;&lt;br /&gt;
Der reguläre Ausdruck sichert alle Events, unabhängig davon, ob der Battery groß oder klein geschrieben ist, oder auch Batterie dort steht.&amp;lt;br&amp;gt;&lt;br /&gt;
Zum täglichen &#039;Rücksetzen&#039; des DOIF wird eine 2., zeitbasierte Bedingung definiert, welche das DOIF von state cmd1 (nach einer ausgelösten Warnung) auf cmd2 wechseln lässt. So wird führt das nächste Event wieder zu einer Warnung.&amp;lt;br&amp;gt;&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define di_HM_Batt_Warn DOIF ([&amp;quot;HM_.*:[Bb]atte.*[Ll]ow&amp;quot;]) (set telegramBot message @xxxxxxx Batterie eines Homematic-Gerätes leer!)&lt;br /&gt;
     DOELSEIF ([10:00])&lt;br /&gt;
attr di_HM_Batt_Warn room CUL_HM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17640</id>
		<title>DOIF/do always Alternative am Beispiel einer Rollladenautomatik</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17640"/>
		<updated>2016-12-01T17:05:20Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Laborgruppe zum Import mit Raw definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOIF führt die Anweisungen einer Bedingung nur 1x aus. Das kann durch Setzen des Attributes &#039;do&#039; mit dem Wert &#039;always&#039; geändert werden, doch manchmal ist eine Mix aus beiden Situationen interessant, wie dieses Beispiel zeigen soll.&lt;br /&gt;
==Rollladensteuerung mittels Twilight==&lt;br /&gt;
Die Rollläden sollen bei einstellbaren Twilight-Werten hoch, bzw. runter gefahren werden. Natürlich passt diese Automatik nicht immer und es wird manuell eingegriffen. Diese manuellen Eingriffe sollen natürlich erkannt werden und Vorrang genießen.&lt;br /&gt;
===Beschreibung===&lt;br /&gt;
Der Rollladen wird in diesem Beispiel durch das Dummy du_Labor_Rollladen ersetzt. Der Wert 0 entspricht einer kompletten Öffnung, 100 ist komplett zu.&amp;lt;br&amp;gt;&lt;br /&gt;
Zur Prüfung eines manuellen Eingriffs wird die Rolladenposition im DOIF heran gezogen. Im echten Leben könnte gleichzeitig noch geprüft werden, ob z.B. die Terrassentür offen ist, denn wenn man auf der Terrasse ist und die Automatik zuschlägt ist das auch kontraproduktiv. Ebenso ist es schlecht, wenn das Fenster hinter dem geschlossenen Rollladen zum Lüften im Sommer auf ist und der Rollladen unbeaufsichtigt öffnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn nun morgens der Rollladen geöffnet wird, dann geht das DOIF auf State=cmd1 und führt die morgendliche Anweisung erst wieder aus, wenn der State ungleich cmd1 ist. Werden Abends die Rollläden nun aber manuell vor der automatischen Zeit geschlossen, würde dieser Statuswechsel nicht erfolgen und am nächsten Morgen die Automatik auch nicht funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf den ersten Blick erscheint das &#039;do always&#039; hier ein gutes Mittel zu sein. Dies kann jedoch im umgekehrten Fall stören. Werden die automatisch geschlossenen Rollläden nochmals manuell geöffnet, dann würden sie beim nächsten Event vom Twilight erneut herunter fahren. Also muss der Status vom DOIF auf einem anderen Weg geändert werden. Dazu kann als letzte Bedingung einfach ein zeitlicher Trigger (Mittags und Nachts, wenn die Automatik sozusagen die Richtung umkehrt) ohne Kommando angegeben werden. Damit geht der Status im Beispiel auf cmd4 und das DOIF ist wieder &#039;scharf&#039; für den nächsten Einsatz.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define di_Labor_Rollo_TL DOIF &lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state]&lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 &lt;br /&gt;
   and &lt;br /&gt;
     [?06:15-11:00|8]) &lt;br /&gt;
  (set du_Labor_Rollladen 0)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state] &lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 &lt;br /&gt;
   and &lt;br /&gt;
     [?06:15-11:00|7]) &lt;br /&gt;
  (set du_Labor_Rollladen 0)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state] &lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;lt; 10 and [?15:00-22:00])&lt;br /&gt;
  (set du_Labor_Rollladen 85)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
   ([00:15] or [12:00])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define TL_Labor_Berlin Twilight 52.522297 13.413140 1 638242&lt;br /&gt;
attr TL_Labor_Berlin alias Twilight Wetter&lt;br /&gt;
attr TL_Labor_Berlin group Rollläden&lt;br /&gt;
attr TL_Labor_Berlin room DOIF_Labor&lt;br /&gt;
attr TL_Labor_Berlin sortby 4&lt;br /&gt;
attr TL_Labor_Berlin stateFormat twilight_weather%&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_auf alias Rollläden nach %-Licht auf (Mo-Fr -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_auf 40&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_WE_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf alias Rollläden nach %-Licht auf (Sa/So -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_WE_auf 50&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_zu dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_zu alias Rollläden nach %-Licht zu (Mo.-So. -&amp;gt; 0=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_zu group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_zu room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_zu setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_zu webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_zu 20&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollladen dummy&lt;br /&gt;
attr du_Labor_Rollladen alias Simmulation Rollladen&lt;br /&gt;
attr du_Labor_Rollladen group Rollläden&lt;br /&gt;
attr du_Labor_Rollladen room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollladen setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollladen stateFormat state%&lt;br /&gt;
attr du_Labor_Rollladen webCmd state&lt;br /&gt;
setstate du_Labor_Rollladen 0&lt;br /&gt;
&lt;br /&gt;
define di_Labor_Rollo_TL DOIF ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state]\&lt;br /&gt;
    and\&lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75\&lt;br /&gt;
    and\&lt;br /&gt;
     [?06:15-11:00|8])\&lt;br /&gt;
  (set du_Labor_Rollladen 0)\&lt;br /&gt;
 DOELSEIF\&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state]\&lt;br /&gt;
    and\&lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|7])\&lt;br /&gt;
  (set du_Labor_Rollladen 0)\&lt;br /&gt;
 DOELSEIF\&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state]\&lt;br /&gt;
    and\&lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;lt; 10\&lt;br /&gt;
    and\&lt;br /&gt;
     [?15:00-22:00])\&lt;br /&gt;
  (set du_Labor_Rollladen 100)\&lt;br /&gt;
 DOELSEIF\&lt;br /&gt;
     ([00:15] or [12:00])&lt;br /&gt;
&lt;br /&gt;
attr di_Labor_Rollo_TL alias DOIF Rollläden Twilight&lt;br /&gt;
attr di_Labor_Rollo_TL group Rollläden&lt;br /&gt;
attr di_Labor_Rollo_TL room DOIF_Labor&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17639</id>
		<title>DOIF/do always Alternative am Beispiel einer Rollladenautomatik</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17639"/>
		<updated>2016-12-01T17:04:48Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOIF führt die Anweisungen einer Bedingung nur 1x aus. Das kann durch Setzen des Attributes &#039;do&#039; mit dem Wert &#039;always&#039; geändert werden, doch manchmal ist eine Mix aus beiden Situationen interessant, wie dieses Beispiel zeigen soll.&lt;br /&gt;
==Rollladensteuerung mittels Twilight==&lt;br /&gt;
Die Rollläden sollen bei einstellbaren Twilight-Werten hoch, bzw. runter gefahren werden. Natürlich passt diese Automatik nicht immer und es wird manuell eingegriffen. Diese manuellen Eingriffe sollen natürlich erkannt werden und Vorrang genießen.&lt;br /&gt;
===Beschreibung===&lt;br /&gt;
Der Rollladen wird in diesem Beispiel durch das Dummy du_Labor_Rollladen ersetzt. Der Wert 0 entspricht einer kompletten Öffnung, 100 ist komplett zu.&amp;lt;br&amp;gt;&lt;br /&gt;
Zur Prüfung eines manuellen Eingriffs wird die Rolladenposition im DOIF heran gezogen. Im echten Leben könnte gleichzeitig noch geprüft werden, ob z.B. die Terrassentür offen ist, denn wenn man auf der Terrasse ist und die Automatik zuschlägt ist das auch kontraproduktiv. Ebenso ist es schlecht, wenn das Fenster hinter dem geschlossenen Rollladen zum Lüften im Sommer auf ist und der Rollladen unbeaufsichtigt öffnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn nun morgens der Rollladen geöffnet wird, dann geht das DOIF auf State=cmd1 und führt die morgendliche Anweisung erst wieder aus, wenn der State ungleich cmd1 ist. Werden Abends die Rollläden nun aber manuell vor der automatischen Zeit geschlossen, würde dieser Statuswechsel nicht erfolgen und am nächsten Morgen die Automatik auch nicht funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf den ersten Blick erscheint das &#039;do always&#039; hier ein gutes Mittel zu sein. Dies kann jedoch im umgekehrten Fall stören. Werden die automatisch geschlossenen Rollläden nochmals manuell geöffnet, dann würden sie beim nächsten Event vom Twilight erneut herunter fahren. Also muss der Status vom DOIF auf einem anderen Weg geändert werden. Dazu kann als letzte Bedingung einfach ein zeitlicher Trigger (Mittags und Nachts, wenn die Automatik sozusagen die Richtung umkehrt) ohne Kommando angegeben werden. Damit geht der Status im Beispiel auf cmd4 und das DOIF ist wieder &#039;scharf&#039; für den nächsten Einsatz.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define di_Labor_Rollo_TL DOIF &lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state]&lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 &lt;br /&gt;
   and &lt;br /&gt;
     [?06:15-11:00|8]) &lt;br /&gt;
  (set du_Labor_Rollladen 0)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state] &lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 &lt;br /&gt;
   and &lt;br /&gt;
     [?06:15-11:00|7]) &lt;br /&gt;
  (set du_Labor_Rollladen 0)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state] &lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;lt; 10 and [?15:00-22:00])&lt;br /&gt;
  (set du_Labor_Rollladen 85)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
   ([00:15] or [12:00])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define TL_Labor_Berlin Twilight 52.522297 13.413140 1 638242&lt;br /&gt;
attr TL_Labor_Berlin alias Twilight Wetter&lt;br /&gt;
attr TL_Labor_Berlin group Rollläden&lt;br /&gt;
attr TL_Labor_Berlin room DOIF_Labor&lt;br /&gt;
attr TL_Labor_Berlin sortby 4&lt;br /&gt;
attr TL_Labor_Berlin stateFormat twilight_weather%&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_auf alias Rollläden nach %-Licht auf (Mo-Fr -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_auf 40&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_WE_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf alias Rollläden nach %-Licht auf (Sa/So -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_WE_auf 50&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_zu dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_zu alias Rollläden nach %-Licht zu (Mo.-So. -&amp;gt; 0=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_zu group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_zu room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_zu setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_zu webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_zu 20&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollladen dummy&lt;br /&gt;
attr du_Labor_Rollladen alias Simmulation Rollladen&lt;br /&gt;
attr du_Labor_Rollladen group Rollläden&lt;br /&gt;
attr du_Labor_Rollladen room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollladen setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollladen stateFormat state%&lt;br /&gt;
attr du_Labor_Rollladen webCmd state&lt;br /&gt;
setstate du_Labor_Rollladen 0&lt;br /&gt;
&lt;br /&gt;
define di_Labor_Rollo_TL DOIF ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state]\&lt;br /&gt;
    and\&lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75\&lt;br /&gt;
    and\&lt;br /&gt;
     [?06:15-11:00|12345])\&lt;br /&gt;
  (set du_Labor_Rollladen 0)\&lt;br /&gt;
 DOELSEIF\&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state]\&lt;br /&gt;
    and\&lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|06])\&lt;br /&gt;
  (set du_Labor_Rollladen 0)\&lt;br /&gt;
 DOELSEIF\&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state]\&lt;br /&gt;
    and\&lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;lt; 10\&lt;br /&gt;
    and\&lt;br /&gt;
     [?15:00-22:00])\&lt;br /&gt;
  (set du_Labor_Rollladen 100)\&lt;br /&gt;
 DOELSEIF\&lt;br /&gt;
     ([00:15] or [12:00])&lt;br /&gt;
&lt;br /&gt;
attr di_Labor_Rollo_TL alias DOIF Rollläden Twilight&lt;br /&gt;
attr di_Labor_Rollo_TL group Rollläden&lt;br /&gt;
attr di_Labor_Rollo_TL room DOIF_Labor&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17462</id>
		<title>DOIF/do always Alternative am Beispiel einer Rollladenautomatik</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17462"/>
		<updated>2016-11-25T12:32:19Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Fehler beim Import korrigiert (Umbrüche)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOIF führt die Anweisungen einer Bedingung nur 1x aus. Das kann durch Setzen des Attributes &#039;do&#039; mit dem Wert &#039;always&#039; geändert werden, doch manchmal ist eine Mix aus beiden Situationen interessant, wie dieses Beispiel zeigen soll.&lt;br /&gt;
==Rollladensteuerung mittels Twilight==&lt;br /&gt;
Die Rollläden sollen bei einstellbaren Twilight-Werten hoch, bzw. runter gefahren werden. Natürlich passt diese Automatik nicht immer und es wird manuell eingegriffen. Diese manuellen Eingriffe sollen natürlich erkannt werden und Vorrang genießen.&lt;br /&gt;
===Beschreibung===&lt;br /&gt;
Der Rollladen wird in diesem Beispiel durch das Dummy du_Labor_Rollladen ersetzt. Der Wert 0 entspricht einer kompletten Öffnung, 100 ist komplett zu.&amp;lt;br&amp;gt;&lt;br /&gt;
Zur Prüfung eines manuellen Eingriffs wird die Rolladenposition im DOIF heran gezogen. Im echten Leben könnte gleichzeitig noch geprüft werden, ob z.B. die Terrassentür offen ist, denn wenn man auf der Terrasse ist und die Automatik zuschlägt ist das auch kontraproduktiv. Ebenso ist es schlecht, wenn das Fenster hinter dem geschlossenen Rollladen zum Lüften im Sommer auf ist und der Rollladen unbeaufsichtigt öffnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn nun morgens der Rollladen geöffnet wird, dann geht das DOIF auf State=cmd1 und führt die morgendliche Anweisung erst wieder aus, wenn der State ungleich cmd1 ist. Werden Abends die Rollläden nun aber manuell vor der automatischen Zeit geschlossen, würde dieser Statuswechsel nicht erfolgen und am nächsten Morgen die Automatik auch nicht funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf den ersten Blick erscheint das &#039;do always&#039; hier ein gutes Mittel zu sein. Dies kann jedoch im umgekehrten Fall stören. Werden die automatisch geschlossenen Rollläden nochmals manuell geöffnet, dann würden sie beim nächsten Event vom Twilight erneut herunter fahren. Also muss der Status vom DOIF auf einem anderen Weg geändert werden. Dazu kann als letzte Bedingung einfach ein zeitlicher Trigger (Mittags und Nachts, wenn die Automatik sozusagen die Richtung umkehrt) ohne Kommando angegeben werden. Damit geht der Status im Beispiel auf cmd4 und das DOIF ist wieder &#039;scharf&#039; für den nächsten Einsatz.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define di_Labor_Rollo_TL DOIF &lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state]&lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 &lt;br /&gt;
   and &lt;br /&gt;
     [?06:15-11:00|12345]) &lt;br /&gt;
  (set du_Labor_Rollladen 0)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state] &lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 &lt;br /&gt;
   and &lt;br /&gt;
     [?06:15-11:00|06]) &lt;br /&gt;
  (set du_Labor_Rollladen 0)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state] &lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;lt; 10 and [?15:00-22:00])&lt;br /&gt;
  (set du_Labor_Rollladen 85)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
   ([00:15] or [12:00])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define TL_Labor_Berlin Twilight 52.522297 13.413140 1 638242&lt;br /&gt;
attr TL_Labor_Berlin alias Twilight Wetter&lt;br /&gt;
attr TL_Labor_Berlin group Rollläden&lt;br /&gt;
attr TL_Labor_Berlin room DOIF_Labor&lt;br /&gt;
attr TL_Labor_Berlin sortby 4&lt;br /&gt;
attr TL_Labor_Berlin stateFormat twilight_weather%&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_auf alias Rollläden nach %-Licht auf (Mo-Fr -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_auf 40&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_WE_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf alias Rollläden nach %-Licht auf (Sa/So -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_WE_auf 50&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_zu dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_zu alias Rollläden nach %-Licht zu (Mo.-So. -&amp;gt; 0=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_zu group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_zu room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_zu setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_zu webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_zu 20&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollladen dummy&lt;br /&gt;
attr du_Labor_Rollladen alias Simmulation Rollladen&lt;br /&gt;
attr du_Labor_Rollladen group Rollläden&lt;br /&gt;
attr du_Labor_Rollladen room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollladen setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollladen stateFormat state%&lt;br /&gt;
attr du_Labor_Rollladen webCmd state&lt;br /&gt;
setstate du_Labor_Rollladen 0&lt;br /&gt;
&lt;br /&gt;
define di_Labor_Rollo_TL DOIF ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state]\&lt;br /&gt;
    and\&lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75\&lt;br /&gt;
    and\&lt;br /&gt;
     [?06:15-11:00|12345])\&lt;br /&gt;
  (set du_Labor_Rollladen 0)\&lt;br /&gt;
 DOELSEIF\&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state]\&lt;br /&gt;
    and\&lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|06])\&lt;br /&gt;
  (set du_Labor_Rollladen 0)\&lt;br /&gt;
 DOELSEIF\&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state]\&lt;br /&gt;
    and\&lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;lt; 10\&lt;br /&gt;
    and\&lt;br /&gt;
     [?15:00-22:00])\&lt;br /&gt;
  (set du_Labor_Rollladen 100)\&lt;br /&gt;
 DOELSEIF\&lt;br /&gt;
     ([00:15] or [12:00])&lt;br /&gt;
&lt;br /&gt;
attr di_Labor_Rollo_TL alias DOIF Rollläden Twilight&lt;br /&gt;
attr di_Labor_Rollo_TL group Rollläden&lt;br /&gt;
attr di_Labor_Rollo_TL room DOIF_Labor&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17461</id>
		<title>DOIF/do always Alternative am Beispiel einer Rollladenautomatik</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17461"/>
		<updated>2016-11-25T12:12:15Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Rollladen Dummy auch als Slider macht das Testen im Labor einfacher&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOIF führt die Anweisungen einer Bedingung nur 1x aus. Das kann durch Setzen des Attributes &#039;do&#039; mit dem Wert &#039;always&#039; geändert werden, doch manchmal ist eine Mix aus beiden Situationen interessant, wie dieses Beispiel zeigen soll.&lt;br /&gt;
==Rollladensteuerung mittels Twilight==&lt;br /&gt;
Die Rollläden sollen bei einstellbaren Twilight-Werten hoch, bzw. runter gefahren werden. Natürlich passt diese Automatik nicht immer und es wird manuell eingegriffen. Diese manuellen Eingriffe sollen natürlich erkannt werden und Vorrang genießen.&lt;br /&gt;
===Beschreibung===&lt;br /&gt;
Der Rollladen wird in diesem Beispiel durch das Dummy du_Labor_Rollladen ersetzt. Der Wert 0 entspricht einer kompletten Öffnung, 100 ist komplett zu.&amp;lt;br&amp;gt;&lt;br /&gt;
Zur Prüfung eines manuellen Eingriffs wird die Rolladenposition im DOIF heran gezogen. Im echten Leben könnte gleichzeitig noch geprüft werden, ob z.B. die Terrassentür offen ist, denn wenn man auf der Terrasse ist und die Automatik zuschlägt ist das auch kontraproduktiv. Ebenso ist es schlecht, wenn das Fenster hinter dem geschlossenen Rollladen zum Lüften im Sommer auf ist und der Rollladen unbeaufsichtigt öffnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn nun morgens der Rollladen geöffnet wird, dann geht das DOIF auf State=cmd1 und führt die morgendliche Anweisung erst wieder aus, wenn der State ungleich cmd1 ist. Werden Abends die Rollläden nun aber manuell vor der automatischen Zeit geschlossen, würde dieser Statuswechsel nicht erfolgen und am nächsten Morgen die Automatik auch nicht funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf den ersten Blick erscheint das &#039;do always&#039; hier ein gutes Mittel zu sein. Dies kann jedoch im umgekehrten Fall stören. Werden die automatisch geschlossenen Rollläden nochmals manuell geöffnet, dann würden sie beim nächsten Event vom Twilight erneut herunter fahren. Also muss der Status vom DOIF auf einem anderen Weg geändert werden. Dazu kann als letzte Bedingung einfach ein zeitlicher Trigger (Mittags und Nachts, wenn die Automatik sozusagen die Richtung umkehrt) ohne Kommando angegeben werden. Damit geht der Status im Beispiel auf cmd4 und das DOIF ist wieder &#039;scharf&#039; für den nächsten Einsatz.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define di_Labor_Rollo_TL DOIF &lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state]&lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 &lt;br /&gt;
   and &lt;br /&gt;
     [?06:15-11:00|12345]) &lt;br /&gt;
  (set du_Labor_Rollladen 0)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state] &lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 &lt;br /&gt;
   and &lt;br /&gt;
     [?06:15-11:00|06]) &lt;br /&gt;
  (set du_Labor_Rollladen 0)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state] &lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;lt; 10 and [?15:00-22:00])&lt;br /&gt;
  (set du_Labor_Rollladen 85)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
   ([00:15] or [12:00])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define TL_Labor_Berlin Twilight 52.522297 13.413140 1 638242&lt;br /&gt;
attr TL_Labor_Berlin alias Twilight Wetter&lt;br /&gt;
attr TL_Labor_Berlin group Rollläden&lt;br /&gt;
attr TL_Labor_Berlin room DOIF_Labor&lt;br /&gt;
attr TL_Labor_Berlin sortby 4&lt;br /&gt;
attr TL_Labor_Berlin stateFormat twilight_weather%&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_auf alias Rollläden nach %-Licht auf (Mo-Fr -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_auf 40&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_WE_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf alias Rollläden nach %-Licht auf (Sa/So -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_WE_auf 50&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_zu dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_zu alias Rollläden nach %-Licht zu (Mo.-So. -&amp;gt; 0=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_zu group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_zu room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_zu setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_zu webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_zu 20&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollladen dummy&lt;br /&gt;
attr du_Labor_Rollladen alias Simmulation Rollladen&lt;br /&gt;
attr du_Labor_Rollladen group Rollläden&lt;br /&gt;
attr du_Labor_Rollladen room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollladen setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollladen stateFormat state%&lt;br /&gt;
attr du_Labor_Rollladen webCmd state&lt;br /&gt;
setstate du_Labor_Rollladen 0&lt;br /&gt;
&lt;br /&gt;
define di_Labor_Rollo_TL DOIF ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|12345]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|06]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state] and [?du_Labor_Rollladen:state] &amp;lt; 10 and [?15:00-22:00])(set du_Labor_Rollladen 100)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([00:15] or [12:00])&lt;br /&gt;
&lt;br /&gt;
attr di_Labor_Rollo_TL alias DOIF Rollläden Twilight&lt;br /&gt;
attr di_Labor_Rollo_TL group Rollläden&lt;br /&gt;
attr di_Labor_Rollo_TL room DOIF_Labor&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17460</id>
		<title>DOIF/do always Alternative am Beispiel einer Rollladenautomatik</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17460"/>
		<updated>2016-11-25T08:36:08Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Halbsatz ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOIF führt die Anweisungen einer Bedingung nur 1x aus. Das kann durch Setzen des Attributes &#039;do&#039; mit dem Wert &#039;always&#039; geändert werden, doch manchmal ist eine Mix aus beiden Situationen interessant, wie dieses Beispiel zeigen soll.&lt;br /&gt;
==Rollladensteuerung mittels Twilight==&lt;br /&gt;
Die Rollläden sollen bei einstellbaren Twilight-Werten hoch, bzw. runter gefahren werden. Natürlich passt diese Automatik nicht immer und es wird manuell eingegriffen. Diese manuellen Eingriffe sollen natürlich erkannt werden und Vorrang genießen.&lt;br /&gt;
===Beschreibung===&lt;br /&gt;
Der Rollladen wird in diesem Beispiel durch das Dummy du_Labor_Rollladen ersetzt. Der Wert 0 entspricht einer kompletten Öffnung, 100 ist komplett zu.&amp;lt;br&amp;gt;&lt;br /&gt;
Zur Prüfung eines manuellen Eingriffs wird die Rolladenposition im DOIF heran gezogen. Im echten Leben könnte gleichzeitig noch geprüft werden, ob z.B. die Terrassentür offen ist, denn wenn man auf der Terrasse ist und die Automatik zuschlägt ist das auch kontraproduktiv. Ebenso ist es schlecht, wenn das Fenster hinter dem geschlossenen Rollladen zum Lüften im Sommer auf ist und der Rollladen unbeaufsichtigt öffnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn nun morgens der Rollladen geöffnet wird, dann geht das DOIF auf State=cmd1 und führt die morgendliche Anweisung erst wieder aus, wenn der State ungleich cmd1 ist. Werden Abends die Rollläden nun aber manuell vor der automatischen Zeit geschlossen, würde dieser Statuswechsel nicht erfolgen und am nächsten Morgen die Automatik auch nicht funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf den ersten Blick erscheint das &#039;do always&#039; hier ein gutes Mittel zu sein. Dies kann jedoch im umgekehrten Fall stören. Werden die automatisch geschlossenen Rollläden nochmals manuell geöffnet, dann würden sie beim nächsten Event vom Twilight erneut herunter fahren. Also muss der Status vom DOIF auf einem anderen Weg geändert werden. Dazu kann als letzte Bedingung einfach ein zeitlicher Trigger (Mittags und Nachts, wenn die Automatik sozusagen die Richtung umkehrt) ohne Kommando angegeben werden. Damit geht der Status im Beispiel auf cmd4 und das DOIF ist wieder &#039;scharf&#039; für den nächsten Einsatz.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define di_Labor_Rollo_TL DOIF &lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state]&lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 &lt;br /&gt;
   and &lt;br /&gt;
     [?06:15-11:00|12345]) &lt;br /&gt;
  (set du_Labor_Rollladen 0)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state] &lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 &lt;br /&gt;
   and &lt;br /&gt;
     [?06:15-11:00|06]) &lt;br /&gt;
  (set du_Labor_Rollladen 0)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state] &lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;lt; 10 and [?15:00-22:00])&lt;br /&gt;
  (set du_Labor_Rollladen 85)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
   ([00:15] or [12:00])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define TL_Labor_Berlin Twilight 52.522297 13.413140 1 638242&lt;br /&gt;
attr TL_Labor_Berlin alias Twilight Wetter&lt;br /&gt;
attr TL_Labor_Berlin group Rollläden&lt;br /&gt;
attr TL_Labor_Berlin room DOIF_Labor&lt;br /&gt;
attr TL_Labor_Berlin sortby 4&lt;br /&gt;
attr TL_Labor_Berlin stateFormat twilight_weather%&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_auf alias Rollläden nach %-Licht auf (Mo-Fr -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_auf 40&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_WE_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf alias Rollläden nach %-Licht auf (Sa/So -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_WE_auf 50&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_zu dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_zu alias Rollläden nach %-Licht zu (Mo.-So. -&amp;gt; 0=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_zu group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_zu room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_zu setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_zu webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_zu 20&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollladen dummy&lt;br /&gt;
attr du_Labor_Rollladen alias Simmulation Rollladen&lt;br /&gt;
attr du_Labor_Rollladen group Rollläden&lt;br /&gt;
attr du_Labor_Rollladen room DOIF_Labor&lt;br /&gt;
setstate du_Labor_Rollladen 0&lt;br /&gt;
&lt;br /&gt;
define di_Labor_Rollo_TL DOIF ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|12345]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|06]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state] and [?du_Labor_Rollladen:state] &amp;lt; 10 and [?15:00-22:00])(set du_Labor_Rollladen 100)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([00:15] or [12:00])&lt;br /&gt;
&lt;br /&gt;
attr di_Labor_Rollo_TL alias DOIF Rollläden Twilight&lt;br /&gt;
attr di_Labor_Rollo_TL group Rollläden&lt;br /&gt;
attr di_Labor_Rollo_TL room DOIF_Labor&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17459</id>
		<title>DOIF/do always Alternative am Beispiel einer Rollladenautomatik</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17459"/>
		<updated>2016-11-25T08:33:50Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Rechtschreibfehler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOIF führt die Anweisungen einer Bedingung nur 1x aus. Das kann durch Setzen des Attributes &#039;do&#039; mit dem Wert &#039;always&#039; geändert werden, doch manchmal ist eine Mix aus beiden Situationen interessant, wie dieses Beispiel zeigen soll.&lt;br /&gt;
==Rollladensteuerung mittels Twilight==&lt;br /&gt;
Die Rollläden sollen bei einstellbaren Twilight-Werten hoch, bzw. runter gefahren werden. Natürlich passt diese Automatik nicht immer und es wird manuell eingegriffen. Diese manuellen Eingriffe sollen natürlich erkannt werden und Vorrang genießen.&lt;br /&gt;
===Beschreibung===&lt;br /&gt;
Der Rollladen wird in diesem Beispiel durch das Dummy du_Labor_Rollladen ersetzt. Der Wert 0 entspricht einer kompletten Öffnung, 100 ist komplett zu.&amp;lt;br&amp;gt;&lt;br /&gt;
Zur Prüfung eines manuellen Eingriffs wird die Rolladenposition im DOIF heran gezogen. Im echten Leben könnte gleichzeitig noch geprüft werden, ob z.B. die Terrassentür offen ist, denn wenn man auf der Terrasse ist und die Automatik zuschlägt ist das auch kontraproduktiv. Ebenso ist es schlecht, wenn das Fenster hinter dem geschlossenen Rollladen zum Lüften im Sommer auf ist und der Rollladen unbeaufsichtigt öffnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn nun morgens der Rollladen geöffnet wird, dann geht das DOIF auf State=cmd1 und führt die morgendliche Anweisung erst wieder aus, wenn der State ungleich cmd1 ist. Werden Abends die Rollläden nun aber manuell vor der automatischen Zeit geschlossen, würde dieser Statuswechsel nicht erfolgen und am nächsten Morgen die Automatik auch nicht funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf den ersten Blick erscheint das &#039;do always&#039; hier ein gutes Mittel zu sein. Dies kann jedoch im umgekehrten Fall stören. Werden die automatisch geschlossenen Rollläden nochmals manuell geöffnet, dann würden sie beim nächsten Event vom Twilight erneut herunter fahren. Also muss der Status vom DOIF auf einem anderen Weg geändert werden. Dazu kann als letzte Bedingung einfach ein zeitlicher Trigger (Mittags und Nachts, wenn die Automatik sozusagen die Richtung umkehrt) ohne Kommando angegeben. Damit geht der Status im Beispiel auf cmd4 und das DOIF ist wieder &#039;scharf&#039; für den nächsten Einsatz.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define di_Labor_Rollo_TL DOIF &lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state]&lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 &lt;br /&gt;
   and &lt;br /&gt;
     [?06:15-11:00|12345]) &lt;br /&gt;
  (set du_Labor_Rollladen 0)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state] &lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 &lt;br /&gt;
   and &lt;br /&gt;
     [?06:15-11:00|06]) &lt;br /&gt;
  (set du_Labor_Rollladen 0)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state] &lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;lt; 10 and [?15:00-22:00])&lt;br /&gt;
  (set du_Labor_Rollladen 85)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
   ([00:15] or [12:00])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define TL_Labor_Berlin Twilight 52.522297 13.413140 1 638242&lt;br /&gt;
attr TL_Labor_Berlin alias Twilight Wetter&lt;br /&gt;
attr TL_Labor_Berlin group Rollläden&lt;br /&gt;
attr TL_Labor_Berlin room DOIF_Labor&lt;br /&gt;
attr TL_Labor_Berlin sortby 4&lt;br /&gt;
attr TL_Labor_Berlin stateFormat twilight_weather%&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_auf alias Rollläden nach %-Licht auf (Mo-Fr -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_auf 40&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_WE_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf alias Rollläden nach %-Licht auf (Sa/So -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_WE_auf 50&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_zu dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_zu alias Rollläden nach %-Licht zu (Mo.-So. -&amp;gt; 0=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_zu group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_zu room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_zu setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_zu webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_zu 20&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollladen dummy&lt;br /&gt;
attr du_Labor_Rollladen alias Simmulation Rollladen&lt;br /&gt;
attr du_Labor_Rollladen group Rollläden&lt;br /&gt;
attr du_Labor_Rollladen room DOIF_Labor&lt;br /&gt;
setstate du_Labor_Rollladen 0&lt;br /&gt;
&lt;br /&gt;
define di_Labor_Rollo_TL DOIF ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|12345]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|06]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state] and [?du_Labor_Rollladen:state] &amp;lt; 10 and [?15:00-22:00])(set du_Labor_Rollladen 100)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([00:15] or [12:00])&lt;br /&gt;
&lt;br /&gt;
attr di_Labor_Rollo_TL alias DOIF Rollläden Twilight&lt;br /&gt;
attr di_Labor_Rollo_TL group Rollläden&lt;br /&gt;
attr di_Labor_Rollo_TL room DOIF_Labor&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17458</id>
		<title>DOIF/do always Alternative am Beispiel einer Rollladenautomatik</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17458"/>
		<updated>2016-11-25T08:24:38Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Umbrüche zur besseren Lesbarkeit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOIF führt die Anweisungen einer Bedingung nur 1x aus. Das kann durch Setzen des Attributes &#039;do&#039; mit dem Wert &#039;always&#039; geändert werden, doch manchmal ist eine Mix aus beiden Situationen interessant, wie dieses Beispiel zeigen soll.&lt;br /&gt;
==Rollladensteuerung mittels Twilight==&lt;br /&gt;
Die Rollläden sollen bei einstellbaren Twilight-Werten hoch, bzw. runter gefahren werden. Natürlich passt diese Automatik nicht immer und es wird manuell eingegriffen. Diese manuellen Eingriffe sollen natülich erkannt werden und Vorrang genießen.&lt;br /&gt;
===Beschreibung===&lt;br /&gt;
Der Rollladen wird in diesem Beispiel durch das Dummy du_Labor_Rollladen ersetzt. Der Wert 0 entspricht einer kompletten Öffnung, 100 ist komplett zu.&amp;lt;br&amp;gt;&lt;br /&gt;
Zur Prüfung eines manuellen Eingriffs wird die Rolladenposition im DOIF heran gezogen. Im echten Leben könnte gleichzeitig noch geprüft werden, ob z.B. die Terrassentür offen ist, denn wenn man auf der Terrasse ist und die Automatik zuschlägt ist das auch kontraproduktiv. Ebenso ist es schlecht, wenn das Fenster hinter dem geschlossenen Rollladen zum Lüften im Sommer auf ist und der Rollladen unbeaufsichtigt öffnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn nun morgens der Rollladen geöffnet wird, dann geht das DOIF auf State=cmd1 und führt die morgendliche Anweisung erst wieder aus, wenn der State ungleich cmd1 ist. Werden Abends die Rollläden nun aber manuell vor der automatischen Zeit geschlossen, würde dieser Statuswechsel nicht erfolgen und am nächsten Morgen die Automatik auch nicht funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf den ersten Blick erscheint das &#039;do always&#039; hier ein gutes Mittel zu sein. Dies kann jedoch im umgekehrten Fall stören. Werden die automatisch geschlossenen Rollläden nochmals manuell geöffnet, dann würden sie beim nächsten Event vom Twilight erneut herunter fahren. Also muss der Status vom DOIF auf einem anderen Weg geändert werden. Dazu kann als letzte Bedingung einfach ein zeitlicher Trigger (Mittags und Nachts, wenn die Automatik sozusagen die Richtung umkehrt) ohne Kommando angegeben. Damit geht der Status im Beispiel auf cmd4 und das DOIF ist wieder &#039;scharf&#039; für den nächsten Einsatz.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define di_Labor_Rollo_TL DOIF &lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state]&lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 &lt;br /&gt;
   and &lt;br /&gt;
     [?06:15-11:00|12345]) &lt;br /&gt;
  (set du_Labor_Rollladen 0)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state] &lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;gt; 75 &lt;br /&gt;
   and &lt;br /&gt;
     [?06:15-11:00|06]) &lt;br /&gt;
  (set du_Labor_Rollladen 0)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
     ([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state] &lt;br /&gt;
   and &lt;br /&gt;
     [?du_Labor_Rollladen:state] &amp;lt; 10 and [?15:00-22:00])&lt;br /&gt;
  (set du_Labor_Rollladen 85)&lt;br /&gt;
 DOELSEIF&lt;br /&gt;
   ([00:15] or [12:00])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define TL_Labor_Berlin Twilight 52.522297 13.413140 1 638242&lt;br /&gt;
attr TL_Labor_Berlin alias Twilight Wetter&lt;br /&gt;
attr TL_Labor_Berlin group Rollläden&lt;br /&gt;
attr TL_Labor_Berlin room DOIF_Labor&lt;br /&gt;
attr TL_Labor_Berlin sortby 4&lt;br /&gt;
attr TL_Labor_Berlin stateFormat twilight_weather%&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_auf alias Rollläden nach %-Licht auf (Mo-Fr -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_auf 40&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_WE_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf alias Rollläden nach %-Licht auf (Sa/So -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_WE_auf 50&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_zu dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_zu alias Rollläden nach %-Licht zu (Mo.-So. -&amp;gt; 0=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_zu group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_zu room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_zu setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_zu webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_zu 20&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollladen dummy&lt;br /&gt;
attr du_Labor_Rollladen alias Simmulation Rollladen&lt;br /&gt;
attr du_Labor_Rollladen group Rollläden&lt;br /&gt;
attr du_Labor_Rollladen room DOIF_Labor&lt;br /&gt;
setstate du_Labor_Rollladen 0&lt;br /&gt;
&lt;br /&gt;
define di_Labor_Rollo_TL DOIF ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|12345]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|06]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state] and [?du_Labor_Rollladen:state] &amp;lt; 10 and [?15:00-22:00])(set du_Labor_Rollladen 100)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([00:15] or [12:00])&lt;br /&gt;
&lt;br /&gt;
attr di_Labor_Rollo_TL alias DOIF Rollläden Twilight&lt;br /&gt;
attr di_Labor_Rollo_TL group Rollläden&lt;br /&gt;
attr di_Labor_Rollo_TL room DOIF_Labor&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17457</id>
		<title>DOIF/do always Alternative am Beispiel einer Rollladenautomatik</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17457"/>
		<updated>2016-11-25T08:08:01Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Rechtschreibung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOIF führt die Anweisungen einer Bedingung nur 1x aus. Das kann durch Setzen des Attributes &#039;do&#039; mit dem Wert &#039;always&#039; geändert werden, doch manchmal ist eine Mix aus beiden Situationen interessant, wie dieses Beispiel zeigen soll.&lt;br /&gt;
==Rollladensteuerung mittels Twilight==&lt;br /&gt;
Die Rollläden sollen bei einstellbaren Twilight-Werten hoch, bzw. runter gefahren werden. Natürlich passt diese Automatik nicht immer und es wird manuell eingegriffen. Diese manuellen Eingriffe sollen natülich erkannt werden und Vorrang genießen.&lt;br /&gt;
===Beschreibung===&lt;br /&gt;
Der Rollladen wird in diesem Beispiel durch das Dummy du_Labor_Rollladen ersetzt. Der Wert 0 entspricht einer kompletten Öffnung, 100 ist komplett zu.&amp;lt;br&amp;gt;&lt;br /&gt;
Zur Prüfung eines manuellen Eingriffs wird die Rolladenposition im DOIF heran gezogen. Im echten Leben könnte gleichzeitig noch geprüft werden, ob z.B. die Terrassentür offen ist, denn wenn man auf der Terrasse ist und die Automatik zuschlägt ist das auch kontraproduktiv. Ebenso ist es schlecht, wenn das Fenster hinter dem geschlossenen Rollladen zum Lüften im Sommer auf ist und der Rollladen unbeaufsichtigt öffnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn nun morgens der Rollladen geöffnet wird, dann geht das DOIF auf State=cmd1 und führt die morgendliche Anweisung erst wieder aus, wenn der State ungleich cmd1 ist. Werden Abends die Rollläden nun aber manuell vor der automatischen Zeit geschlossen, würde dieser Statuswechsel nicht erfolgen und am nächsten Morgen die Automatik auch nicht funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf den ersten Blick erscheint das &#039;do always&#039; hier ein gutes Mittel zu sein. Dies kann jedoch im umgekehrten Fall stören. Werden die automatisch geschlossenen Rollläden nochmals manuell geöffnet, dann würden sie beim nächsten Event vom Twilight erneut herunter fahren. Also muss der Status vom DOIF auf einem anderen Weg geändert werden. Dazu kann als letzte Bedingung einfach ein zeitlicher Trigger (Mittags und Nachts, wenn die Automatik sozusagen die Richtung umkehrt) ohne Kommando angegeben. Damit geht der Status im Beispiel auf cmd4 und das DOIF ist wieder &#039;scharf&#039; für den nächsten Einsatz.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define di_Labor_Rollo_TL DOIF ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|12345]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|06]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state] and [?du_Labor_Rollladen:state] &amp;lt; 10 and [?15:00-22:00])(set du_Labor_Rollladen 85)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([00:15] or [12:00])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define TL_Labor_Berlin Twilight 52.522297 13.413140 1 638242&lt;br /&gt;
attr TL_Labor_Berlin alias Twilight Wetter&lt;br /&gt;
attr TL_Labor_Berlin group Rollläden&lt;br /&gt;
attr TL_Labor_Berlin room DOIF_Labor&lt;br /&gt;
attr TL_Labor_Berlin sortby 4&lt;br /&gt;
attr TL_Labor_Berlin stateFormat twilight_weather%&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_auf alias Rollläden nach %-Licht auf (Mo-Fr -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_auf 40&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_WE_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf alias Rollläden nach %-Licht auf (Sa/So -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_WE_auf 50&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_zu dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_zu alias Rollläden nach %-Licht zu (Mo.-So. -&amp;gt; 0=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_zu group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_zu room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_zu setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_zu webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_zu 20&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollladen dummy&lt;br /&gt;
attr du_Labor_Rollladen alias Simmulation Rollladen&lt;br /&gt;
attr du_Labor_Rollladen group Rollläden&lt;br /&gt;
attr du_Labor_Rollladen room DOIF_Labor&lt;br /&gt;
setstate du_Labor_Rollladen 0&lt;br /&gt;
&lt;br /&gt;
define di_Labor_Rollo_TL DOIF ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|12345]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|06]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state] and [?du_Labor_Rollladen:state] &amp;lt; 10 and [?15:00-22:00])(set du_Labor_Rollladen 100)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([00:15] or [12:00])&lt;br /&gt;
&lt;br /&gt;
attr di_Labor_Rollo_TL alias DOIF Rollläden Twilight&lt;br /&gt;
attr di_Labor_Rollo_TL group Rollläden&lt;br /&gt;
attr di_Labor_Rollo_TL room DOIF_Labor&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF&amp;diff=17456</id>
		<title>DOIF</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF&amp;diff=17456"/>
		<updated>2016-11-25T08:07:19Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Link zu Beispiel Rollladen ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Do ... if ... &lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModForumArea=Automatisierung/DOIF&lt;br /&gt;
|ModTechName=98_DOIF.pm&lt;br /&gt;
|ModOwner=Damian}}&lt;br /&gt;
&lt;br /&gt;
[[DOIF]] ist ein universelles Modul, welches sowohl ereignis- als auch zeitgesteuert arbeitet. Es vereinigt die Funktionalität eines [[notify]]-, [[at]]-, [[watchdog]]-Befehls in Kombination mit logischen Abfragen unter einem Dach. Damit können insb. komplexere Problemstellungen innerhalb eines DOIF-Moduls gelöst werden, die sonst nur mit Hilfe einzelner Module an mehreren Stellen in FHEM vorgenommen werden müssten. Es ermöglicht, Aktionen (&amp;quot;do&amp;quot;) unter bestimmten Bedingungen (&amp;quot;if&amp;quot;) auszuführen. Bedingungen umfasst auch Konstrukte wie &amp;quot;wenn Zustand x für y Minuten... (Zeitsteuerung)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
keine &lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe Commandref [http://fhem.de/commandref_DE.html#DOIF Define]&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe Commandref [http://fhem.de/commandref_DE.html#DOIF_Attribute Attribute]&lt;br /&gt;
&lt;br /&gt;
===Kurzreferenz===&lt;br /&gt;
Siehe Commandref [http://fhem.de/commandref_DE.html#DOIF_Kurzreferenz Kurzreferenz]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
Der Modulautor hat im  deutschen Teil der [http://fhem.de/commandref_DE.html#DOIF Commandref]  eine Vielzahl von einfachen und auch komplexeren Beispielen zur Nutzung von DOIF aufgenommen. Darum wird hier auf weitere Beispiele zu DOIF verzichtet. Ausführliche Code-Beispiele zu DOIF bitte gegebenenfalls als eigene Wiki-Seite unter [[:Kategorie:Code Snippets|Code Snippets]] aufnehmen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[DOIF/Tools und Fehlersuche]]&lt;br /&gt;
* [[DOIF/Tipps zur leichteren Bedienung]] Erstellung, Bearbeitung, Syntaxhervorhebung, Klammerprüfung, Suchen&amp;amp;Ersetzen, uvm. (nicht nur) von DOIF&lt;br /&gt;
* [[DOIF/Labor - ausführbare, praxisnahe Beispiele als Problemlösung zum Experimetieren]]&lt;br /&gt;
* [[DOIF/Import von Code Snippets]]&lt;br /&gt;
* [[DOIF/Operatorenrangfolge]]&lt;br /&gt;
* [[DOIF/Ein- und Ausgabe in FHEMWEB und Tablet-UI am Beispiel einer Schaltuhr]]&lt;br /&gt;
* [[DOIF/Mehrfachnutzung eines Tasters]]&lt;br /&gt;
* [[DOIF/Zeitgeber]] Wecker, Kurzzeitwecker, Tageszeitgeber&lt;br /&gt;
* [[DOIF/Zeitspanne zwischen zwei Terminen schalten]]&lt;br /&gt;
* [[DOIF/do always Alternative am Beispiel einer Rollladenautomatik]]&lt;br /&gt;
&lt;br /&gt;
===Entwicklungshistorie===&lt;br /&gt;
* {{Link2Forum|Topic=58556|LinkText=Forenthread}} neue Features: Ereignisfilter, Attribut checkall, setList, readingList&lt;br /&gt;
* {{Link2Forum|Topic=56851|LinkText=Forenthread}} Stati, Readings in Zeitfunktionen, set enable&lt;br /&gt;
* {{Link2Forum|Topic=55785|LinkText=Forenthread}} neue Features: disablecondition, Stati bei Zeitfunktionen (Anm.: disablecondition nicht eingeführt)&lt;br /&gt;
* {{Link2Forum|Topic=51117|LinkText=Forenthread}} Möglichkeit auf passende Events zu beschränken&lt;br /&gt;
* {{Link2Forum|Topic=51060|LinkText=Forenthread}} Neue Features - $SELF, $self, cmd-Reading, timerevent, selftrigger ...&lt;br /&gt;
* {{Link2Forum|Topic=49109|LinkText=Forenthread}} DOIF als endlicher Automat (finite state maschine)&lt;br /&gt;
* {{Link2Forum|Topic=48925|LinkText=Forenthread}} serialisierte Timer&lt;br /&gt;
* {{Link2Forum|Topic=46327|LinkText=Forenthread}} neue Features: Generalisierung, $DEVICE, $EVENT, Attribut notexist&lt;br /&gt;
* {{Link2Forum|Topic=43638|LinkText=Forenthread}} Attribut repeatcmd&lt;br /&gt;
* {{Link2Forum|Topic=41859|LinkText=Forenthread}} unabsichtliche Loops unterbunden&lt;br /&gt;
* {{Link2Forum|Topic=39070|LinkText=Forenthread}} wait als sleep Alternative&lt;br /&gt;
* {{Link2Forum|Topic=36889|LinkText=Forenthread}} mehrere DOIF-Zweige (Anm.: nicht eingeführt)&lt;br /&gt;
* {{Link2Forum|Topic=35638|LinkText=Forenthread}} neue Zeit-Features&lt;br /&gt;
* {{Link2Forum|Topic=35045|LinkText=Forenthread}} Zeitraster&lt;br /&gt;
* {{Link2Forum|Topic=34767|LinkText=Forenthread}} indirekten Zeitangaben, readingFnAttributes&lt;br /&gt;
* {{Link2Forum|Topic=34365|LinkText=Forenthread}} indirekten Zeitangaben&lt;br /&gt;
* {{Link2Forum|Topic=30847|LinkText=Forenthread}} relative Zeitangaben, Attribute: do resetwait, cmdpause, repeatsame, uvm.&lt;br /&gt;
* {{Link2Forum|Topic=23833|LinkText=Forenthread}} zur Entstehung dieses Moduls&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- (Modulkategorie wird automatisch gesetzt) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17455</id>
		<title>DOIF/do always Alternative am Beispiel einer Rollladenautomatik</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DOIF/do_always_Alternative_am_Beispiel_einer_Rollladenautomatik&amp;diff=17455"/>
		<updated>2016-11-25T08:04:40Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Die Seite wurde neu angelegt: „DOIF führt die Anweisungen einer Bedingung nur 1x aus. Das kann durch Setzen des Attributes &amp;#039;do&amp;#039; mit dem Wert &amp;#039;always&amp;#039; geeändert werden, doch manchmal ist ei…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DOIF führt die Anweisungen einer Bedingung nur 1x aus. Das kann durch Setzen des Attributes &#039;do&#039; mit dem Wert &#039;always&#039; geeändert werden, doch manchmal ist eine Mix aus beiden Situationen interessant, wie dieses Beispiel zeigen soll.&lt;br /&gt;
==Rollladensteuerung mittels Twilight==&lt;br /&gt;
Die Rollläden sollen bei einstellbaren Twilight-Werten hoch, bzw. runter gefahren werden. Natürlich passt diese Automatik nicht immer und es wird manuell eingegriffen. Diese manuellen Eingriffe sollen natülich erkannt werden und Vorrang genießen.&lt;br /&gt;
===Beschreibung===&lt;br /&gt;
Der Rollladen wird in diesem Beispiel durch das Dummy du_Labor_Rollladen ersetzt. Der Wert 0 entspricht einer kompletten Öffnung, 100 ist komplett zu.&amp;lt;br&amp;gt;&lt;br /&gt;
Zur Prüfung eines manuellen Eingriffs wird die Rolladenposition im DOIF heran gezogen. Im echten Leben könnte gleichzeitig noch geprüft werden, ob z.B. die Terrassentür offen ist, denn wenn man auf der Terrasse ist und die Automatik zuschlägt ist das auch kontraproduktiv. Ebenso ist es schlecht, wenn das Fenster hinter dem geschlossenen Rollladen zum Lüften im Sommer auf ist und der Rollladen unbeaufsichtigt öffnet.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn nun morgens der Rollladen geöffnet wird, dann geht das DOIF auf State=cmd1 und führt die morgendliche Anweisung erst wieder aus, wenn der State ungleich cmd1 ist. Werden Abends die Rollläden nun aber manuell vor der automatischen Zeit geschlossen, würde dieser Statuswechsel nicht erfolgen und am nächsten Morgen die Automatik auch nicht funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf den ersten Blick erscheint das &#039;do always&#039; hier ein gutes Mittel zu sein. Dies kann jedoch im umgekehrten Fall stören. Werden die automatisch geschlossenen Rollläden nochmals manuell geöffnet, dann würden sie beim nächsten Event vom Twilight erneut herunter fahren. Also muss der Status vom DOIF auf einem anderen Weg geändert werden. Dazu kann als letzte Bedingung einfach ein zeitlicher Trigger (Mittags und Nachts, wenn die Automatik sozusagen die Richtung umkehrt) ohne Kommando angegeben. Damit geht der Status im Beispiel auf cmd4 und das DOIF ist wieder &#039;scharf&#039; für den nächsten Einsatz.&lt;br /&gt;
&lt;br /&gt;
===Definition===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define di_Labor_Rollo_TL DOIF ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|12345]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|06]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state] and [?du_Labor_Rollladen:state] &amp;lt; 10 and [?15:00-22:00])(set du_Labor_Rollladen 85)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([00:15] or [12:00])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define TL_Labor_Berlin Twilight 52.522297 13.413140 1 638242&lt;br /&gt;
attr TL_Labor_Berlin alias Twilight Wetter&lt;br /&gt;
attr TL_Labor_Berlin group Rollläden&lt;br /&gt;
attr TL_Labor_Berlin room DOIF_Labor&lt;br /&gt;
attr TL_Labor_Berlin sortby 4&lt;br /&gt;
attr TL_Labor_Berlin stateFormat twilight_weather%&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_auf alias Rollläden nach %-Licht auf (Mo-Fr -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_auf 40&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_WE_auf dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf alias Rollläden nach %-Licht auf (Sa/So -&amp;gt; 100=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_WE_auf webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_WE_auf 50&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollo_TL_zu dummy&lt;br /&gt;
attr du_Labor_Rollo_TL_zu alias Rollläden nach %-Licht zu (Mo.-So. -&amp;gt; 0=aus)&lt;br /&gt;
attr du_Labor_Rollo_TL_zu group Rollläden&lt;br /&gt;
attr du_Labor_Rollo_TL_zu room DOIF_Labor&lt;br /&gt;
attr du_Labor_Rollo_TL_zu setList state:slider,0,1,100&lt;br /&gt;
attr du_Labor_Rollo_TL_zu webCmd state&lt;br /&gt;
setstate du_Labor_Rollo_TL_zu 20&lt;br /&gt;
&lt;br /&gt;
define du_Labor_Rollladen dummy&lt;br /&gt;
attr du_Labor_Rollladen alias Simmulation Rollladen&lt;br /&gt;
attr du_Labor_Rollladen group Rollläden&lt;br /&gt;
attr du_Labor_Rollladen room DOIF_Labor&lt;br /&gt;
setstate du_Labor_Rollladen 0&lt;br /&gt;
&lt;br /&gt;
define di_Labor_Rollo_TL DOIF ([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|12345]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;gt; [?du_Labor_Rollo_TL_WE_auf:state] and [?du_Labor_Rollladen:state] &amp;gt; 75 and [?06:15-11:00|06]) (set du_Labor_Rollladen 0)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([TL_Labor_Berlin:twilight_weather] &amp;lt; [?du_Labor_Rollo_TL_zu:state] and [?du_Labor_Rollladen:state] &amp;lt; 10 and [?15:00-22:00])(set du_Labor_Rollladen 100)&lt;br /&gt;
DOELSEIF&lt;br /&gt;
([00:15] or [12:00])&lt;br /&gt;
&lt;br /&gt;
attr di_Labor_Rollo_TL alias DOIF Rollläden Twilight&lt;br /&gt;
attr di_Labor_Rollo_TL group Rollläden&lt;br /&gt;
attr di_Labor_Rollo_TL room DOIF_Labor&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PB-FM_Schaltaktor_mit_Tasteraufsatz_1fach&amp;diff=16379</id>
		<title>HM-LC-Sw1PB-FM Schaltaktor mit Tasteraufsatz 1fach</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PB-FM_Schaltaktor_mit_Tasteraufsatz_1fach&amp;diff=16379"/>
		<updated>2016-09-15T09:32:13Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Problemehandling ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Funk-Schaltaktor mit Tasteraufsatz 1fach Unterputz&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
Wandtaster im Peha Aura Gehäuse, mit Unterputz Funk-Schaltaktor , der in eine typische Installationsdose passt. Dadurch Austausch eines Wandschalters beim Erhalt der lokalen Schaltfunktion und gleichzeitiger Fernsteuerbarkeit.&lt;br /&gt;
&lt;br /&gt;
= Hinweise zur Hardware-Installation =&lt;br /&gt;
&lt;br /&gt;
Der Taster Ersetzt einen bisherigen Schalter komplett und kombiniert die Funktion eines Unterputzaktors mit dem notwendigen Taster, sodass nicht erst passende Taster gesucht werden müssen. Der Taster selber baut sehr flach, sodass der Aktor mit Taster meist besser in vorhandene Unterputzdosen passt als normale Taster mit einem seperaten Unterputztaktor wie z.b. dem [[HM-LC-SW1-FM]]. Allerdings ist der HM-LC-Sw1PB-FM auch vergleichsweise teuer.&lt;br /&gt;
&lt;br /&gt;
= Hinweise zum Betrieb mit FHEM =&lt;br /&gt;
&lt;br /&gt;
Problemlos verwendbar. Das [[Pairing (HomeMatic)|Pairing]] sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
= Probleme =&lt;br /&gt;
Wenn das Pairing nicht komplett durchläuft (Device zeigt als Status MissingACK und kann nicht von FHEM aus gesteuert werden), dann hilft ggf. ein weiteres Pairing über hmPairSerial.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
&lt;br /&gt;
Anleitung [http://www.elv-downloads.de/Assets/Produkte/8/855/85522/Downloads/85522_HM_LC_Sw1PB_FM_UM.pdf] PDF&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LC-SW1-FM_Schaltaktor_1-fach_UP&amp;diff=16378</id>
		<title>HM-LC-SW1-FM Schaltaktor 1-fach UP</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LC-SW1-FM_Schaltaktor_1-fach_UP&amp;diff=16378"/>
		<updated>2016-09-15T09:29:23Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Probleme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homematic Funk-Schaltaktor 1-fach (Unterputz)&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
Schalten eines angeschlossenen Verbrauchers mittels [[CUL]]/[[CUN]]/[[HMLAN Konfigurator]] und über einen mechanischen spannungsfesten Taster. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technische Daten:&#039;&#039;&#039;&lt;br /&gt;
* Schaltvermögen: 16A bei 230V/50Hz (ohmsche Last) &lt;br /&gt;
* Relais: 1x Schließer&lt;br /&gt;
* Standby Verbrauch: 0,5W&lt;br /&gt;
* Maße(BxHxT): 53x53x30mm&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Hardware-Installation ==&lt;br /&gt;
&lt;br /&gt;
Will man die Funk-Schaltaktoren auch manuell betreiben, d.h. man upgradet eine vorhandene Elektroinstallation, so sind Taster notwendig. Schalter können notfalls mittels einer zusätzlichen Feder zu Taster umgebaut werden, Tastschalter sind leider nicht geeignet. Schalter und Tastschalter führen dazu, dass der Aktor nach Betätigung des Schalters in den Anlernmodus versetzt wird und auch in diesem verbleibt.&lt;br /&gt;
&lt;br /&gt;
Je nach vorhandenen Schalterdosen empfiehlt es sich bestehende Schalterdosen nach hinten auszuweiten, d.h. die Abdeckung nach hinten heraus zu brechen, da die Aktoren und Kabel nicht gerade sparsam mit dem Platz umgehen. Alternativ könnte man den Aktor auch in eine zusätzliche Schalterdosen unterbringen und diese mit einem Federdeckel abschließen. Dies hat den Vorteil, dass man auch durch relativ dicke Tapete die LED und somit den Zustand des Aktors ablesen kann.&lt;br /&gt;
&lt;br /&gt;
Der Aktor kann auch gänzlich ohne Taster, also nur per &#039;&#039;set&#039;&#039;-Befehlen durch Fhem oder per gepeerten Geräten gesteuert werden, jedoch muss zumindest für das Anlernen zeitweise ein Taster angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das [[Pairing (HomeMatic)|Pairing]] sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden. Hierfür wird ein am Aktor temporär angeschlossener spannungsfester Taster zwingend benötigt.&lt;br /&gt;
&lt;br /&gt;
# Sicherstellen, dass &#039;&#039;autocreate&#039;&#039; aktiv ist&lt;br /&gt;
# Am CUL/HMLAN o.ä. &amp;lt;code&amp;gt;set HMLAN hmPairForSec 60&amp;lt;/code&amp;gt;&lt;br /&gt;
# Binnen 60 Sekunden Aktor in Anlernmodus bringen (Taster 4s festhalten bis LED blinkt) -&amp;gt; Device wird in fhem angelegt, z.B. als CUL_HM_HM_LC_SW1_FM_2BAD45&lt;br /&gt;
# &amp;lt;code&amp;gt;rename &amp;lt;Aktor&amp;gt; &amp;lt;AktorNameNeu&amp;gt;&amp;lt;/code&amp;gt; -&amp;gt; richtigen Namen zuordnen&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
&lt;br /&gt;
Ein exemplarischer Auszug aus der fhem.cfg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LichtTerasse CUL_HM 17AEA6&lt;br /&gt;
attr LichtTerasse devInfo 010100&lt;br /&gt;
attr LichtTerasse firmware 1.9&lt;br /&gt;
attr LichtTerasse hmClass receiver&lt;br /&gt;
attr LichtTerasse model HM-LC-SW1-FM&lt;br /&gt;
attr LichtTerasse room Terasse&lt;br /&gt;
attr LichtTerasse serialNr IEQ00xxxx&lt;br /&gt;
attr LichtTerasse subType switch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mögliche Schaltoperationen ===&lt;br /&gt;
&lt;br /&gt;
Der Aktor versteht folgende Aktionen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set &amp;lt;name&amp;gt; on -&amp;gt; Schaltet den Aktor ein&lt;br /&gt;
set &amp;lt;name&amp;gt; off -&amp;gt; Schaltet den Aktor aus&lt;br /&gt;
set &amp;lt;name&amp;gt; toggle -&amp;gt; Ändert den Zustand des Aktors, d.h. ein eingeschalteter Aktor wird ausgeschaltet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Log-Auszug ===&lt;br /&gt;
&lt;br /&gt;
In FHEM ist nach dem Schalten des HM-LC-SW1-FM folgendes Log zu sehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2012.02.05 16:51:44 2: CUL_HM set LichtTerasse on&lt;br /&gt;
2012.02.05 16:52:14 2: CUL_HM set LichtTerasse off&lt;br /&gt;
2012.02.05 16:52:15 2: CUL_HM set LichtTerasse toggle&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nützliches Zubehör ==&lt;br /&gt;
&lt;br /&gt;
Wer den Schaltaktor im Sicherungskasten selbst einbauen möchte, z.B. um einen Stromstossschalter zu ersetzen, dem kann folgendes Zubehör empfohlen werden: Hutschienengehäuse CNMB-4V-Kit, Bestellnr. 532659 bei conrad. Das ist zwar sicher auch nicht VdE-konform, aber besser wie ohne. Alternativ kann auch der [[HM-LC-Sw1-DR 1fach Schaltaktor Hutschiene]] zur direkten Montage auf Hutschienen eingesetzt werde.&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
&lt;br /&gt;
Um den HM-LC-SW1-FM in den Anlernmodus zu versetzen, soll man lt. Anleitung den (temporär) angeschlossenen Taster für 4 Sekunden gedrückt halten. Falls dies bei Ihnen nicht funktioniert, so versuchen Sie den Taster einfach mal ca. 7 bis 8 Sekunden gedrückt zu halten (bis die LED des SW1-FM kurz aufleuchtet).&lt;br /&gt;
&lt;br /&gt;
Wenn das Pairing nicht komplett durchläuft (Device zeigt als Status MissingACK und kann nicht von FHEM aus gesteuert werden), dann hilft ggf. ein weiteres Pairing über hmPairSerial.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
Ein Integrationsbeispiel ist in [[Jalousie und Beleuchtung in mehreren Räumen]] zu finden. &lt;br /&gt;
&lt;br /&gt;
[http://files.elv.de/Assets/Produkte/7/767/76793/Downloads/76793_HM_LC_Sw1_FM_um.pdf Anleitung (PDF)]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LC-SW1-FM_Schaltaktor_1-fach_UP&amp;diff=16377</id>
		<title>HM-LC-SW1-FM Schaltaktor 1-fach UP</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LC-SW1-FM_Schaltaktor_1-fach_UP&amp;diff=16377"/>
		<updated>2016-09-15T09:28:57Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Probleme */  -&amp;gt; https://forum.fhem.de/index.php/topic,57708.0.html&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homematic Funk-Schaltaktor 1-fach (Unterputz)&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
Schalten eines angeschlossenen Verbrauchers mittels [[CUL]]/[[CUN]]/[[HMLAN Konfigurator]] und über einen mechanischen spannungsfesten Taster. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technische Daten:&#039;&#039;&#039;&lt;br /&gt;
* Schaltvermögen: 16A bei 230V/50Hz (ohmsche Last) &lt;br /&gt;
* Relais: 1x Schließer&lt;br /&gt;
* Standby Verbrauch: 0,5W&lt;br /&gt;
* Maße(BxHxT): 53x53x30mm&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Hardware-Installation ==&lt;br /&gt;
&lt;br /&gt;
Will man die Funk-Schaltaktoren auch manuell betreiben, d.h. man upgradet eine vorhandene Elektroinstallation, so sind Taster notwendig. Schalter können notfalls mittels einer zusätzlichen Feder zu Taster umgebaut werden, Tastschalter sind leider nicht geeignet. Schalter und Tastschalter führen dazu, dass der Aktor nach Betätigung des Schalters in den Anlernmodus versetzt wird und auch in diesem verbleibt.&lt;br /&gt;
&lt;br /&gt;
Je nach vorhandenen Schalterdosen empfiehlt es sich bestehende Schalterdosen nach hinten auszuweiten, d.h. die Abdeckung nach hinten heraus zu brechen, da die Aktoren und Kabel nicht gerade sparsam mit dem Platz umgehen. Alternativ könnte man den Aktor auch in eine zusätzliche Schalterdosen unterbringen und diese mit einem Federdeckel abschließen. Dies hat den Vorteil, dass man auch durch relativ dicke Tapete die LED und somit den Zustand des Aktors ablesen kann.&lt;br /&gt;
&lt;br /&gt;
Der Aktor kann auch gänzlich ohne Taster, also nur per &#039;&#039;set&#039;&#039;-Befehlen durch Fhem oder per gepeerten Geräten gesteuert werden, jedoch muss zumindest für das Anlernen zeitweise ein Taster angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das [[Pairing (HomeMatic)|Pairing]] sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden. Hierfür wird ein am Aktor temporär angeschlossener spannungsfester Taster zwingend benötigt.&lt;br /&gt;
&lt;br /&gt;
# Sicherstellen, dass &#039;&#039;autocreate&#039;&#039; aktiv ist&lt;br /&gt;
# Am CUL/HMLAN o.ä. &amp;lt;code&amp;gt;set HMLAN hmPairForSec 60&amp;lt;/code&amp;gt;&lt;br /&gt;
# Binnen 60 Sekunden Aktor in Anlernmodus bringen (Taster 4s festhalten bis LED blinkt) -&amp;gt; Device wird in fhem angelegt, z.B. als CUL_HM_HM_LC_SW1_FM_2BAD45&lt;br /&gt;
# &amp;lt;code&amp;gt;rename &amp;lt;Aktor&amp;gt; &amp;lt;AktorNameNeu&amp;gt;&amp;lt;/code&amp;gt; -&amp;gt; richtigen Namen zuordnen&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
&lt;br /&gt;
Ein exemplarischer Auszug aus der fhem.cfg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LichtTerasse CUL_HM 17AEA6&lt;br /&gt;
attr LichtTerasse devInfo 010100&lt;br /&gt;
attr LichtTerasse firmware 1.9&lt;br /&gt;
attr LichtTerasse hmClass receiver&lt;br /&gt;
attr LichtTerasse model HM-LC-SW1-FM&lt;br /&gt;
attr LichtTerasse room Terasse&lt;br /&gt;
attr LichtTerasse serialNr IEQ00xxxx&lt;br /&gt;
attr LichtTerasse subType switch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mögliche Schaltoperationen ===&lt;br /&gt;
&lt;br /&gt;
Der Aktor versteht folgende Aktionen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set &amp;lt;name&amp;gt; on -&amp;gt; Schaltet den Aktor ein&lt;br /&gt;
set &amp;lt;name&amp;gt; off -&amp;gt; Schaltet den Aktor aus&lt;br /&gt;
set &amp;lt;name&amp;gt; toggle -&amp;gt; Ändert den Zustand des Aktors, d.h. ein eingeschalteter Aktor wird ausgeschaltet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Log-Auszug ===&lt;br /&gt;
&lt;br /&gt;
In FHEM ist nach dem Schalten des HM-LC-SW1-FM folgendes Log zu sehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2012.02.05 16:51:44 2: CUL_HM set LichtTerasse on&lt;br /&gt;
2012.02.05 16:52:14 2: CUL_HM set LichtTerasse off&lt;br /&gt;
2012.02.05 16:52:15 2: CUL_HM set LichtTerasse toggle&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nützliches Zubehör ==&lt;br /&gt;
&lt;br /&gt;
Wer den Schaltaktor im Sicherungskasten selbst einbauen möchte, z.B. um einen Stromstossschalter zu ersetzen, dem kann folgendes Zubehör empfohlen werden: Hutschienengehäuse CNMB-4V-Kit, Bestellnr. 532659 bei conrad. Das ist zwar sicher auch nicht VdE-konform, aber besser wie ohne. Alternativ kann auch der [[HM-LC-Sw1-DR 1fach Schaltaktor Hutschiene]] zur direkten Montage auf Hutschienen eingesetzt werde.&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
&lt;br /&gt;
Um den HM-LC-SW1-FM in den Anlernmodus zu versetzen, soll man lt. Anleitung den (temporär) angeschlossenen Taster für 4 Sekunden gedrückt halten. Falls dies bei Ihnen nicht funktioniert, so versuchen Sie den Taster einfach mal ca. 7 bis 8 Sekunden gedrückt zu halten (bis die LED des SW1-FM kurz aufleuchtet).&lt;br /&gt;
Wenn das Pairing nicht komplett durchläuft (Device zeigt als Status MissingACK und kann nicht von FHEM aus gesteuert werden), dann hilft ggf. ein weiteres Pairing über hmPairSerial.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
Ein Integrationsbeispiel ist in [[Jalousie und Beleuchtung in mehreren Räumen]] zu finden. &lt;br /&gt;
&lt;br /&gt;
[http://files.elv.de/Assets/Produkte/7/767/76793/Downloads/76793_HM_LC_Sw1_FM_um.pdf Anleitung (PDF)]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=15280</id>
		<title>AMAD</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=AMAD&amp;diff=15280"/>
		<updated>2016-05-03T21:08:56Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Accessibility service not running&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuern von Adroidgeräten und Anzeige von bestimmten Informationen dieser Geräte&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=74_AMAD.pm&lt;br /&gt;
|ModOwner=CoolTux &amp;lt;br /&amp;gt;([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Vorwort==&lt;br /&gt;
===Warum AMAD2===&lt;br /&gt;
Bei der Entwicklung von AMAD musste ich auf Grund meines damaligen Wissenstandes ein einfaches Konzept zum erhalt von Daten wählen. Hierfür wählte ich das Prinzip des pullens. Die Daten wurden alle 3 min vom Gerät angefordert.&lt;br /&gt;
Mit AMAD2, also der 2. Version von AMAD werden die Daten nun vom Androidgerät selbst nach FHEM gepusht. So kommen Statusänderungen quasi in Echtzeit als Reading ins Device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Vorstellung==&lt;br /&gt;
Dieses Modul liefert, &#039;&#039;&#039;in Verbindung mit der Android APP Automagic&#039;&#039;&#039;, diverse Informationen von Android Geräten.&lt;br /&gt;
Die AndroidAPP Automagic (welche nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features / Funktionen ==&lt;br /&gt;
Im Auslieferiungszustand werden folgende Zustände dargestellt:&lt;br /&gt;
* installierte Android Version&lt;br /&gt;
* Zustand von Automagic auf dem Gerät&lt;br /&gt;
* Spracheingabe&lt;br /&gt;
* Bluetooth An/Aus&lt;br /&gt;
* Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)&lt;br /&gt;
* verbundene Bluetoothgeräte, inklusive deren MAC Adresse&lt;br /&gt;
* aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* Status des Androidgerätes - Online/Offline&lt;br /&gt;
* nächster Alarmtag&lt;br /&gt;
* nächste Alarmzeit&lt;br /&gt;
* Batteriestatus in %&lt;br /&gt;
* Ladestatus - Netztei angeschlossen / nicht angeschlossen&lt;br /&gt;
* Bildschirmstatus An/Aus&lt;br /&gt;
* Bildschirmhelligkeit&lt;br /&gt;
* Vollbildmodus An/Aus&lt;br /&gt;
* Bildschirmausrichtung Auto/Landscape/Portrait&lt;br /&gt;
* Standardlautstärke&lt;br /&gt;
* Media Lautstärke&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Mit etwas Einarbeitung können jegliche Informationen welche Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows welcher seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Modul gibt Dir auch die Möglichkeit Deine Androidgeräte zu steuern. So können folgende Aktionen durchgeführt werden:&lt;br /&gt;
* Bluetooth Ein/Aus schalten&lt;br /&gt;
* zu einem bestimmten Bluetoothgerät wechseln/verbinden&lt;br /&gt;
* Status des Gerätes (Online,Offline)&lt;br /&gt;
* Mediaplayer steuern (Play, Stop, nächster Titel, vorheriger Titel)&lt;br /&gt;
* nächste Alarmzeit setzen&lt;br /&gt;
* ein Benachrichtigungston abspielen (Notificationsound)&lt;br /&gt;
* eine App auf dem Gerät öffnen&lt;br /&gt;
* eine URL im Browser öffnen&lt;br /&gt;
* Bildschirm An/Aus machen&lt;br /&gt;
* Bildschirmhelligkeit einstellen&lt;br /&gt;
* Vollbildmodus einschalten&lt;br /&gt;
* eine Nachricht senden welche am Bildschirm angezeigt wird&lt;br /&gt;
* Bildschirmausrichtung einstellen (Auto,Landscape,Portrait)&lt;br /&gt;
* neuen Statusreport des Gerätes anfordern&lt;br /&gt;
* Systembefehle setzen (Reboot)&lt;br /&gt;
* eine Nachricht senden welche angesagt wird (TTS)&lt;br /&gt;
* Medienlautstärke regeln&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
Für all diese Aktionen und Informationen wird auf dem Androidgerät Automagic und ein so genannter Flow benötigt.&lt;br /&gt;
Die App Automagic Premium könnt Ihr Euch aus dem App Store installieren oder Ihr holt Euch die Testversion von [https://automagic4android.com/de/testversion hier], die Flows bekommt Ihr aus dem Flowset 74_AMADautomagicFlowset$VERSION.xml unter $FHEMINSTALL/FHEM/lib/&lt;br /&gt;
&lt;br /&gt;
AutomagicApp Anweisung&lt;br /&gt;
* installiert die App&lt;br /&gt;
* installiert das Flowset 74_AMADautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf Eurem Androidgerät. &#039;&#039;&#039;NOCH NICHT&#039;&#039;&#039; die Flows aktivieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; AMAD &amp;lt;IP-ADRESSE&amp;gt; &amp;lt;WLANAP-SSID(&#039;s)&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &#039;&#039;&#039;!!! Wichtig - Es dürfen ausschließlich nur IP Adressen verwendet werden, keine FQDN !!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define WandTabletWohnzimmer AMAD 192.168.0.23 TuxNetAP,Opa@@Zu@@Hause&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Anweisung erstellt zwei neues AMAD-Device im Raum AMAD.Der Parameter &amp;lt;IP-ADRESSE&amp;gt; legt die IP Adresse des Android Gerätes fest und der Parameter WLANAP-SSID die SSID Deines WLAN&#039;s. Es können mehrere SSID&#039;s mit angegeben werden, welche dann durch Komma getrennt sein müssen. Haben die SSID&#039;s Leerzeichen im Namen werde die Leerzeichen durch 2 @ aufgefüllt. Gibt es Androidgeräte welche nicht über WLAN sondern USB-Ethernet angeschlossen sind, ist die WLANAP-SSID mit &amp;quot;usb-ethernet&amp;quot; zu benennen&lt;br /&gt;
Das zweite Device ist die AMADCommBridge welche als Kommunikationsbrücke vom Androidgerät zu FHEM diehnt. !!!Comming Soon!!! Wer den Port ändern möchte, kann dies über das Attribut &amp;quot;port&amp;quot; tun. Ihr solltet aber wissen was Ihr tut, da dieser Port im HTTP Request Trigger der beiden Flows eingestellt ist. Demzufolge muß der Port dort auch geändert werden. Der Port für die Bridge kann ohne Probleme im Bridge Device mittels dem Attribut &amp;quot;port&amp;quot; verändert werden. &lt;br /&gt;
Der Port für die Bridge kann ohne Probleme im Bridge Device mittels dem Attribut &amp;quot;port&amp;quot; verändert werden.&lt;br /&gt;
&lt;br /&gt;
===AMAD Communication Bridge===&lt;br /&gt;
Beim ersten anlegen einer AMAD Deviceinstanz wird automatisch ein Gerät Namens AMADCommBridge im Raum AMAD angelegt. Dieses Gerät diehnt zur Kommunikation vom Androidgerät zu FHEM ohne das zuvor eine Anfrage von FHEM aus ging. Damit das Androidgerät die IP von FHEM kennt, muss diese sofort nach dem anlegen der Bridge über den set Befehl in ein entsprechendes Reading in die Bridge geschrieben werden. DAS IST SUPER WICHTIG UND FÜR DIE FUNKTION DER BRIDGE NOTWENDIG.&lt;br /&gt;
Bitte führt hierzu folgenden Befehl aus. set AMADCommBridge fhemServerIP &amp;lt;FHEM-IP&amp;gt;.&lt;br /&gt;
Als zweites Reading könnt Ihr expertMode setzen. Mit diesem Reading wird eine unmittelbare Komminikation mit FHEM erreicht ohne die Einschränkung über ein Notify gehen zu müssen und nur reine set Befehle ausführen zu können.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;JETZT bitte die Flows AKTIVIEREN!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fertig! Nach anlegen der Geräteinstanz und dem eintragen der fhemServerIP in der CommBridge sollten nach spätestens 15 Sekunden bereits die ersten Readings reinkommen. Nun wird alle 15 Sekunden probiert einen Status Request erfolgreich ab zu schließen. Wenn der Status sich über einen längeren Zeitraum nicht auf &amp;quot;activ&amp;quot; ändert, sollte man im Log nach eventuellen Fehlern suchen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt die Möglichkeit einer Abfragen vom Status jeglicher Geräte in FHEM über das Androidgerät und Auswertung auf dem Androidgerät.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
Erstelle einen Flow mit einer HTTP Request Aktion mit folgendem Inhalt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
URL&lt;br /&gt;
http://{global_fhemip}:8090&lt;br /&gt;
&lt;br /&gt;
REQUEST METHODE&lt;br /&gt;
POST&lt;br /&gt;
&lt;br /&gt;
CONTENT TYP&lt;br /&gt;
Genereller Text&lt;br /&gt;
text/plain&lt;br /&gt;
&lt;br /&gt;
DATEN&lt;br /&gt;
(hier kommen die drei Werte für ein ReadingsVal Aufruf rein, getrennt durch Leerzeichen)&lt;br /&gt;
TempFeuchtSensorSchlafzimmer temperature 300&lt;br /&gt;
&lt;br /&gt;
(haken)Setze eigenen Header&lt;br /&gt;
FHEMDEVICE: {global_fhemdevice}&lt;br /&gt;
FHEMCMD: readingsval&lt;br /&gt;
&lt;br /&gt;
SPEICHERE ANTWORT ...&lt;br /&gt;
Variable&lt;br /&gt;
&lt;br /&gt;
VARIABLE&lt;br /&gt;
response&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Du erhälst dann den Rückgabewert in der Response Variablen. Diesen kannst Du dann innerhalb Deines Flows weiter verarbeiten. Z.B. Ansagetext.&lt;br /&gt;
&lt;br /&gt;
==Readings==&lt;br /&gt;
* airplanemode - Status des Flugmodus&lt;br /&gt;
* androidVersion - aktuell installierte Androidversion&lt;br /&gt;
* automagicState - Statusmeldungen von der AutomagicApp &#039;&#039;&#039;(Voraussetzung Android &amp;gt;4.3). Wer ein Android &amp;gt;4.3 hat und im Reading steht &amp;quot;wird nicht unterstützt&amp;quot;, muß in den Androideinstellungen unter Ton und Benachrichtigungen -&amp;gt; Benachrichtigungszugriff ein Haken setzen für Automagic&#039;&#039;&#039;&lt;br /&gt;
* bluetooth on/off - ist auf dem Gerät Bluetooth an oder aus&lt;br /&gt;
* checkActiveTask - Zustand einer zuvor definierten APP. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, &#039;&#039;&#039;siehe Hinweis unten&#039;&#039;&#039;&lt;br /&gt;
* connectedBTdevices - eine Liste der verbundenen Gerät&lt;br /&gt;
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte&lt;br /&gt;
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers&lt;br /&gt;
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers&lt;br /&gt;
* daydream - on/off Daydream gestartet oder nicht&lt;br /&gt;
* deviceState - Status des Androidgerätes. !!!Gibt nicht den tatsächlichen Status des Gerätes wieder!!! deviceState muss von Hand selbst gesetzt werden. (set DEVICE deviceState) z.B. über die Anwesenheitskontrolle. Ist Offline gesetzt, können keine set Befehle abgesetzt werden.&lt;br /&gt;
* dockingState - undocked/docked Status ob das Gerät in einer Dockinstation ist oder nicht.&lt;br /&gt;
* flow_SetCommands - active/inactive, gibt den Status des SetCommands Flow wieder&lt;br /&gt;
* flow_informations - active/inactive, gibt den Status des Informations Flow wieder&lt;br /&gt;
* flowsetVersionAtDevice - aktuell installiertes Flowset auf dem Device&lt;br /&gt;
* intentRadioName - zu letzt eingestellter Intent Radio Name&lt;br /&gt;
* intentRadioState - Status des IntentRadio Players&lt;br /&gt;
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht das sie gerade aktiv ist&lt;br /&gt;
* lastSetCommandError - letzte Fehlermeldung vom set Befehl&lt;br /&gt;
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl&lt;br /&gt;
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet&lt;br /&gt;
* nextAlarmDay - aktiver Alarmtag&lt;br /&gt;
* nextAlarmState - aktueller Status des Androidinternen Weckers&lt;br /&gt;
* nextAlarmTime - aktive Alarmzeit&lt;br /&gt;
* powerLevel - Status der Batterie in %&lt;br /&gt;
* powerPlugged - Netzteil angeschlossen? 0=NEIN, 1|2=JA&lt;br /&gt;
* screen - on locked/unlocked, off locked/unlocked zeigt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt&lt;br /&gt;
* screenBrightness - Bildschirmhelligkeit von 0-255&lt;br /&gt;
* screenFullscreen - Vollbildmodus (On,Off)&lt;br /&gt;
* screenOrientation - (Landscape,Portrait) Bildschirmausrichtung&lt;br /&gt;
* screenOrientationMode - (auto, manual) Modus für die Ausrichtung&lt;br /&gt;
* state - aktueller Status des Devices&lt;br /&gt;
* volume - Media Lautstärkewert&lt;br /&gt;
* volumeNotification - Benachrichtigungs Lautstärke&lt;br /&gt;
&lt;br /&gt;
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Befehle==&lt;br /&gt;
&lt;br /&gt;
===Set===&lt;br /&gt;
* activateVoiceInput - schaltet die Spracheingabe ein&lt;br /&gt;
* bluetooth - Schaltet Bluetooth on/off&lt;br /&gt;
* clearNotificationBar - (All,Automagic) löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste&lt;br /&gt;
* currentFlowsetUpdate - fürt ein Flowset Update auf dem Device aus&lt;br /&gt;
* deviceState - setzt den Device Status Online/Offline. Siehe Readings&lt;br /&gt;
* installFlowSource - installiert einen Flow auf dem Device, das XML File muss unter /tmp/ liegen und die Endung xml haben. &#039;&#039;&#039;Bsp:&#039;&#039;&#039; set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml&lt;br /&gt;
* mediaPlayer - steuert den Standard Mediaplayer. play, stop, Titel zürück, Titel vor.&lt;br /&gt;
* nextAlarmTime - setzt die Alarmzeit. Geht aber nur innerhalb der nächsten 24Std.&lt;br /&gt;
* notifySndFile - spielt die angegebende Mediadatei auf dem Androidgerät ab. &#039;&#039;&#039;Die aufzurufende Mediadatei muß sich im Ordner /storage/emulated/0/Notifications/ befinden.&#039;&#039;&#039;&lt;br /&gt;
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.&lt;br /&gt;
* screenMsg - versendet eine Bildschirmnachricht&lt;br /&gt;
* sendintent - sendet einen Intentstring Bsp: set $AMADDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion un der zweite das Extra. Es können immer zwei Extras mitgegeben werden.&lt;br /&gt;
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.&lt;br /&gt;
* timer - setzt einen Timer innerhalb der als Standard definierten ClockAPP auf dem Device. Es können nur Sekunden angegeben werden.&lt;br /&gt;
* ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird&lt;br /&gt;
* vibrate - lässt das Androidgerät vibrieren&lt;br /&gt;
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossenen Lautsprecher&lt;br /&gt;
* volumeNotification - setzt die Benachrichtigungslautstärke.&lt;br /&gt;
&lt;br /&gt;
===Set abhängig von gesetzten Attributen===&lt;br /&gt;
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. &#039;&#039;&#039;Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!&#039;&#039;&#039;&lt;br /&gt;
* openApp - öffnet eine ausgewählte App. &#039;&#039;&#039;Attribut setOpenApp&#039;&#039;&#039;&lt;br /&gt;
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. &#039;&#039;&#039;Bsp:&#039;&#039;&#039; &#039;&#039;attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity&#039;&#039;, das erste ist der Package Name und das zweite der Class Name&lt;br /&gt;
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn, in den Automagic Einstellungen muss &amp;quot;Admin Funktion&amp;quot; gesetzt werden sonst funktioniert &amp;quot;Screen off&amp;quot; nicht. &#039;&#039;&#039;Attribut setScreenOnForTimer&#039;&#039;&#039; ändert die Zeit wie lange das Display an bleiben soll!&lt;br /&gt;
* screenFullscreen - Schaltet den Vollbildmodus on/off. &#039;&#039;&#039;Attribut setFullscreen&#039;&#039;&#039;&lt;br /&gt;
* screenLock - Sperrt den Bildschirm mit Pinabfrage. &#039;&#039;&#039;Attribut setScreenlockPIN&#039;&#039;&#039; - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4 bis max 16 Zeichen sein.&lt;br /&gt;
* screenOrientation - Schaltet die Bildschirmausrichtung Auto/Landscape/Portait. &#039;&#039;&#039;Attribut setScreenOrientation&#039;&#039;&#039;&lt;br /&gt;
* system - setzt Systembefehle ab (nur bei gerootetet Geräen). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) &#039;&#039;&#039;Attribut root&#039;&#039;&#039;, in den Automagic Einstellungen muss &amp;quot;Root Funktion&amp;quot; gesetzt werden&lt;br /&gt;
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei &#039;&#039;&#039;(default ist /storage/emulated/0/Notifications/&#039;&#039;&#039;&lt;br /&gt;
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe &#039;&#039;&#039;(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Um zwischen Bluetoothgeräten wechseln zu können, muß das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. &#039;&#039;attr &amp;lt;DEVICE&amp;gt; BTdeviceName1|MAC,BTDeviceName2|MAC&#039;&#039; Es muss zwingend darauf geachtet werden das beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Achtet bei der MAC darauf das Ihr wirklich nach jeder zweiten Zahl auch einen : drin habt &#039;&#039;&#039;Beispiel:&#039;&#039;&#039; &#039;&#039;attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==STATE==&lt;br /&gt;
* initialized - Ist der Status kurz nach einem define..&lt;br /&gt;
* active - die Geräteinstanz ist im aktiven Status.&lt;br /&gt;
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
==deviceState==&lt;br /&gt;
* online - Das Gerät ist online und kann set Befehle entgegennehmen.&lt;br /&gt;
* offline - Ein Gerät wird in den folgenden 3 Szenarien in den Status offline gesetzt:&lt;br /&gt;
** Das Gerät wird mittels shutdown über FHEM runtergefahren. &lt;br /&gt;
** Der Airplainmod (Flugmodus) wird über FHEM aktiviert. &lt;br /&gt;
** Es wurde mehr als 5 mal ein statusRequest erfolglos und mehr als 3 mal ein set Command erfolglos abgeschickt.&lt;br /&gt;
Es bleibt also dem User überlassen das Gerät nach erneuter Verfügbarkeit wieder in den Status online zu setzen. Das kann z.B. über das Presence Modul erzeugt werden (set DEVICE deviceState online)&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
=== Lademanagement ===&lt;br /&gt;
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus.&lt;br /&gt;
&lt;br /&gt;
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
... DOIF ([Nexus5Handy:powerLevel] &amp;lt; 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] &amp;gt; 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wecker ===&lt;br /&gt;
Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird.&lt;br /&gt;
&lt;br /&gt;
=== Mediacenter ===&lt;br /&gt;
Mein 10&amp;quot; Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch runter gesetzt wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===&lt;br /&gt;
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.&lt;br /&gt;
&lt;br /&gt;
Der Teil im Feld Daten ist ein klassisches RadingsVal, halt nur ohne Komma und ohne Anführungszeichen&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot 2016-01-13-17-11-19.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Schaltbefehle vom Androidgerät an FHEM senden ===&lt;br /&gt;
Hierfür richte bitte einen eigen Flow ein. Wie das genau geht, verrät Dir die Hilfe.&lt;br /&gt;
Du kannst einen ersten Eindruck bekommen wenn Du Dir den Flow VoiceControl an schaust, speziell die HTTP Request Aktion.&lt;br /&gt;
Als Aktion für Deinen eigenen Flow wählst Du HTTP Request mit folgendem Inhalt&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot 2016-01-13-17-22-16.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Nun sollte Lampe1 angeschalten werden wenn der Flow ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
PS: Screenshots werden folgen&lt;br /&gt;
&lt;br /&gt;
== Bekannte Meldungen/Hinweise/Probleme ==&lt;br /&gt;
&amp;lt;code&amp;gt;PERL WARNING: Use of uninitialized value in hash element at /opt/fhem/FHEM/74_AMAD.pm line 145&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Meldung/Hinweis ist bekannt und es wird daran gearbeitet!&lt;br /&gt;
&lt;br /&gt;
Wenn auf dem Android-Gerät die Fehlermeldung &#039;Accessibility service not running&#039; von Automagic kommt, oder im FHEM das reading state  &#039;Flow Informations mit Fehler beendet&#039; steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --&amp;gt; Bedienungshilfen --&amp;gt; Automagic Premium. Hier muss der Schalter auf &#039;an&#039; stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.&lt;br /&gt;
&lt;br /&gt;
==Ich sage Danke==&lt;br /&gt;
&#039;&#039;Der größte Dank geht an meinen Mentor Andre (justme1968), er hat mir mit hilfreichen Tips geholfen Perlcode zu verstehen und Spaß am programmieren zu haben.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Auch möchte ich mich bei Jens bedanken (jensb) welcher mir ebenfalls mit hilfreichen Tips bei meinen aller ersten Gehversuchen beim Perlcode schreiben unterstützt hat.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;So und nun noch ein besonderer Dank an pah (Prof. Dr. Peter Henning ), ohne seine Aussage &amp;quot;Keine Ahnung hatten wir alle mal, das ist keine Ausrede&amp;quot; hätte ich bestimmt nicht angefangen Interesse an Modulentwicklung zu zeigen :-)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Danke an Jürgen(ujaudio) und Andreas(scooty) die sich um die Übersetzung der Commandref ins Englische gekümmert haben&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Danke auch an Ronny(RoBra81) für seine tollte Idee und Umsetzung von eigenen AMAD Readings aus externen Flows.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15227</id>
		<title>TelegramBot</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15227"/>
		<updated>2016-04-26T16:16:27Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Favoriten für Kommandos anlegen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModFTopic=38328&lt;br /&gt;
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]&lt;br /&gt;
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/). &lt;br /&gt;
Es entsteht eine Möglichkeit Benachrichtungen aus Fhem zu versenden, zum Beispiel Alarmmeldungen.&lt;br /&gt;
Ausserdem können auch Kommandos über Telegram an Fhem gesendet werden um Steuerungsbefehle in Fhem auszulösen.&lt;br /&gt;
&lt;br /&gt;
Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem Fhem-Server (anders als die Variante [[Telegram]]), sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe. Es muss jedoch das perl JSON modul installiert sein. &lt;br /&gt;
&lt;br /&gt;
== Über Telegram Instant Messaging ==&lt;br /&gt;
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei. &lt;br /&gt;
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und &lt;br /&gt;
können auch aus dem WebBrowser verwendet werden. &lt;br /&gt;
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt. &lt;br /&gt;
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.&lt;br /&gt;
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
Für die Unterstützung von &#039;&#039;WhatsApp&#039;&#039; siehe Modul [[yowsup]].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Unterstützt werden:&lt;br /&gt;
&lt;br /&gt;
* Versand von Textnachrichten &lt;br /&gt;
* Versand und Empfang von Bildern/Audio/etc &lt;br /&gt;
* Empfang von Textnachrichten von beliebigen Kontakten&lt;br /&gt;
* Kommandos in Fhem über Telegram-Nachrichten von aussen auslösen&lt;br /&gt;
* Ergebnisse der Kommandos zusenden lassen&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung des Moduls ist im Fhem Forum und in der (englischen) Dokumentation zum Modul in der Commandref diesem  {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über Fhem-Update verteilt.&lt;br /&gt;
&lt;br /&gt;
Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Für die Anlage eines TelegramBot Devices in Fhem ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#botfather BotFather] erzeugt. Dort mit dem Telegram-Befehl &amp;lt;code&amp;gt;/newbot&amp;lt;/code&amp;gt; einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf &amp;quot;Bot&amp;quot; enden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;amp;lt;name&amp;amp;gt; TelegramBot  &amp;amp;lt;token&amp;amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;define teleBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;code&amp;gt;pollingTimeout&amp;lt;/code&amp;gt; &#039;&#039;&#039;auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Registrierung eines neuen Bot ==&lt;br /&gt;
Zur Registrierung wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm)benötigt. Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.&lt;br /&gt;
Hier ein Beispiel, wie so ein Chat aussehen könnte:&lt;br /&gt;
&amp;lt;pre&amp;gt;Client: &lt;br /&gt;
/newbot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Alright, a new bot. How are we going to call it? Please choose a name for your bot. &lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
Mein Name &lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Good. Now let&#039;s choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Sorry, this username is already taken. Think of something different.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Done! Congratulations on your new bot.&lt;br /&gt;
You will find it at telegram.me/fhem1234_bot.&lt;br /&gt;
You can now add a description, about section and profile picture for your bot, see /help for a list of commands.&lt;br /&gt;
----------------&lt;br /&gt;
Use this token to access the HTTP API:&lt;br /&gt;
1234567890:AbCdefgHIJklmnOPQRst-uvwxyz &lt;br /&gt;
&lt;br /&gt;
For a description of the Bot API, see this page: https://core.telegram.org/bots/api &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
=== Privacyeinstellungen ===&lt;br /&gt;
&lt;br /&gt;
Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.&amp;lt;br&amp;gt;Beispielchat:&amp;lt;pre&amp;gt;Client:&lt;br /&gt;
/setprivacy&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Choose a bot to change group messages settings.&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
@fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
&#039;Enable&#039; - your bot will only receive messages that either start with the &#039;/&#039; symbol or mention the bot by username.&lt;br /&gt;
&#039;Disable&#039; - your bot will receive all messages that people send to groups.&lt;br /&gt;
Current status is: ENABLED&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
Disable&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Success! The new status is: DISABLED. /help&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kontakte ===&lt;br /&gt;
&lt;br /&gt;
Der Bot merkt sich die bereits bekannten Kontakte im Reading &amp;lt;code&amp;gt;Contacts&amp;lt;/code&amp;gt;. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @). &lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;123456:Ralf_Mustermann:@ralf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verschiedene Einträge werden durch Leerzeichen getrennt.&lt;br /&gt;
&lt;br /&gt;
Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl &amp;lt;code&amp;gt;replaceContacts&amp;lt;/code&amp;gt;. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.&lt;br /&gt;
&lt;br /&gt;
Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)&lt;br /&gt;
&lt;br /&gt;
=== Reset ===&lt;br /&gt;
&lt;br /&gt;
Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt;). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt. &lt;br /&gt;
&lt;br /&gt;
=== Gruppen ===&lt;br /&gt;
&lt;br /&gt;
Um eine Nachricht von FHEM an eine Gruppe zu senden, muss der BOT in die Gruppe aufgenommen werden. Nach dem Senden einer Nachricht an die Gruppe kann im Modul die Gruppen-ID ermittelt werden und zum Senden von Nachrichten verwendet werden. Wenn die Privacy-Einstellungen nicht auf &#039;Disabled&#039; gesetzt wurden, muss die Nachricht mit einem Slash (/) beginnen.&lt;br /&gt;
&lt;br /&gt;
==== Supergroups / Supergruppen ====&lt;br /&gt;
&lt;br /&gt;
Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
== Beispielszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Benachrichtigungen über Ereignisse ===&lt;br /&gt;
&lt;br /&gt;
Das einfachste Szenario für die Integration von Messaging-Diensten mit Fhem ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von Fhem zu informieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify global:INITIALIZED set telebotdevice message fhem newly started - just now !&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der Nachrichtentext &amp;quot;fhem newly started - just now !&amp;quot; an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald Fhem neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.&lt;br /&gt;
&lt;br /&gt;
=== Versand von Bildern ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Bilder auf dem Fhem-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015 &lt;br /&gt;
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=Fhem-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify wetter:report set telebotdevice sendPhoto /opt/fhem/wetter.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich.&lt;br /&gt;
&lt;br /&gt;
=== Versand von SVG-Plots ===&lt;br /&gt;
&lt;br /&gt;
Der Versand ist nicht direkt über das Device möglich, jedoch über den Perl-Befehl &#039;TelegramBot_ExecuteCommand&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{TelegramBot_ExecuteCommand($defs{&amp;quot;mein_telegramBot&amp;quot;}, meine_ZielID, &#039;{plotAsPng(&amp;quot;mein_SVG&amp;quot;)}&#039;);; return;;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist die Ziel-ID ohne das @-Zeichen, Anführungszeichen o.ä. anzugeben. Das Ziel kann auch eine Gruppen-ID (beginnend mit dem Minus-Zeichen) sein. Um das SVG nun noch mit einem Text zu versehen, muss eine Textnachricht dazu gesendet werden, was sich am einfachsten durch das Ausführen eines FHEM-Befehls auf Perl-Ebene realisieren lässt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{fhem &amp;quot;set mein_telegramBot message \@meine_ZielID Mein Text&amp;quot; ;; TelegramBot_ExecuteCommand($defs{&amp;quot;mein_telegramBot&amp;quot;}, meine_ZielID, &#039;{plotAsPng(&amp;quot;mein_SVG&amp;quot;)}&#039;);; return;;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Voraussetzungen für den Versand von SVG-Plots ====&lt;br /&gt;
Es muss das Modul libimage-librsvg-perl installiert sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libimage-librsvg-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Evtl. sind weitere Module erforderlich:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libgd-graph-perl&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install libgd-text-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empfang von Bildern oder ähnlichem ===&lt;br /&gt;
&lt;br /&gt;
Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading &amp;lt;code&amp;gt;msgFileId&amp;lt;/code&amp;gt; angelegt (&amp;lt;code&amp;gt;123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx&amp;lt;/code&amp;gt;) und im Reading &amp;lt;code&amp;gt;msgText&amp;lt;/code&amp;gt; steht dann so etwas wie&lt;br /&gt;
&amp;lt;code&amp;gt;received photo # Size: 107701&amp;lt;/code&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Über das Get-Kommando &amp;lt;code&amp;gt;urlForFile&amp;lt;/code&amp;gt; mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Versand von Emojis (Smileys) ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite &lt;br /&gt;
&lt;br /&gt;
http://apps.timwhitlock.info/emoji/tables/unicode (Spalte &amp;quot;Native&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
übernehmen und mit der Nachricht verschicken. &lt;br /&gt;
&lt;br /&gt;
Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).&lt;br /&gt;
&lt;br /&gt;
=== Kommandos auslösen ===&lt;br /&gt;
&lt;br /&gt;
Ein wichtiges Szenario ist die Möglichkeit Kommandos in Fhem ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: &amp;quot;cmdKeyword&amp;quot;)erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telebotdevice cmdKeyword doit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Somit kann man dann durch Nachrichten die mit &amp;quot;doit&amp;quot; beginnen Kommandos an Fhem senden, die ähnlich wie im Kommandoeingabefeld von Fhemweb dann von Fhem ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.&lt;br /&gt;
&lt;br /&gt;
Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit set schalter on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit list telegrambot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut &amp;quot;cmdRestrictedPeer&amp;quot; setzen, damit nicht jeder Kommandos auf dem Fhem-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Favoriten für Kommandos anlegen ====&lt;br /&gt;
&lt;br /&gt;
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf &amp;quot;Kurzwahl&amp;quot; legt.&lt;br /&gt;
&lt;br /&gt;
Beispiel-Kommandos wie z.B. &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 100&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.&lt;br /&gt;
&lt;br /&gt;
Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice favorites set TYPE=ROLLADEN pos 100;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.&lt;br /&gt;
Nehmen wir mal an man möchte die Favoriten mit &amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; ausführen können. Dazu muss dann das Attribut &amp;quot;cmdFavorites&amp;quot; setzen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice cmdFavorites /short&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man nun im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short 1&amp;lt;/code&amp;gt; an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.&lt;br /&gt;
&lt;br /&gt;
Ausserdem kann man im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; an den Bot schicken, dann antwortet der Bot mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favorites&lt;br /&gt;
&lt;br /&gt;
/short1 = set TYPE=ROLLADEN pos 100&lt;br /&gt;
&lt;br /&gt;
/short2 = set TYPE=ROLLADEN pos 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Antworten werden als Schaltflächen dargestellt (Telegram inline Keyboard) und können am Mobile-Client direkt angeklickt werden um sie auszuführen.&lt;br /&gt;
Um die Beschriftung der Schaltflächen zu optimieren, können die Befehle im Attribut favorites mit Beschreibungen versehen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[Rollaeden zu ]=set TYPE=ROLLADEN pos 100;[Rollaeden auf]=set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun antwortet der Bot auf das Schlüsselwort für die Favoriten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favorites&lt;br /&gt;
&lt;br /&gt;
/short1 = Rollaeden zu&lt;br /&gt;
&lt;br /&gt;
/short2 = Rollaeden auf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Github Repository für die Telegram-Fhem Entwicklung: https://github.com/viegener/Telegram-fhem&lt;br /&gt;
* Infos zum Telegram BotFather: https://core.telegram.org/bots#botfather&lt;br /&gt;
&lt;br /&gt;
* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm&lt;br /&gt;
* Source code für das modifizierte HTTPUtils-Modul zur Übertragung grosser Bilder: https://github.com/viegener/Telegram-fhem/blob/master/HttpUtils.pm&lt;br /&gt;
&lt;br /&gt;
* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=Fhem-Forum}}&lt;br /&gt;
* Telegram messaging system https://telegram.org/&lt;br /&gt;
* TelegramBot API https://core.telegram.org/bots/api&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Viegener|Viegener]] ([[Benutzer Diskussion:Viegener|Diskussion]]) 22:49, 11. Okt. 2015 (CEST)&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15226</id>
		<title>TelegramBot</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15226"/>
		<updated>2016-04-26T15:37:53Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Favoritenbeschreibung auf den aktuellen Funktionsumfang angepasst&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModFTopic=38328&lt;br /&gt;
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]&lt;br /&gt;
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/). &lt;br /&gt;
Es entsteht eine Möglichkeit Benachrichtungen aus Fhem zu versenden, zum Beispiel Alarmmeldungen.&lt;br /&gt;
Ausserdem können auch Kommandos über Telegram an Fhem gesendet werden um Steuerungsbefehle in Fhem auszulösen.&lt;br /&gt;
&lt;br /&gt;
Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem Fhem-Server (anders als die Variante [[Telegram]]), sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe. Es muss jedoch das perl JSON modul installiert sein. &lt;br /&gt;
&lt;br /&gt;
== Über Telegram Instant Messaging ==&lt;br /&gt;
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei. &lt;br /&gt;
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und &lt;br /&gt;
können auch aus dem WebBrowser verwendet werden. &lt;br /&gt;
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt. &lt;br /&gt;
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.&lt;br /&gt;
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
Für die Unterstützung von &#039;&#039;WhatsApp&#039;&#039; siehe Modul [[yowsup]].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Unterstützt werden:&lt;br /&gt;
&lt;br /&gt;
* Versand von Textnachrichten &lt;br /&gt;
* Versand und Empfang von Bildern/Audio/etc &lt;br /&gt;
* Empfang von Textnachrichten von beliebigen Kontakten&lt;br /&gt;
* Kommandos in Fhem über Telegram-Nachrichten von aussen auslösen&lt;br /&gt;
* Ergebnisse der Kommandos zusenden lassen&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung des Moduls ist im Fhem Forum und in der (englischen) Dokumentation zum Modul in der Commandref diesem  {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über Fhem-Update verteilt.&lt;br /&gt;
&lt;br /&gt;
Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Für die Anlage eines TelegramBot Devices in Fhem ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#botfather BotFather] erzeugt. Dort mit dem Telegram-Befehl &amp;lt;code&amp;gt;/newbot&amp;lt;/code&amp;gt; einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf &amp;quot;Bot&amp;quot; enden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;amp;lt;name&amp;amp;gt; TelegramBot  &amp;amp;lt;token&amp;amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;define teleBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;code&amp;gt;pollingTimeout&amp;lt;/code&amp;gt; &#039;&#039;&#039;auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Registrierung eines neuen Bot ==&lt;br /&gt;
Zur Registrierung wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm)benötigt. Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.&lt;br /&gt;
Hier ein Beispiel, wie so ein Chat aussehen könnte:&lt;br /&gt;
&amp;lt;pre&amp;gt;Client: &lt;br /&gt;
/newbot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Alright, a new bot. How are we going to call it? Please choose a name for your bot. &lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
Mein Name &lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Good. Now let&#039;s choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Sorry, this username is already taken. Think of something different.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Done! Congratulations on your new bot.&lt;br /&gt;
You will find it at telegram.me/fhem1234_bot.&lt;br /&gt;
You can now add a description, about section and profile picture for your bot, see /help for a list of commands.&lt;br /&gt;
----------------&lt;br /&gt;
Use this token to access the HTTP API:&lt;br /&gt;
1234567890:AbCdefgHIJklmnOPQRst-uvwxyz &lt;br /&gt;
&lt;br /&gt;
For a description of the Bot API, see this page: https://core.telegram.org/bots/api &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
=== Privacyeinstellungen ===&lt;br /&gt;
&lt;br /&gt;
Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.&amp;lt;br&amp;gt;Beispielchat:&amp;lt;pre&amp;gt;Client:&lt;br /&gt;
/setprivacy&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Choose a bot to change group messages settings.&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
@fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
&#039;Enable&#039; - your bot will only receive messages that either start with the &#039;/&#039; symbol or mention the bot by username.&lt;br /&gt;
&#039;Disable&#039; - your bot will receive all messages that people send to groups.&lt;br /&gt;
Current status is: ENABLED&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
Disable&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Success! The new status is: DISABLED. /help&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kontakte ===&lt;br /&gt;
&lt;br /&gt;
Der Bot merkt sich die bereits bekannten Kontakte im Reading &amp;lt;code&amp;gt;Contacts&amp;lt;/code&amp;gt;. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @). &lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;123456:Ralf_Mustermann:@ralf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verschiedene Einträge werden durch Leerzeichen getrennt.&lt;br /&gt;
&lt;br /&gt;
Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl &amp;lt;code&amp;gt;replaceContacts&amp;lt;/code&amp;gt;. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.&lt;br /&gt;
&lt;br /&gt;
Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)&lt;br /&gt;
&lt;br /&gt;
=== Reset ===&lt;br /&gt;
&lt;br /&gt;
Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt;). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt. &lt;br /&gt;
&lt;br /&gt;
=== Gruppen ===&lt;br /&gt;
&lt;br /&gt;
Um eine Nachricht von FHEM an eine Gruppe zu senden, muss der BOT in die Gruppe aufgenommen werden. Nach dem Senden einer Nachricht an die Gruppe kann im Modul die Gruppen-ID ermittelt werden und zum Senden von Nachrichten verwendet werden. Wenn die Privacy-Einstellungen nicht auf &#039;Disabled&#039; gesetzt wurden, muss die Nachricht mit einem Slash (/) beginnen.&lt;br /&gt;
&lt;br /&gt;
==== Supergroups / Supergruppen ====&lt;br /&gt;
&lt;br /&gt;
Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
== Beispielszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Benachrichtigungen über Ereignisse ===&lt;br /&gt;
&lt;br /&gt;
Das einfachste Szenario für die Integration von Messaging-Diensten mit Fhem ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von Fhem zu informieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify global:INITIALIZED set telebotdevice message fhem newly started - just now !&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der Nachrichtentext &amp;quot;fhem newly started - just now !&amp;quot; an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald Fhem neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.&lt;br /&gt;
&lt;br /&gt;
=== Versand von Bildern ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Bilder auf dem Fhem-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015 &lt;br /&gt;
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=Fhem-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify wetter:report set telebotdevice sendPhoto /opt/fhem/wetter.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich.&lt;br /&gt;
&lt;br /&gt;
=== Versand von SVG-Plots ===&lt;br /&gt;
&lt;br /&gt;
Der Versand ist nicht direkt über das Device möglich, jedoch über den Perl-Befehl &#039;TelegramBot_ExecuteCommand&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{TelegramBot_ExecuteCommand($defs{&amp;quot;mein_telegramBot&amp;quot;}, meine_ZielID, &#039;{plotAsPng(&amp;quot;mein_SVG&amp;quot;)}&#039;);; return;;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist die Ziel-ID ohne das @-Zeichen, Anführungszeichen o.ä. anzugeben. Das Ziel kann auch eine Gruppen-ID (beginnend mit dem Minus-Zeichen) sein. Um das SVG nun noch mit einem Text zu versehen, muss eine Textnachricht dazu gesendet werden, was sich am einfachsten durch das Ausführen eines FHEM-Befehls auf Perl-Ebene realisieren lässt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{fhem &amp;quot;set mein_telegramBot message \@meine_ZielID Mein Text&amp;quot; ;; TelegramBot_ExecuteCommand($defs{&amp;quot;mein_telegramBot&amp;quot;}, meine_ZielID, &#039;{plotAsPng(&amp;quot;mein_SVG&amp;quot;)}&#039;);; return;;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Voraussetzungen für den Versand von SVG-Plots ====&lt;br /&gt;
Es muss das Modul libimage-librsvg-perl installiert sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libimage-librsvg-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Evtl. sind weitere Module erforderlich:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libgd-graph-perl&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install libgd-text-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empfang von Bildern oder ähnlichem ===&lt;br /&gt;
&lt;br /&gt;
Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading &amp;lt;code&amp;gt;msgFileId&amp;lt;/code&amp;gt; angelegt (&amp;lt;code&amp;gt;123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx&amp;lt;/code&amp;gt;) und im Reading &amp;lt;code&amp;gt;msgText&amp;lt;/code&amp;gt; steht dann so etwas wie&lt;br /&gt;
&amp;lt;code&amp;gt;received photo # Size: 107701&amp;lt;/code&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Über das Get-Kommando &amp;lt;code&amp;gt;urlForFile&amp;lt;/code&amp;gt; mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Versand von Emojis (Smileys) ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite &lt;br /&gt;
&lt;br /&gt;
http://apps.timwhitlock.info/emoji/tables/unicode (Spalte &amp;quot;Native&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
übernehmen und mit der Nachricht verschicken. &lt;br /&gt;
&lt;br /&gt;
Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).&lt;br /&gt;
&lt;br /&gt;
=== Kommandos auslösen ===&lt;br /&gt;
&lt;br /&gt;
Ein wichtiges Szenario ist die Möglichkeit Kommandos in Fhem ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: &amp;quot;cmdKeyword&amp;quot;)erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telebotdevice cmdKeyword doit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Somit kann man dann durch Nachrichten die mit &amp;quot;doit&amp;quot; beginnen Kommandos an Fhem senden, die ähnlich wie im Kommandoeingabefeld von Fhemweb dann von Fhem ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.&lt;br /&gt;
&lt;br /&gt;
Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit set schalter on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit list telegrambot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut &amp;quot;cmdRestrictedPeer&amp;quot; setzen, damit nicht jeder Kommandos auf dem Fhem-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Favoriten für Kommandos anlegen ===&lt;br /&gt;
&lt;br /&gt;
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf &amp;quot;Kurzwahl&amp;quot; legt.&lt;br /&gt;
&lt;br /&gt;
Beispiel-Kommandos wie z.B. &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 100&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.&lt;br /&gt;
&lt;br /&gt;
Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice favorites set TYPE=ROLLADEN pos 100;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.&lt;br /&gt;
Nehmen wir mal an man möchte die Favoriten mit &amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; ausführen können. Dazu muss dann das Attribut &amp;quot;cmdFavorites&amp;quot; setzen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice cmdFavorites /short&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man nun im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short 1&amp;lt;/code&amp;gt; an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.&lt;br /&gt;
&lt;br /&gt;
Ausserdem kann man im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; an den Bot schicken, dann antwortet der Bot mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favorites&lt;br /&gt;
&lt;br /&gt;
/short1 = set TYPE=ROLLADEN pos 100&lt;br /&gt;
&lt;br /&gt;
/short2 = set TYPE=ROLLADEN pos 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Antworten werden als Schaltflächen dargestellt (Telegram inline Keyboard) und können am Mobile-Client direkt angeklickt werden um sie auszuführen.&lt;br /&gt;
Um die Beschriftung der Schaltflächen zu optimieren, können die Befehle im Attribut favorites mit Beschreibungen versehen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[Rollaeden zu ]=set TYPE=ROLLADEN pos 100;[Rollaeden auf]=set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun antwortet der Bot auf das Schlüsselwort für die Favoriten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favorites&lt;br /&gt;
&lt;br /&gt;
/short1 = Rollaeden zu&lt;br /&gt;
&lt;br /&gt;
/short2 = Rollaeden auf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Github Repository für die Telegram-Fhem Entwicklung: https://github.com/viegener/Telegram-fhem&lt;br /&gt;
* Infos zum Telegram BotFather: https://core.telegram.org/bots#botfather&lt;br /&gt;
&lt;br /&gt;
* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm&lt;br /&gt;
* Source code für das modifizierte HTTPUtils-Modul zur Übertragung grosser Bilder: https://github.com/viegener/Telegram-fhem/blob/master/HttpUtils.pm&lt;br /&gt;
&lt;br /&gt;
* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=Fhem-Forum}}&lt;br /&gt;
* Telegram messaging system https://telegram.org/&lt;br /&gt;
* TelegramBot API https://core.telegram.org/bots/api&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Viegener|Viegener]] ([[Benutzer Diskussion:Viegener|Diskussion]]) 22:49, 11. Okt. 2015 (CEST)&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15175</id>
		<title>TelegramBot</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15175"/>
		<updated>2016-04-21T08:29:04Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Versand von SVG-Plots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModFTopic=38328&lt;br /&gt;
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]&lt;br /&gt;
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/). &lt;br /&gt;
Es entsteht eine Möglichkeit Benachrichtungen aus Fhem zu versenden, zum Beispiel Alarmmeldungen.&lt;br /&gt;
Ausserdem können auch Kommandos über Telegram an Fhem gesendet werden um Steuerungsbefehle in Fhem auszulösen.&lt;br /&gt;
&lt;br /&gt;
Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem Fhem-Server (anders als die Variante [[Telegram]]), sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe. Es muss jedoch das perl JSON modul installiert sein. &lt;br /&gt;
&lt;br /&gt;
== Über Telegram Instant Messaging ==&lt;br /&gt;
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei. &lt;br /&gt;
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und &lt;br /&gt;
können auch aus dem WebBrowser verwendet werden. &lt;br /&gt;
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt. &lt;br /&gt;
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.&lt;br /&gt;
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
Für die Unterstützung von &#039;&#039;WhatsApp&#039;&#039; siehe Modul [[yowsup]].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Unterstützt werden:&lt;br /&gt;
&lt;br /&gt;
* Versand von Textnachrichten &lt;br /&gt;
* Versand und Empfang von Bildern/Audio/etc &lt;br /&gt;
* Empfang von Textnachrichten von beliebigen Kontakten&lt;br /&gt;
* Kommandos in Fhem über Telegram-Nachrichten von aussen auslösen&lt;br /&gt;
* Ergebnisse der Kommandos zusenden lassen&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung des Moduls ist im Fhem Forum und in der (englischen) Dokumentation zum Modul in der Commandref diesem  {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über Fhem-Update verteilt.&lt;br /&gt;
&lt;br /&gt;
Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Für die Anlage eines TelegramBot Devices in Fhem ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#botfather BotFather] erzeugt. Dort mit dem Telegram-Befehl &amp;lt;code&amp;gt;/newbot&amp;lt;/code&amp;gt; einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf &amp;quot;Bot&amp;quot; enden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;amp;lt;name&amp;amp;gt; TelegramBot  &amp;amp;lt;token&amp;amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;define teleBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;code&amp;gt;pollingTimeout&amp;lt;/code&amp;gt; &#039;&#039;&#039;auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Registrierung eines neuen Bot ==&lt;br /&gt;
Zur Registrierung wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm)benötigt. Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.&lt;br /&gt;
Hier ein Beispiel, wie so ein Chat aussehen könnte:&lt;br /&gt;
&amp;lt;pre&amp;gt;Client: &lt;br /&gt;
/newbot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Alright, a new bot. How are we going to call it? Please choose a name for your bot. &lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
Mein Name &lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Good. Now let&#039;s choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Sorry, this username is already taken. Think of something different.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Done! Congratulations on your new bot.&lt;br /&gt;
You will find it at telegram.me/fhem1234_bot.&lt;br /&gt;
You can now add a description, about section and profile picture for your bot, see /help for a list of commands.&lt;br /&gt;
----------------&lt;br /&gt;
Use this token to access the HTTP API:&lt;br /&gt;
1234567890:AbCdefgHIJklmnOPQRst-uvwxyz &lt;br /&gt;
&lt;br /&gt;
For a description of the Bot API, see this page: https://core.telegram.org/bots/api &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
=== Privacyeinstellungen ===&lt;br /&gt;
&lt;br /&gt;
Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.&amp;lt;br&amp;gt;Beispielchat:&amp;lt;pre&amp;gt;Client:&lt;br /&gt;
/setprivacy&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Choose a bot to change group messages settings.&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
@fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
&#039;Enable&#039; - your bot will only receive messages that either start with the &#039;/&#039; symbol or mention the bot by username.&lt;br /&gt;
&#039;Disable&#039; - your bot will receive all messages that people send to groups.&lt;br /&gt;
Current status is: ENABLED&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
Disable&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Success! The new status is: DISABLED. /help&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kontakte ===&lt;br /&gt;
&lt;br /&gt;
Der Bot merkt sich die bereits bekannten Kontakte im Reading &amp;lt;code&amp;gt;Contacts&amp;lt;/code&amp;gt;. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @). &lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;123456:Ralf_Mustermann:@ralf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verschiedene Einträge werden durch Leerzeichen getrennt.&lt;br /&gt;
&lt;br /&gt;
Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl &amp;lt;code&amp;gt;replaceContacts&amp;lt;/code&amp;gt;. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.&lt;br /&gt;
&lt;br /&gt;
Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)&lt;br /&gt;
&lt;br /&gt;
=== Reset ===&lt;br /&gt;
&lt;br /&gt;
Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt;). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt. &lt;br /&gt;
&lt;br /&gt;
=== Gruppen ===&lt;br /&gt;
&lt;br /&gt;
Um eine Nachricht von FHEM an eine Gruppe zu senden, muss der BOT in die Gruppe aufgenommen werden. Nach dem Senden einer Nachricht an die Gruppe kann im Modul die Gruppen-ID ermittelt werden und zum Senden von Nachrichten verwendet werden. Wenn die Privacy-Einstellungen nicht auf &#039;Disabled&#039; gesetzt wurden, muss die Nachricht mit einem Slash (/) beginnen.&lt;br /&gt;
&lt;br /&gt;
==== Supergroups / Supergruppen ====&lt;br /&gt;
&lt;br /&gt;
Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
== Beispielszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Benachrichtigungen über Ereignisse ===&lt;br /&gt;
&lt;br /&gt;
Das einfachste Szenario für die Integration von Messaging-Diensten mit Fhem ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von Fhem zu informieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify global:INITIALIZED set telebotdevice message fhem newly started - just now !&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der Nachrichtentext &amp;quot;fhem newly started - just now !&amp;quot; an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald Fhem neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.&lt;br /&gt;
&lt;br /&gt;
=== Versand von Bildern ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Bilder auf dem Fhem-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015 &lt;br /&gt;
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=Fhem-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify wetter:report set telebotdevice sendPhoto /opt/fhem/wetter.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich.&lt;br /&gt;
&lt;br /&gt;
=== Versand von SVG-Plots ===&lt;br /&gt;
&lt;br /&gt;
Der Versand ist nicht direkt über das Device möglich, jedoch über den Perl-Befehl &#039;TelegramBot_ExecuteCommand&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{TelegramBot_ExecuteCommand($defs{&amp;quot;mein_telegramBot&amp;quot;}, meine_ZielID, &#039;{plotAsPng(&amp;quot;mein_SVG&amp;quot;)}&#039;);; return;;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist die Ziel-ID ohne das @-Zeichen, Anführungszeichen o.ä. anzugeben. Das Ziel kann auch eine Gruppen-ID (beginnend mit dem Minus-Zeichen) sein. Um das SVG nun noch mit einem Text zu versehen, muss eine Textnachricht dazu gesendet werden, was sich am einfachsten durch das Ausführen eines FHEM-Befehls auf Perl-Ebene realisieren lässt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{fhem &amp;quot;set mein_telegramBot message \@meine_ZielID Mein Text&amp;quot; ;; TelegramBot_ExecuteCommand($defs{&amp;quot;mein_telegramBot&amp;quot;}, meine_ZielID, &#039;{plotAsPng(&amp;quot;mein_SVG&amp;quot;)}&#039;);; return;;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Voraussetzungen für den Versand von SVG-Plots ====&lt;br /&gt;
Es muss das Modul libimage-librsvg-perl installiert sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libimage-librsvg-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Evtl. sind weitere Module erforderlich:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libgd-graph-perl&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install libgd-text-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empfang von Bildern oder ähnlichem ===&lt;br /&gt;
&lt;br /&gt;
Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading &amp;lt;code&amp;gt;msgFileId&amp;lt;/code&amp;gt; angelegt (&amp;lt;code&amp;gt;123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx&amp;lt;/code&amp;gt;) und im Reading &amp;lt;code&amp;gt;msgText&amp;lt;/code&amp;gt; steht dann so etwas wie&lt;br /&gt;
&amp;lt;code&amp;gt;received photo # Size: 107701&amp;lt;/code&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Über das Get-Kommando &amp;lt;code&amp;gt;urlForFile&amp;lt;/code&amp;gt; mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Versand von Emojis (Smileys) ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite &lt;br /&gt;
&lt;br /&gt;
http://apps.timwhitlock.info/emoji/tables/unicode (Spalte &amp;quot;Native&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
übernehmen und mit der Nachricht verschicken. &lt;br /&gt;
&lt;br /&gt;
Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).&lt;br /&gt;
&lt;br /&gt;
=== Kommandos auslösen ===&lt;br /&gt;
&lt;br /&gt;
Ein wichtiges Szenario ist die Möglichkeit Kommandos in Fhem ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: &amp;quot;cmdKeyword&amp;quot;)erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telebotdevice cmdKeyword doit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Somit kann man dann durch Nachrichten die mit &amp;quot;doit&amp;quot; beginnen Kommandos an Fhem senden, die ähnlich wie im Kommandoeingabefeld von Fhemweb dann von Fhem ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.&lt;br /&gt;
&lt;br /&gt;
Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit set schalter on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit list telegrambot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut &amp;quot;cmdRestrictedPeer&amp;quot; setzen, damit nicht jeder Kommandos auf dem Fhem-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Favoriten für Kommandos anlegen ===&lt;br /&gt;
&lt;br /&gt;
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf &amp;quot;Kurzwahl&amp;quot; legt.&lt;br /&gt;
&lt;br /&gt;
Beispiel-Kommandos wie z.B. &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 100&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.&lt;br /&gt;
&lt;br /&gt;
Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice favorites set TYPE=ROLLADEN pos 100;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.&lt;br /&gt;
Nehmen wir mal an man möchte die Favoriten mit &amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; ausführen können. Dazu muss dann das Attribut &amp;quot;cmdFavorites&amp;quot; setzen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice cmdFavorites /short&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man nun im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short 1&amp;lt;/code&amp;gt; an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.&lt;br /&gt;
&lt;br /&gt;
Ausserdem kann man im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; an den Bot schicken, dann antwortet der Bot mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favorites&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
set TYPE=ROLLADEN pos 100&lt;br /&gt;
2&lt;br /&gt;
set TYPE=ROLLADEN pos 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Github Repository für die Telegram-Fhem Entwicklung: https://github.com/viegener/Telegram-fhem&lt;br /&gt;
* Infos zum Telegram BotFather: https://core.telegram.org/bots#botfather&lt;br /&gt;
&lt;br /&gt;
* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm&lt;br /&gt;
* Source code für das modifizierte HTTPUtils-Modul zur Übertragung grosser Bilder: https://github.com/viegener/Telegram-fhem/blob/master/HttpUtils.pm&lt;br /&gt;
&lt;br /&gt;
* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=Fhem-Forum}}&lt;br /&gt;
* Telegram messaging system https://telegram.org/&lt;br /&gt;
* TelegramBot API https://core.telegram.org/bots/api&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Viegener|Viegener]] ([[Benutzer Diskussion:Viegener|Diskussion]]) 22:49, 11. Okt. 2015 (CEST)&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15174</id>
		<title>TelegramBot</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15174"/>
		<updated>2016-04-21T08:17:26Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Ergänzung um SVG-Versand basierend auf Diskussion dazu: https://forum.fhem.de/index.php/topic,38328.msg441787.html#msg441787&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModFTopic=38328&lt;br /&gt;
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]&lt;br /&gt;
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/). &lt;br /&gt;
Es entsteht eine Möglichkeit Benachrichtungen aus Fhem zu versenden, zum Beispiel Alarmmeldungen.&lt;br /&gt;
Ausserdem können auch Kommandos über Telegram an Fhem gesendet werden um Steuerungsbefehle in Fhem auszulösen.&lt;br /&gt;
&lt;br /&gt;
Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem Fhem-Server (anders als die Variante [[Telegram]]), sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe. Es muss jedoch das perl JSON modul installiert sein. &lt;br /&gt;
&lt;br /&gt;
== Über Telegram Instant Messaging ==&lt;br /&gt;
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei. &lt;br /&gt;
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und &lt;br /&gt;
können auch aus dem WebBrowser verwendet werden. &lt;br /&gt;
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt. &lt;br /&gt;
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.&lt;br /&gt;
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
Für die Unterstützung von &#039;&#039;WhatsApp&#039;&#039; siehe Modul [[yowsup]].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Unterstützt werden:&lt;br /&gt;
&lt;br /&gt;
* Versand von Textnachrichten &lt;br /&gt;
* Versand und Empfang von Bildern/Audio/etc &lt;br /&gt;
* Empfang von Textnachrichten von beliebigen Kontakten&lt;br /&gt;
* Kommandos in Fhem über Telegram-Nachrichten von aussen auslösen&lt;br /&gt;
* Ergebnisse der Kommandos zusenden lassen&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung des Moduls ist im Fhem Forum und in der (englischen) Dokumentation zum Modul in der Commandref diesem  {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über Fhem-Update verteilt.&lt;br /&gt;
&lt;br /&gt;
Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Für die Anlage eines TelegramBot Devices in Fhem ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#botfather BotFather] erzeugt. Dort mit dem Telegram-Befehl &amp;lt;code&amp;gt;/newbot&amp;lt;/code&amp;gt; einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf &amp;quot;Bot&amp;quot; enden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;amp;lt;name&amp;amp;gt; TelegramBot  &amp;amp;lt;token&amp;amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;define teleBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;code&amp;gt;pollingTimeout&amp;lt;/code&amp;gt; &#039;&#039;&#039;auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Registrierung eines neuen Bot ==&lt;br /&gt;
Zur Registrierung wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm)benötigt. Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.&lt;br /&gt;
Hier ein Beispiel, wie so ein Chat aussehen könnte:&lt;br /&gt;
&amp;lt;pre&amp;gt;Client: &lt;br /&gt;
/newbot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Alright, a new bot. How are we going to call it? Please choose a name for your bot. &lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
Mein Name &lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Good. Now let&#039;s choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Sorry, this username is already taken. Think of something different.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Done! Congratulations on your new bot.&lt;br /&gt;
You will find it at telegram.me/fhem1234_bot.&lt;br /&gt;
You can now add a description, about section and profile picture for your bot, see /help for a list of commands.&lt;br /&gt;
----------------&lt;br /&gt;
Use this token to access the HTTP API:&lt;br /&gt;
1234567890:AbCdefgHIJklmnOPQRst-uvwxyz &lt;br /&gt;
&lt;br /&gt;
For a description of the Bot API, see this page: https://core.telegram.org/bots/api &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
=== Privacyeinstellungen ===&lt;br /&gt;
&lt;br /&gt;
Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.&amp;lt;br&amp;gt;Beispielchat:&amp;lt;pre&amp;gt;Client:&lt;br /&gt;
/setprivacy&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Choose a bot to change group messages settings.&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
@fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
&#039;Enable&#039; - your bot will only receive messages that either start with the &#039;/&#039; symbol or mention the bot by username.&lt;br /&gt;
&#039;Disable&#039; - your bot will receive all messages that people send to groups.&lt;br /&gt;
Current status is: ENABLED&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
Disable&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Success! The new status is: DISABLED. /help&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kontakte ===&lt;br /&gt;
&lt;br /&gt;
Der Bot merkt sich die bereits bekannten Kontakte im Reading &amp;lt;code&amp;gt;Contacts&amp;lt;/code&amp;gt;. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @). &lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;123456:Ralf_Mustermann:@ralf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verschiedene Einträge werden durch Leerzeichen getrennt.&lt;br /&gt;
&lt;br /&gt;
Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl &amp;lt;code&amp;gt;replaceContacts&amp;lt;/code&amp;gt;. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.&lt;br /&gt;
&lt;br /&gt;
Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)&lt;br /&gt;
&lt;br /&gt;
=== Reset ===&lt;br /&gt;
&lt;br /&gt;
Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt;). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt. &lt;br /&gt;
&lt;br /&gt;
=== Gruppen ===&lt;br /&gt;
&lt;br /&gt;
Um eine Nachricht von FHEM an eine Gruppe zu senden, muss der BOT in die Gruppe aufgenommen werden. Nach dem Senden einer Nachricht an die Gruppe kann im Modul die Gruppen-ID ermittelt werden und zum Senden von Nachrichten verwendet werden. Wenn die Privacy-Einstellungen nicht auf &#039;Disabled&#039; gesetzt wurden, muss die Nachricht mit einem Slash (/) beginnen.&lt;br /&gt;
&lt;br /&gt;
==== Supergroups / Supergruppen ====&lt;br /&gt;
&lt;br /&gt;
Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
== Beispielszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Benachrichtigungen über Ereignisse ===&lt;br /&gt;
&lt;br /&gt;
Das einfachste Szenario für die Integration von Messaging-Diensten mit Fhem ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von Fhem zu informieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify global:INITIALIZED set telebotdevice message fhem newly started - just now !&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der Nachrichtentext &amp;quot;fhem newly started - just now !&amp;quot; an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald Fhem neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.&lt;br /&gt;
&lt;br /&gt;
=== Versand von Bildern ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Bilder auf dem Fhem-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015 &lt;br /&gt;
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=Fhem-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify wetter:report set telebotdevice sendPhoto /opt/fhem/wetter.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich.&lt;br /&gt;
&lt;br /&gt;
=== Versand von SVG-Plots ===&lt;br /&gt;
&lt;br /&gt;
Der Versand ist nicht direkt über das Device möglich, jedoch über den Perl-Befehl &#039;TelegramBot_ExecuteCommand&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{TelegramBot_ExecuteCommand($defs{&amp;quot;mein_telegramBot&amp;quot;}, meine_ZielID, &#039;{plotAsPng(&amp;quot;mein_SVG&amp;quot;)}&#039;);; return;;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist die Ziel-ID ohne das @-Zeichen, Anführungszeichen o.ä. anzugeben. Das Ziel kann jedoch auch eine Gruppen-ID (beginnend mit dem Minus-Zeichen) sein. Um das SVG nun noch mit einem Text zu versehen, muss eine Textnachricht dazu gesendet werden, was sich am Einfachsten durch das Ausführen eines FHEM-Befehls auf Perl-Ebene realisieren lässt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{fhem &amp;quot;set mein_telegramBot message \@meine_ZielID Mein Text&amp;quot; ;; TelegramBot_ExecuteCommand($defs{&amp;quot;mein_telegramBot&amp;quot;}, meine_ZielID, &#039;{plotAsPng(&amp;quot;mein_SVG&amp;quot;)}&#039;);; return;;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Voraussetzungen für den Versand von SVG-Plots ====&lt;br /&gt;
Es muss das Modul libimage-librsvg-perl installiert sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libimage-librsvg-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Evtl. sind weitere Module erforderlich:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libgd-graph-perl&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install libgd-text-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Empfang von Bildern oder ähnlichem ===&lt;br /&gt;
&lt;br /&gt;
Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading &amp;lt;code&amp;gt;msgFileId&amp;lt;/code&amp;gt; angelegt (&amp;lt;code&amp;gt;123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx&amp;lt;/code&amp;gt;) und im Reading &amp;lt;code&amp;gt;msgText&amp;lt;/code&amp;gt; steht dann so etwas wie&lt;br /&gt;
&amp;lt;code&amp;gt;received photo # Size: 107701&amp;lt;/code&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Über das Get-Kommando &amp;lt;code&amp;gt;urlForFile&amp;lt;/code&amp;gt; mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Versand von Emojis (Smileys) ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite &lt;br /&gt;
&lt;br /&gt;
http://apps.timwhitlock.info/emoji/tables/unicode (Spalte &amp;quot;Native&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
übernehmen und mit der Nachricht verschicken. &lt;br /&gt;
&lt;br /&gt;
Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).&lt;br /&gt;
&lt;br /&gt;
=== Kommandos auslösen ===&lt;br /&gt;
&lt;br /&gt;
Ein wichtiges Szenario ist die Möglichkeit Kommandos in Fhem ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: &amp;quot;cmdKeyword&amp;quot;)erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telebotdevice cmdKeyword doit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Somit kann man dann durch Nachrichten die mit &amp;quot;doit&amp;quot; beginnen Kommandos an Fhem senden, die ähnlich wie im Kommandoeingabefeld von Fhemweb dann von Fhem ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.&lt;br /&gt;
&lt;br /&gt;
Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit set schalter on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit list telegrambot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut &amp;quot;cmdRestrictedPeer&amp;quot; setzen, damit nicht jeder Kommandos auf dem Fhem-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Favoriten für Kommandos anlegen ===&lt;br /&gt;
&lt;br /&gt;
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf &amp;quot;Kurzwahl&amp;quot; legt.&lt;br /&gt;
&lt;br /&gt;
Beispiel-Kommandos wie z.B. &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 100&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.&lt;br /&gt;
&lt;br /&gt;
Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice favorites set TYPE=ROLLADEN pos 100;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.&lt;br /&gt;
Nehmen wir mal an man möchte die Favoriten mit &amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; ausführen können. Dazu muss dann das Attribut &amp;quot;cmdFavorites&amp;quot; setzen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice cmdFavorites /short&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man nun im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short 1&amp;lt;/code&amp;gt; an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.&lt;br /&gt;
&lt;br /&gt;
Ausserdem kann man im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; an den Bot schicken, dann antwortet der Bot mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favorites&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
set TYPE=ROLLADEN pos 100&lt;br /&gt;
2&lt;br /&gt;
set TYPE=ROLLADEN pos 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Github Repository für die Telegram-Fhem Entwicklung: https://github.com/viegener/Telegram-fhem&lt;br /&gt;
* Infos zum Telegram BotFather: https://core.telegram.org/bots#botfather&lt;br /&gt;
&lt;br /&gt;
* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm&lt;br /&gt;
* Source code für das modifizierte HTTPUtils-Modul zur Übertragung grosser Bilder: https://github.com/viegener/Telegram-fhem/blob/master/HttpUtils.pm&lt;br /&gt;
&lt;br /&gt;
* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=Fhem-Forum}}&lt;br /&gt;
* Telegram messaging system https://telegram.org/&lt;br /&gt;
* TelegramBot API https://core.telegram.org/bots/api&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Viegener|Viegener]] ([[Benutzer Diskussion:Viegener|Diskussion]]) 22:49, 11. Okt. 2015 (CEST)&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15013</id>
		<title>TelegramBot</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15013"/>
		<updated>2016-04-06T20:24:00Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Supergroups / Supergruppen */  - Ergänzung um allgemeines Gruppen-Handling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModFTopic=38328&lt;br /&gt;
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]&lt;br /&gt;
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/). &lt;br /&gt;
Es entsteht eine Möglichkeit Benachrichtungen aus Fhem zu versenden, zum Beispiel Alarmmeldungen.&lt;br /&gt;
Ausserdem können auch Kommandos über Telegram an Fhem gesendet werden um Steuerungsbefehle in Fhem auszulösen.&lt;br /&gt;
&lt;br /&gt;
Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem Fhem-Server (anders als die Variante [[Telegram]]), sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe.&lt;br /&gt;
&lt;br /&gt;
== Über Telegram Instant Messaging ==&lt;br /&gt;
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei. &lt;br /&gt;
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und &lt;br /&gt;
können auch aus dem WebBrowser verwendet werden. &lt;br /&gt;
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt. &lt;br /&gt;
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.&lt;br /&gt;
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
Für die Unterstützung von &#039;&#039;WhatsApp&#039;&#039; siehe Modul [[yowsup]].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Unterstützt werden:&lt;br /&gt;
&lt;br /&gt;
* Versand von Textnachrichten &lt;br /&gt;
* Versand und Empfang von Bildern/Audio/etc &lt;br /&gt;
* Empfang von Textnachrichten von beliebigen Kontakten&lt;br /&gt;
* Kommandos in Fhem über Telegram-Nachrichten von aussen auslösen&lt;br /&gt;
* Ergebnisse der Kommandos zusenden lassen&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung des Moduls ist im Fhem Forum und in der (englischen) Dokumentation zum Modul in der Commandref diesem  {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über Fhem-Update verteilt.&lt;br /&gt;
&lt;br /&gt;
Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Für die Anlage eines TelegramBot Devices in Fhem ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#botfather BotFather] erzeugt. Dort mit dem Telegram-Befehl &amp;lt;code&amp;gt;/newbot&amp;lt;/code&amp;gt; einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf &amp;quot;Bot&amp;quot; enden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;amp;lt;name&amp;amp;gt; TelegramBot  &amp;amp;lt;token&amp;amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;define teleBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;code&amp;gt;pollingTimeout&amp;lt;/code&amp;gt; &#039;&#039;&#039;auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Registrierung eines neuen Bot ==&lt;br /&gt;
Zur Registrierung wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm)benötigt. Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.&lt;br /&gt;
Hier ein Beispiel, wie so ein Chat aussehen könnte:&lt;br /&gt;
&amp;lt;pre&amp;gt;Client: &lt;br /&gt;
/newbot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Alright, a new bot. How are we going to call it? Please choose a name for your bot. &lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
Mein Name &lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Good. Now let&#039;s choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Sorry, this username is already taken. Think of something different.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Done! Congratulations on your new bot.&lt;br /&gt;
You will find it at telegram.me/fhem1234_bot.&lt;br /&gt;
You can now add a description, about section and profile picture for your bot, see /help for a list of commands.&lt;br /&gt;
----------------&lt;br /&gt;
Use this token to access the HTTP API:&lt;br /&gt;
1234567890:AbCdefgHIJklmnOPQRst-uvwxyz &lt;br /&gt;
&lt;br /&gt;
For a description of the Bot API, see this page: https://core.telegram.org/bots/api &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
=== Privacyeinstellungen ===&lt;br /&gt;
&lt;br /&gt;
Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.&amp;lt;br&amp;gt;Beispielchat:&amp;lt;pre&amp;gt;Client:&lt;br /&gt;
/setprivacy&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Choose a bot to change group messages settings.&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
@fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
&#039;Enable&#039; - your bot will only receive messages that either start with the &#039;/&#039; symbol or mention the bot by username.&lt;br /&gt;
&#039;Disable&#039; - your bot will receive all messages that people send to groups.&lt;br /&gt;
Current status is: ENABLED&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
Disable&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Success! The new status is: DISABLED. /help&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kontakte ===&lt;br /&gt;
&lt;br /&gt;
Der Bot merkt sich die bereits bekannten Kontakte im Reading &amp;lt;code&amp;gt;Contacts&amp;lt;/code&amp;gt;. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @). &lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;123456:Ralf_Mustermann:@ralf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verschiedene Einträge werden durch Leerzeichen getrennt.&lt;br /&gt;
&lt;br /&gt;
Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl &amp;lt;code&amp;gt;replaceContacts&amp;lt;/code&amp;gt;. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.&lt;br /&gt;
&lt;br /&gt;
Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)&lt;br /&gt;
&lt;br /&gt;
=== Reset ===&lt;br /&gt;
&lt;br /&gt;
Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt;). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt. &lt;br /&gt;
&lt;br /&gt;
=== Gruppen ===&lt;br /&gt;
&lt;br /&gt;
Um eine Nachricht von FHEM an eine Gruppe zu senden, muss der BOT in die Gruppe aufgenommen werden. Nach dem Senden einer Nachricht an die Gruppe kann im Modul die Gruppen-ID ermittelt werden und zum Senden von Nachrichten verwendet werden. Wenn die Privacy-Einstellungen nicht auf &#039;Disabled&#039; gesetzt wurden, muss die Nachricht mit einem Slash (/) beginnen.&lt;br /&gt;
&lt;br /&gt;
==== Supergroups / Supergruppen ====&lt;br /&gt;
&lt;br /&gt;
Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
== Beispielszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Benachrichtigungen über Ereignisse ===&lt;br /&gt;
&lt;br /&gt;
Das einfachste Szenario für die Integration von Messaging-Diensten mit Fhem ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von Fhem zu informieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify global:INITIALIZED set telebotdevice message fhem newly started - just now !&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der Nachrichtentext &amp;quot;fhem newly started - just now !&amp;quot; an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald Fhem neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.&lt;br /&gt;
&lt;br /&gt;
=== Versand von Bildern ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Bilder auf dem Fhem-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015 &lt;br /&gt;
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=Fhem-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify wetter:report set telebotdevice sendPhoto /opt/fhem/wetter.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Empfang von Bildern oder ähnlichem ===&lt;br /&gt;
&lt;br /&gt;
Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading &amp;lt;code&amp;gt;msgFileId&amp;lt;/code&amp;gt; angelegt (&amp;lt;code&amp;gt;123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx&amp;lt;/code&amp;gt;) und im Reading &amp;lt;code&amp;gt;msgText&amp;lt;/code&amp;gt; steht dann so etwas wie&lt;br /&gt;
&amp;lt;code&amp;gt;received photo # Size: 107701&amp;lt;/code&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Über das Get-Kommando &amp;lt;code&amp;gt;urlForFile&amp;lt;/code&amp;gt; mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Versand von Emojis (Smileys) ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite &lt;br /&gt;
&lt;br /&gt;
http://apps.timwhitlock.info/emoji/tables/unicode (Spalte &amp;quot;Native&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
übernehmen und mit der Nachricht verschicken. &lt;br /&gt;
&lt;br /&gt;
Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).&lt;br /&gt;
&lt;br /&gt;
=== Kommandos auslösen ===&lt;br /&gt;
&lt;br /&gt;
Ein wichtiges Szenario ist die Möglichkeit Kommandos in Fhem ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: &amp;quot;cmdKeyword&amp;quot;)erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telebotdevice cmdKeyword doit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Somit kann man dann durch Nachrichten die mit &amp;quot;doit&amp;quot; beginnen Kommandos an Fhem senden, die ähnlich wie im Kommandoeingabefeld von Fhemweb dann von Fhem ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.&lt;br /&gt;
&lt;br /&gt;
Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit set schalter on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit list telegrambot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut &amp;quot;cmdRestrictedPeer&amp;quot; setzen, damit nicht jeder Kommandos auf dem Fhem-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Favoriten für Kommandos anlegen ===&lt;br /&gt;
&lt;br /&gt;
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf &amp;quot;Kurzwahl&amp;quot; legt.&lt;br /&gt;
&lt;br /&gt;
Beispiel-Kommandos wie z.B. &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 100&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.&lt;br /&gt;
&lt;br /&gt;
Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice favorites set TYPE=ROLLADEN pos 100;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.&lt;br /&gt;
Nehmen wir mal an man möchte die Favoriten mit &amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; ausführen können. Dazu muss dann das Attribut &amp;quot;cmdFavorites&amp;quot; setzen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice cmdFavorites /short&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man nun im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short 1&amp;lt;/code&amp;gt; an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.&lt;br /&gt;
&lt;br /&gt;
Ausserdem kann man im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; an den Bot schicken, dann antwortet der Bot mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favorites&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
set TYPE=ROLLADEN pos 100&lt;br /&gt;
2&lt;br /&gt;
set TYPE=ROLLADEN pos 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Github Repository für die Telegram-Fhem Entwicklung: https://github.com/viegener/Telegram-fhem&lt;br /&gt;
* Infos zum Telegram BotFather: https://core.telegram.org/bots#botfather&lt;br /&gt;
&lt;br /&gt;
* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm&lt;br /&gt;
* Source code für das modifizierte HTTPUtils-Modul zur Übertragung grosser Bilder: https://github.com/viegener/Telegram-fhem/blob/master/HttpUtils.pm&lt;br /&gt;
&lt;br /&gt;
* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=Fhem-Forum}}&lt;br /&gt;
* Telegram messaging system https://telegram.org/&lt;br /&gt;
* TelegramBot API https://core.telegram.org/bots/api&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Viegener|Viegener]] ([[Benutzer Diskussion:Viegener|Diskussion]]) 22:49, 11. Okt. 2015 (CEST)&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15012</id>
		<title>TelegramBot</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15012"/>
		<updated>2016-04-06T18:40:43Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Privacyeinstellungen */ Ergänzung Beispielchat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModFTopic=38328&lt;br /&gt;
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]&lt;br /&gt;
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/). &lt;br /&gt;
Es entsteht eine Möglichkeit Benachrichtungen aus Fhem zu versenden, zum Beispiel Alarmmeldungen.&lt;br /&gt;
Ausserdem können auch Kommandos über Telegram an Fhem gesendet werden um Steuerungsbefehle in Fhem auszulösen.&lt;br /&gt;
&lt;br /&gt;
Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem Fhem-Server (anders als die Variante [[Telegram]]), sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe.&lt;br /&gt;
&lt;br /&gt;
== Über Telegram Instant Messaging ==&lt;br /&gt;
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei. &lt;br /&gt;
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und &lt;br /&gt;
können auch aus dem WebBrowser verwendet werden. &lt;br /&gt;
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt. &lt;br /&gt;
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.&lt;br /&gt;
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
Für die Unterstützung von &#039;&#039;WhatsApp&#039;&#039; siehe Modul [[yowsup]].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Unterstützt werden:&lt;br /&gt;
&lt;br /&gt;
* Versand von Textnachrichten &lt;br /&gt;
* Versand und Empfang von Bildern/Audio/etc &lt;br /&gt;
* Empfang von Textnachrichten von beliebigen Kontakten&lt;br /&gt;
* Kommandos in Fhem über Telegram-Nachrichten von aussen auslösen&lt;br /&gt;
* Ergebnisse der Kommandos zusenden lassen&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung des Moduls ist im Fhem Forum und in der (englischen) Dokumentation zum Modul in der Commandref diesem  {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über Fhem-Update verteilt.&lt;br /&gt;
&lt;br /&gt;
Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Für die Anlage eines TelegramBot Devices in Fhem ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#botfather BotFather] erzeugt. Dort mit dem Telegram-Befehl &amp;lt;code&amp;gt;/newbot&amp;lt;/code&amp;gt; einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf &amp;quot;Bot&amp;quot; enden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;amp;lt;name&amp;amp;gt; TelegramBot  &amp;amp;lt;token&amp;amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;define teleBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;code&amp;gt;pollingTimeout&amp;lt;/code&amp;gt; &#039;&#039;&#039;auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Registrierung eines neuen Bot ==&lt;br /&gt;
Zur Registrierung wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm)benötigt. Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.&lt;br /&gt;
Hier ein Beispiel, wie so ein Chat aussehen könnte:&lt;br /&gt;
&amp;lt;pre&amp;gt;Client: &lt;br /&gt;
/newbot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Alright, a new bot. How are we going to call it? Please choose a name for your bot. &lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
Mein Name &lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Good. Now let&#039;s choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Sorry, this username is already taken. Think of something different.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Done! Congratulations on your new bot.&lt;br /&gt;
You will find it at telegram.me/fhem1234_bot.&lt;br /&gt;
You can now add a description, about section and profile picture for your bot, see /help for a list of commands.&lt;br /&gt;
----------------&lt;br /&gt;
Use this token to access the HTTP API:&lt;br /&gt;
1234567890:AbCdefgHIJklmnOPQRst-uvwxyz &lt;br /&gt;
&lt;br /&gt;
For a description of the Bot API, see this page: https://core.telegram.org/bots/api &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
=== Privacyeinstellungen ===&lt;br /&gt;
&lt;br /&gt;
Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.&amp;lt;br&amp;gt;Beispielchat:&amp;lt;pre&amp;gt;Client:&lt;br /&gt;
/setprivacy&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Choose a bot to change group messages settings.&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
@fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
&#039;Enable&#039; - your bot will only receive messages that either start with the &#039;/&#039; symbol or mention the bot by username.&lt;br /&gt;
&#039;Disable&#039; - your bot will receive all messages that people send to groups.&lt;br /&gt;
Current status is: ENABLED&lt;br /&gt;
----------------&lt;br /&gt;
Client:&lt;br /&gt;
Disable&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Success! The new status is: DISABLED. /help&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kontakte ===&lt;br /&gt;
&lt;br /&gt;
Der Bot merkt sich die bereits bekannten Kontakte im Reading &amp;lt;code&amp;gt;Contacts&amp;lt;/code&amp;gt;. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @). &lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;123456:Ralf_Mustermann:@ralf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verschiedene Einträge werden durch Leerzeichen getrennt.&lt;br /&gt;
&lt;br /&gt;
Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl &amp;lt;code&amp;gt;replaceContacts&amp;lt;/code&amp;gt;. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.&lt;br /&gt;
&lt;br /&gt;
Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)&lt;br /&gt;
&lt;br /&gt;
=== Reset ===&lt;br /&gt;
&lt;br /&gt;
Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt;). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt. &lt;br /&gt;
&lt;br /&gt;
=== Supergroups / Supergruppen ===&lt;br /&gt;
&lt;br /&gt;
Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beispielszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Benachrichtigungen über Ereignisse ===&lt;br /&gt;
&lt;br /&gt;
Das einfachste Szenario für die Integration von Messaging-Diensten mit Fhem ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von Fhem zu informieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify global:INITIALIZED set telebotdevice message fhem newly started - just now !&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der Nachrichtentext &amp;quot;fhem newly started - just now !&amp;quot; an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald Fhem neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.&lt;br /&gt;
&lt;br /&gt;
=== Versand von Bildern ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Bilder auf dem Fhem-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015 &lt;br /&gt;
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=Fhem-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify wetter:report set telebotdevice sendPhoto /opt/fhem/wetter.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Empfang von Bildern oder ähnlichem ===&lt;br /&gt;
&lt;br /&gt;
Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading &amp;lt;code&amp;gt;msgFileId&amp;lt;/code&amp;gt; angelegt (&amp;lt;code&amp;gt;123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx&amp;lt;/code&amp;gt;) und im Reading &amp;lt;code&amp;gt;msgText&amp;lt;/code&amp;gt; steht dann so etwas wie&lt;br /&gt;
&amp;lt;code&amp;gt;received photo # Size: 107701&amp;lt;/code&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Über das Get-Kommando &amp;lt;code&amp;gt;urlForFile&amp;lt;/code&amp;gt; mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Versand von Emojis (Smileys) ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite &lt;br /&gt;
&lt;br /&gt;
http://apps.timwhitlock.info/emoji/tables/unicode (Spalte &amp;quot;Native&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
übernehmen und mit der Nachricht verschicken. &lt;br /&gt;
&lt;br /&gt;
Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).&lt;br /&gt;
&lt;br /&gt;
=== Kommandos auslösen ===&lt;br /&gt;
&lt;br /&gt;
Ein wichtiges Szenario ist die Möglichkeit Kommandos in Fhem ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: &amp;quot;cmdKeyword&amp;quot;)erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telebotdevice cmdKeyword doit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Somit kann man dann durch Nachrichten die mit &amp;quot;doit&amp;quot; beginnen Kommandos an Fhem senden, die ähnlich wie im Kommandoeingabefeld von Fhemweb dann von Fhem ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.&lt;br /&gt;
&lt;br /&gt;
Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit set schalter on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit list telegrambot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut &amp;quot;cmdRestrictedPeer&amp;quot; setzen, damit nicht jeder Kommandos auf dem Fhem-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Favoriten für Kommandos anlegen ===&lt;br /&gt;
&lt;br /&gt;
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf &amp;quot;Kurzwahl&amp;quot; legt.&lt;br /&gt;
&lt;br /&gt;
Beispiel-Kommandos wie z.B. &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 100&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.&lt;br /&gt;
&lt;br /&gt;
Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice favorites set TYPE=ROLLADEN pos 100;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.&lt;br /&gt;
Nehmen wir mal an man möchte die Favoriten mit &amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; ausführen können. Dazu muss dann das Attribut &amp;quot;cmdFavorites&amp;quot; setzen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice cmdFavorites /short&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man nun im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short 1&amp;lt;/code&amp;gt; an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.&lt;br /&gt;
&lt;br /&gt;
Ausserdem kann man im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; an den Bot schicken, dann antwortet der Bot mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favorites&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
set TYPE=ROLLADEN pos 100&lt;br /&gt;
2&lt;br /&gt;
set TYPE=ROLLADEN pos 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Github Repository für die Telegram-Fhem Entwicklung: https://github.com/viegener/Telegram-fhem&lt;br /&gt;
* Infos zum Telegram BotFather: https://core.telegram.org/bots#botfather&lt;br /&gt;
&lt;br /&gt;
* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm&lt;br /&gt;
* Source code für das modifizierte HTTPUtils-Modul zur Übertragung grosser Bilder: https://github.com/viegener/Telegram-fhem/blob/master/HttpUtils.pm&lt;br /&gt;
&lt;br /&gt;
* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=Fhem-Forum}}&lt;br /&gt;
* Telegram messaging system https://telegram.org/&lt;br /&gt;
* TelegramBot API https://core.telegram.org/bots/api&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Viegener|Viegener]] ([[Benutzer Diskussion:Viegener|Diskussion]]) 22:49, 11. Okt. 2015 (CEST)&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15011</id>
		<title>TelegramBot</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15011"/>
		<updated>2016-04-06T17:26:09Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: neuer Abschnitt Registrierung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModFTopic=38328&lt;br /&gt;
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]&lt;br /&gt;
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/). &lt;br /&gt;
Es entsteht eine Möglichkeit Benachrichtungen aus Fhem zu versenden, zum Beispiel Alarmmeldungen.&lt;br /&gt;
Ausserdem können auch Kommandos über Telegram an Fhem gesendet werden um Steuerungsbefehle in Fhem auszulösen.&lt;br /&gt;
&lt;br /&gt;
Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem Fhem-Server (anders als die Variante [[Telegram]]), sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe.&lt;br /&gt;
&lt;br /&gt;
== Über Telegram Instant Messaging ==&lt;br /&gt;
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei. &lt;br /&gt;
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und &lt;br /&gt;
können auch aus dem WebBrowser verwendet werden. &lt;br /&gt;
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt. &lt;br /&gt;
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.&lt;br /&gt;
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
Für die Unterstützung von &#039;&#039;WhatsApp&#039;&#039; siehe Modul [[yowsup]].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Unterstützt werden:&lt;br /&gt;
&lt;br /&gt;
* Versand von Textnachrichten &lt;br /&gt;
* Versand und Empfang von Bildern/Audio/etc &lt;br /&gt;
* Empfang von Textnachrichten von beliebigen Kontakten&lt;br /&gt;
* Kommandos in Fhem über Telegram-Nachrichten von aussen auslösen&lt;br /&gt;
* Ergebnisse der Kommandos zusenden lassen&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung des Moduls ist im Fhem Forum und in der (englischen) Dokumentation zum Modul in der Commandref diesem  {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über Fhem-Update verteilt.&lt;br /&gt;
&lt;br /&gt;
Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Für die Anlage eines TelegramBot Devices in Fhem ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#botfather BotFather] erzeugt. Dort mit dem Telegram-Befehl &amp;lt;code&amp;gt;/newbot&amp;lt;/code&amp;gt; einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf &amp;quot;Bot&amp;quot; enden.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;amp;lt;name&amp;amp;gt; TelegramBot  &amp;amp;lt;token&amp;amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;define teleBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;code&amp;gt;pollingTimeout&amp;lt;/code&amp;gt; &#039;&#039;&#039;auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Registrierung eines neuen Bot ==&lt;br /&gt;
Zur Registrierung wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm)benötigt. Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.&lt;br /&gt;
Hier ein Beispiel, wie so ein Chat aussehen könnte:&lt;br /&gt;
&amp;lt;pre&amp;gt;Client: &lt;br /&gt;
/newbot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather:&lt;br /&gt;
Alright, a new bot. How are we going to call it? Please choose a name for your bot. &lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
Mein Name &lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Good. Now let&#039;s choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Sorry, this username is already taken. Think of something different.&lt;br /&gt;
----------------&lt;br /&gt;
Client: &lt;br /&gt;
fhem1234_bot&lt;br /&gt;
----------------&lt;br /&gt;
BotFather: &lt;br /&gt;
Done! Congratulations on your new bot.&lt;br /&gt;
You will find it at telegram.me/fhem1234_bot.&lt;br /&gt;
You can now add a description, about section and profile picture for your bot, see /help for a list of commands.&lt;br /&gt;
----------------&lt;br /&gt;
Use this token to access the HTTP API:&lt;br /&gt;
1234567890:AbCdefgHIJklmnOPQRst-uvwxyz &lt;br /&gt;
&lt;br /&gt;
For a description of the Bot API, see this page: https://core.telegram.org/bots/api &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
=== Privacyeinstellungen ===&lt;br /&gt;
&lt;br /&gt;
Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.&lt;br /&gt;
&lt;br /&gt;
=== Kontakte ===&lt;br /&gt;
&lt;br /&gt;
Der Bot merkt sich die bereits bekannten Kontakte im Reading &amp;lt;code&amp;gt;Contacts&amp;lt;/code&amp;gt;. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @). &lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;123456:Ralf_Mustermann:@ralf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verschiedene Einträge werden durch Leerzeichen getrennt.&lt;br /&gt;
&lt;br /&gt;
Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl &amp;lt;code&amp;gt;replaceContacts&amp;lt;/code&amp;gt;. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.&lt;br /&gt;
&lt;br /&gt;
Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)&lt;br /&gt;
&lt;br /&gt;
=== Reset ===&lt;br /&gt;
&lt;br /&gt;
Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt;). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt. &lt;br /&gt;
&lt;br /&gt;
=== Supergroups / Supergruppen ===&lt;br /&gt;
&lt;br /&gt;
Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beispielszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Benachrichtigungen über Ereignisse ===&lt;br /&gt;
&lt;br /&gt;
Das einfachste Szenario für die Integration von Messaging-Diensten mit Fhem ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von Fhem zu informieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify global:INITIALIZED set telebotdevice message fhem newly started - just now !&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der Nachrichtentext &amp;quot;fhem newly started - just now !&amp;quot; an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald Fhem neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.&lt;br /&gt;
&lt;br /&gt;
=== Versand von Bildern ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Bilder auf dem Fhem-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015 &lt;br /&gt;
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=Fhem-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify wetter:report set telebotdevice sendPhoto /opt/fhem/wetter.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Empfang von Bildern oder ähnlichem ===&lt;br /&gt;
&lt;br /&gt;
Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading &amp;lt;code&amp;gt;msgFileId&amp;lt;/code&amp;gt; angelegt (&amp;lt;code&amp;gt;123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx&amp;lt;/code&amp;gt;) und im Reading &amp;lt;code&amp;gt;msgText&amp;lt;/code&amp;gt; steht dann so etwas wie&lt;br /&gt;
&amp;lt;code&amp;gt;received photo # Size: 107701&amp;lt;/code&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Über das Get-Kommando &amp;lt;code&amp;gt;urlForFile&amp;lt;/code&amp;gt; mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Versand von Emojis (Smileys) ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite &lt;br /&gt;
&lt;br /&gt;
http://apps.timwhitlock.info/emoji/tables/unicode (Spalte &amp;quot;Native&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
übernehmen und mit der Nachricht verschicken. &lt;br /&gt;
&lt;br /&gt;
Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).&lt;br /&gt;
&lt;br /&gt;
=== Kommandos auslösen ===&lt;br /&gt;
&lt;br /&gt;
Ein wichtiges Szenario ist die Möglichkeit Kommandos in Fhem ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: &amp;quot;cmdKeyword&amp;quot;)erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telebotdevice cmdKeyword doit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Somit kann man dann durch Nachrichten die mit &amp;quot;doit&amp;quot; beginnen Kommandos an Fhem senden, die ähnlich wie im Kommandoeingabefeld von Fhemweb dann von Fhem ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.&lt;br /&gt;
&lt;br /&gt;
Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit set schalter on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit list telegrambot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut &amp;quot;cmdRestrictedPeer&amp;quot; setzen, damit nicht jeder Kommandos auf dem Fhem-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Favoriten für Kommandos anlegen ===&lt;br /&gt;
&lt;br /&gt;
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf &amp;quot;Kurzwahl&amp;quot; legt.&lt;br /&gt;
&lt;br /&gt;
Beispiel-Kommandos wie z.B. &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 100&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.&lt;br /&gt;
&lt;br /&gt;
Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice favorites set TYPE=ROLLADEN pos 100;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.&lt;br /&gt;
Nehmen wir mal an man möchte die Favoriten mit &amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; ausführen können. Dazu muss dann das Attribut &amp;quot;cmdFavorites&amp;quot; setzen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice cmdFavorites /short&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man nun im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short 1&amp;lt;/code&amp;gt; an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.&lt;br /&gt;
&lt;br /&gt;
Ausserdem kann man im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; an den Bot schicken, dann antwortet der Bot mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favorites&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
set TYPE=ROLLADEN pos 100&lt;br /&gt;
2&lt;br /&gt;
set TYPE=ROLLADEN pos 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Github Repository für die Telegram-Fhem Entwicklung: https://github.com/viegener/Telegram-fhem&lt;br /&gt;
* Infos zum Telegram BotFather: https://core.telegram.org/bots#botfather&lt;br /&gt;
&lt;br /&gt;
* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm&lt;br /&gt;
* Source code für das modifizierte HTTPUtils-Modul zur Übertragung grosser Bilder: https://github.com/viegener/Telegram-fhem/blob/master/HttpUtils.pm&lt;br /&gt;
&lt;br /&gt;
* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=Fhem-Forum}}&lt;br /&gt;
* Telegram messaging system https://telegram.org/&lt;br /&gt;
* TelegramBot API https://core.telegram.org/bots/api&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Viegener|Viegener]] ([[Benutzer Diskussion:Viegener|Diskussion]]) 22:49, 11. Okt. 2015 (CEST)&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15010</id>
		<title>TelegramBot</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15010"/>
		<updated>2016-04-06T17:10:59Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Hinweise zum Betrieb mit Fhem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModFTopic=38328&lt;br /&gt;
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]&lt;br /&gt;
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/). &lt;br /&gt;
Es entsteht eine Möglichkeit Benachrichtungen aus Fhem zu versenden, zum Beispiel Alarmmeldungen.&lt;br /&gt;
Ausserdem können auch Kommandos über Telegram an Fhem gesendet werden um Steuerungsbefehle in Fhem auszulösen.&lt;br /&gt;
&lt;br /&gt;
Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem Fhem-Server (anders als die Variante [[Telegram]]), sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe.&lt;br /&gt;
&lt;br /&gt;
== Über Telegram Instant Messaging ==&lt;br /&gt;
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei. &lt;br /&gt;
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und &lt;br /&gt;
können auch aus dem WebBrowser verwendet werden. &lt;br /&gt;
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt. &lt;br /&gt;
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.&lt;br /&gt;
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
Für die Unterstützung von &#039;&#039;WhatsApp&#039;&#039; siehe Modul [[yowsup]].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Unterstützt werden:&lt;br /&gt;
&lt;br /&gt;
* Versand von Textnachrichten &lt;br /&gt;
* Versand und Empfang von Bildern/Audio/etc &lt;br /&gt;
* Empfang von Textnachrichten von beliebigen Kontakten&lt;br /&gt;
* Kommandos in Fhem über Telegram-Nachrichten von aussen auslösen&lt;br /&gt;
* Ergebnisse der Kommandos zusenden lassen&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung des Moduls ist im Fhem Forum und in der (englischen) Dokumentation zum Modul in der Commandref diesem  {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über Fhem-Update verteilt.&lt;br /&gt;
&lt;br /&gt;
Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Für die Anlage eines TelegramBot Devices in Fhem ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#botfather BotFather] erzeugt. Dort mit dem Telegram-Befehl &amp;lt;code&amp;gt;/newbot&amp;lt;/code&amp;gt; einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf &amp;quot;Bot&amp;quot; enden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dazu wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm). Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;amp;lt;name&amp;amp;gt; TelegramBot  &amp;amp;lt;token&amp;amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;define teleBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;code&amp;gt;pollingTimeout&amp;lt;/code&amp;gt; &#039;&#039;&#039;auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
=== Privacyeinstellungen ===&lt;br /&gt;
&lt;br /&gt;
Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.&lt;br /&gt;
&lt;br /&gt;
=== Kontakte ===&lt;br /&gt;
&lt;br /&gt;
Der Bot merkt sich die bereits bekannten Kontakte im Reading &amp;lt;code&amp;gt;Contacts&amp;lt;/code&amp;gt;. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @). &lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;123456:Ralf_Mustermann:@ralf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verschiedene Einträge werden durch Leerzeichen getrennt.&lt;br /&gt;
&lt;br /&gt;
Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl &amp;lt;code&amp;gt;replaceContacts&amp;lt;/code&amp;gt;. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.&lt;br /&gt;
&lt;br /&gt;
Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)&lt;br /&gt;
&lt;br /&gt;
=== Reset ===&lt;br /&gt;
&lt;br /&gt;
Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt;). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt. &lt;br /&gt;
&lt;br /&gt;
=== Supergroups / Supergruppen ===&lt;br /&gt;
&lt;br /&gt;
Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beispielszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Benachrichtigungen über Ereignisse ===&lt;br /&gt;
&lt;br /&gt;
Das einfachste Szenario für die Integration von Messaging-Diensten mit Fhem ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von Fhem zu informieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify global:INITIALIZED set telebotdevice message fhem newly started - just now !&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der Nachrichtentext &amp;quot;fhem newly started - just now !&amp;quot; an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald Fhem neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.&lt;br /&gt;
&lt;br /&gt;
=== Versand von Bildern ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Bilder auf dem Fhem-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015 &lt;br /&gt;
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=Fhem-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify wetter:report set telebotdevice sendPhoto /opt/fhem/wetter.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Empfang von Bildern oder ähnlichem ===&lt;br /&gt;
&lt;br /&gt;
Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading &amp;lt;code&amp;gt;msgFileId&amp;lt;/code&amp;gt; angelegt (&amp;lt;code&amp;gt;123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx&amp;lt;/code&amp;gt;) und im Reading &amp;lt;code&amp;gt;msgText&amp;lt;/code&amp;gt; steht dann so etwas wie&lt;br /&gt;
&amp;lt;code&amp;gt;received photo # Size: 107701&amp;lt;/code&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Über das Get-Kommando &amp;lt;code&amp;gt;urlForFile&amp;lt;/code&amp;gt; mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Versand von Emojis (Smileys) ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite &lt;br /&gt;
&lt;br /&gt;
http://apps.timwhitlock.info/emoji/tables/unicode (Spalte &amp;quot;Native&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
übernehmen und mit der Nachricht verschicken. &lt;br /&gt;
&lt;br /&gt;
Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).&lt;br /&gt;
&lt;br /&gt;
=== Kommandos auslösen ===&lt;br /&gt;
&lt;br /&gt;
Ein wichtiges Szenario ist die Möglichkeit Kommandos in Fhem ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: &amp;quot;cmdKeyword&amp;quot;)erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telebotdevice cmdKeyword doit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Somit kann man dann durch Nachrichten die mit &amp;quot;doit&amp;quot; beginnen Kommandos an Fhem senden, die ähnlich wie im Kommandoeingabefeld von Fhemweb dann von Fhem ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.&lt;br /&gt;
&lt;br /&gt;
Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit set schalter on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit list telegrambot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut &amp;quot;cmdRestrictedPeer&amp;quot; setzen, damit nicht jeder Kommandos auf dem Fhem-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Favoriten für Kommandos anlegen ===&lt;br /&gt;
&lt;br /&gt;
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf &amp;quot;Kurzwahl&amp;quot; legt.&lt;br /&gt;
&lt;br /&gt;
Beispiel-Kommandos wie z.B. &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 100&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.&lt;br /&gt;
&lt;br /&gt;
Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice favorites set TYPE=ROLLADEN pos 100;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.&lt;br /&gt;
Nehmen wir mal an man möchte die Favoriten mit &amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; ausführen können. Dazu muss dann das Attribut &amp;quot;cmdFavorites&amp;quot; setzen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice cmdFavorites /short&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man nun im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short 1&amp;lt;/code&amp;gt; an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.&lt;br /&gt;
&lt;br /&gt;
Ausserdem kann man im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; an den Bot schicken, dann antwortet der Bot mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favorites&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
set TYPE=ROLLADEN pos 100&lt;br /&gt;
2&lt;br /&gt;
set TYPE=ROLLADEN pos 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Github Repository für die Telegram-Fhem Entwicklung: https://github.com/viegener/Telegram-fhem&lt;br /&gt;
* Infos zum Telegram BotFather: https://core.telegram.org/bots#botfather&lt;br /&gt;
&lt;br /&gt;
* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm&lt;br /&gt;
* Source code für das modifizierte HTTPUtils-Modul zur Übertragung grosser Bilder: https://github.com/viegener/Telegram-fhem/blob/master/HttpUtils.pm&lt;br /&gt;
&lt;br /&gt;
* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=Fhem-Forum}}&lt;br /&gt;
* Telegram messaging system https://telegram.org/&lt;br /&gt;
* TelegramBot API https://core.telegram.org/bots/api&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Viegener|Viegener]] ([[Benutzer Diskussion:Viegener|Diskussion]]) 22:49, 11. Okt. 2015 (CEST)&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15009</id>
		<title>TelegramBot</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TelegramBot&amp;diff=15009"/>
		<updated>2016-04-06T17:10:16Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Ergänzung der Registrierung eines neuen Bot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModFTopic=38328&lt;br /&gt;
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]&lt;br /&gt;
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/). &lt;br /&gt;
Es entsteht eine Möglichkeit Benachrichtungen aus Fhem zu versenden, zum Beispiel Alarmmeldungen.&lt;br /&gt;
Ausserdem können auch Kommandos über Telegram an Fhem gesendet werden um Steuerungsbefehle in Fhem auszulösen.&lt;br /&gt;
&lt;br /&gt;
Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem Fhem-Server (anders als die Variante [[Telegram]]), sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe.&lt;br /&gt;
&lt;br /&gt;
== Über Telegram Instant Messaging ==&lt;br /&gt;
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei. &lt;br /&gt;
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und &lt;br /&gt;
können auch aus dem WebBrowser verwendet werden. &lt;br /&gt;
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt. &lt;br /&gt;
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.&lt;br /&gt;
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
Für die Unterstützung von &#039;&#039;WhatsApp&#039;&#039; siehe Modul [[yowsup]].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Unterstützt werden:&lt;br /&gt;
&lt;br /&gt;
* Versand von Textnachrichten &lt;br /&gt;
* Versand und Empfang von Bildern/Audio/etc &lt;br /&gt;
* Empfang von Textnachrichten von beliebigen Kontakten&lt;br /&gt;
* Kommandos in Fhem über Telegram-Nachrichten von aussen auslösen&lt;br /&gt;
* Ergebnisse der Kommandos zusenden lassen&lt;br /&gt;
&lt;br /&gt;
Eine detaillierte Beschreibung des Moduls ist im Fhem Forum und in der (englischen) Dokumentation zum Modul in der Commandref diesem  {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über Fhem-Update verteilt.&lt;br /&gt;
&lt;br /&gt;
Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit Fhem ==&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Für die Anlage eines TelegramBot Devices in Fhem ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#botfather BotFather] erzeugt. Dort mit dem Telegram-Befehl &amp;lt;code&amp;gt;/newbot&amp;lt;/code&amp;gt; einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf &amp;quot;Bot&amp;quot; enden.&lt;br /&gt;
Dazu wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm). Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define &amp;amp;lt;name&amp;amp;gt; TelegramBot  &amp;amp;lt;token&amp;amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;define teleBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;code&amp;gt;pollingTimeout&amp;lt;/code&amp;gt; &#039;&#039;&#039;auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
=== Privacyeinstellungen ===&lt;br /&gt;
&lt;br /&gt;
Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.&lt;br /&gt;
&lt;br /&gt;
=== Kontakte ===&lt;br /&gt;
&lt;br /&gt;
Der Bot merkt sich die bereits bekannten Kontakte im Reading &amp;lt;code&amp;gt;Contacts&amp;lt;/code&amp;gt;. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @). &lt;br /&gt;
&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;123456:Ralf_Mustermann:@ralf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verschiedene Einträge werden durch Leerzeichen getrennt.&lt;br /&gt;
&lt;br /&gt;
Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl &amp;lt;code&amp;gt;replaceContacts&amp;lt;/code&amp;gt;. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.&lt;br /&gt;
&lt;br /&gt;
Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)&lt;br /&gt;
&lt;br /&gt;
=== Reset ===&lt;br /&gt;
&lt;br /&gt;
Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt;). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt. &lt;br /&gt;
&lt;br /&gt;
=== Supergroups / Supergruppen ===&lt;br /&gt;
&lt;br /&gt;
Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beispielszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Benachrichtigungen über Ereignisse ===&lt;br /&gt;
&lt;br /&gt;
Das einfachste Szenario für die Integration von Messaging-Diensten mit Fhem ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von Fhem zu informieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify global:INITIALIZED set telebotdevice message fhem newly started - just now !&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der Nachrichtentext &amp;quot;fhem newly started - just now !&amp;quot; an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald Fhem neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.&lt;br /&gt;
&lt;br /&gt;
=== Versand von Bildern ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Bilder auf dem Fhem-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.&lt;br /&gt;
&lt;br /&gt;
ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015 &lt;br /&gt;
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=Fhem-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define notify_fhem_reload notify wetter:report set telebotdevice sendPhoto /opt/fhem/wetter.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Empfang von Bildern oder ähnlichem ===&lt;br /&gt;
&lt;br /&gt;
Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading &amp;lt;code&amp;gt;msgFileId&amp;lt;/code&amp;gt; angelegt (&amp;lt;code&amp;gt;123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx&amp;lt;/code&amp;gt;) und im Reading &amp;lt;code&amp;gt;msgText&amp;lt;/code&amp;gt; steht dann so etwas wie&lt;br /&gt;
&amp;lt;code&amp;gt;received photo # Size: 107701&amp;lt;/code&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Über das Get-Kommando &amp;lt;code&amp;gt;urlForFile&amp;lt;/code&amp;gt; mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Versand von Emojis (Smileys) ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite &lt;br /&gt;
&lt;br /&gt;
http://apps.timwhitlock.info/emoji/tables/unicode (Spalte &amp;quot;Native&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
übernehmen und mit der Nachricht verschicken. &lt;br /&gt;
&lt;br /&gt;
Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).&lt;br /&gt;
&lt;br /&gt;
=== Kommandos auslösen ===&lt;br /&gt;
&lt;br /&gt;
Ein wichtiges Szenario ist die Möglichkeit Kommandos in Fhem ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: &amp;quot;cmdKeyword&amp;quot;)erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telebotdevice cmdKeyword doit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Somit kann man dann durch Nachrichten die mit &amp;quot;doit&amp;quot; beginnen Kommandos an Fhem senden, die ähnlich wie im Kommandoeingabefeld von Fhemweb dann von Fhem ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.&lt;br /&gt;
&lt;br /&gt;
Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiele&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit set schalter on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;doit list telegrambot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut &amp;quot;cmdRestrictedPeer&amp;quot; setzen, damit nicht jeder Kommandos auf dem Fhem-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Favoriten für Kommandos anlegen ===&lt;br /&gt;
&lt;br /&gt;
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf &amp;quot;Kurzwahl&amp;quot; legt.&lt;br /&gt;
&lt;br /&gt;
Beispiel-Kommandos wie z.B. &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 100&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.&lt;br /&gt;
&lt;br /&gt;
Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice favorites set TYPE=ROLLADEN pos 100;set TYPE=ROLLADEN pos 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.&lt;br /&gt;
Nehmen wir mal an man möchte die Favoriten mit &amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; ausführen können. Dazu muss dann das Attribut &amp;quot;cmdFavorites&amp;quot; setzen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attr telegrambotdevice cmdFavorites /short&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man nun im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short 1&amp;lt;/code&amp;gt; an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.&lt;br /&gt;
&lt;br /&gt;
Ausserdem kann man im Telegram Client &lt;br /&gt;
&amp;lt;code&amp;gt;/short&amp;lt;/code&amp;gt; an den Bot schicken, dann antwortet der Bot mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Favorites&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
set TYPE=ROLLADEN pos 100&lt;br /&gt;
2&lt;br /&gt;
set TYPE=ROLLADEN pos 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Github Repository für die Telegram-Fhem Entwicklung: https://github.com/viegener/Telegram-fhem&lt;br /&gt;
* Infos zum Telegram BotFather: https://core.telegram.org/bots#botfather&lt;br /&gt;
&lt;br /&gt;
* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm&lt;br /&gt;
* Source code für das modifizierte HTTPUtils-Modul zur Übertragung grosser Bilder: https://github.com/viegener/Telegram-fhem/blob/master/HttpUtils.pm&lt;br /&gt;
&lt;br /&gt;
* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=Fhem-Forum}}&lt;br /&gt;
* Telegram messaging system https://telegram.org/&lt;br /&gt;
* TelegramBot API https://core.telegram.org/bots/api&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Viegener|Viegener]] ([[Benutzer Diskussion:Viegener|Diskussion]]) 22:49, 11. Okt. 2015 (CEST)&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=15008</id>
		<title>Yowsup</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=15008"/>
		<updated>2016-04-06T15:32:08Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Update eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:yowsup}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Schnittstelle, um WhatsApp-Nachrichten empfangen und senden zu können. &lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=yowsup&lt;br /&gt;
|ModFTopic=27543&lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModTechName=32_yowsup.pm&lt;br /&gt;
|ModOwner=André / justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:justme|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[yowsup]] dient dazu, WhatsApp-Nachrichten zu empfangen und zu senden. Nachrichten können sein:&lt;br /&gt;
* &#039;&#039;&#039;Text&#039;&#039;&#039;: senden und empfangen, z.b.: Infonachrichten senden, FHEM-Kommandos empfangen&lt;br /&gt;
* &#039;&#039;&#039;Bilder&#039;&#039;&#039;: senden und emfangen, z.b.: Webcambilder nach Bewegungserkennung versenden&lt;br /&gt;
* &#039;&#039;&#039;Audio&#039;&#039;&#039;: empfangen, z.b.: Sprachdurchsagen empfangen und über SONOS abspielen&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
* Die Funktionalität ist vermutlich auf Linux/Unix Systeme beschränkt.&lt;br /&gt;
* Nach der Erstinstallation/-einrichtung &#039;&#039;&#039;muss&#039;&#039;&#039; zwingend das &#039;&#039;cmd&#039;&#039; Attribut korrekt gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
Die ursprüngliche Einrichtung wurde {{Link2Forum|Topic=27543|Message=204426|LinkText=hier beschrieben}}, jedoch sind noch einige wichtige Dinge zu setzen.&lt;br /&gt;
&lt;br /&gt;
=== Yowsup Installation ===&lt;br /&gt;
Bevor man loslegt sollte man wie immer sicherstellen, dass Debian auf dem aktuellen Stand ist:&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get dist-upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los gehts mit den Paketen:&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-soappy python-dateutil python-pip python-dev build-essential&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erstmal pip updaten:&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install --upgrade pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und dann axolotl installieren (das dauert ne Weile):&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install python-axolotl&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Zudem wird neben den Python Modulen noch eine Lib von tgalal benötigt:&amp;lt;pre&amp;gt;cd /opt/fhem/yowsup&lt;br /&gt;
sudo wget https://github.com/tgalal/python-axolotl/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
cd python-axolotl-master&lt;br /&gt;
sudo python setup.py install&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man Bilder verarbeiten, so braucht man noch ein paar Pakete mehr:&lt;br /&gt;
* Paketinstallationen:&lt;br /&gt;
** Unter Debian Wheezy: &amp;lt;code&amp;gt;sudo apt-get install libtiff4-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk&amp;lt;/code&amp;gt;&lt;br /&gt;
** Unter Debian Jessie: &amp;lt;code&amp;gt;sudo apt-get install libtiff5-dev libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk&amp;lt;/code&amp;gt;&lt;br /&gt;
* PIP:&amp;lt;code&amp;gt;sudo pip install pillow&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vor den weiteren Schritten sollte geprüft werden, ob dem User fhem eine Loginshell zugewiesen ist:&lt;br /&gt;
:&amp;lt;code&amp;gt;getent passwd fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
Wird hier am Ende /bin/false ausgegeben, so muss dies angepasst werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo chsh -s /bin/bash fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittels &#039;&#039;getent passwd fhem&#039;&#039; kann auch bereits das Home-Verzeichnis ausgelesen werden, dies steht in der ausgegebenen Doppelpunkt-separierten Liste an vorletzter Stelle. &lt;br /&gt;
&lt;br /&gt;
Nun loggt man sich unter dem User ein, unter dem fhem läuft (in den folgenden Beispielen werden die vom fhem-Setup-Script generierten Defaults verwendet: User=fhem , home=/opt/fhem Gruppe=dialout) und liest dort die $HOME-Variable aus und prüft das Home-Verzeichnis:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo su - fhem&lt;br /&gt;
echo $HOME&lt;br /&gt;
cd $HOME&lt;br /&gt;
logout&amp;lt;/pre&amp;gt;&lt;br /&gt;
Diesen Wert braucht man später - gut merken. Sollte hier ein Fehler auftreten (z.B. das home nicht vorhanden), so muss dies zuerst korrigiert werden.&lt;br /&gt;
&lt;br /&gt;
Desweiteren muss man nun yowsup installieren. Hierfür stehen zwei Möglichkeiten zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
Erstens:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt&lt;br /&gt;
sudo mkdir yowsup-config&lt;br /&gt;
sudo wget -N https://github.com/tgalal/yowsup/archive/master.zip&lt;br /&gt;
#alternativ sudo wget https://github.com/jlguardi/yowsup/archive/master.zip (Stand März 2016 aktueller)&lt;br /&gt;
sudo unzip -o master.zip&lt;br /&gt;
rm master.zip&lt;br /&gt;
cd yowsup-config&lt;br /&gt;
sudo nano yowsup.config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie bemerkt, ist man nun im Editor für die yowsup.config gelandet. Diese wird nun wie folgt gefüllt:&lt;br /&gt;
&amp;lt;pre&amp;gt;## Actual config starts below ##&lt;br /&gt;
&lt;br /&gt;
#cc ist wichtig ansonsten funktioniert es nicht aus dem Script&lt;br /&gt;
cc=49&lt;br /&gt;
phone=498912345678&lt;br /&gt;
id=0000000000&lt;br /&gt;
password=&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ersetze die Nummer 498912345678 gegen eine Festnetz oder Handynummer welche derzeit nicht mit WhatsApp verwendet wird. Mittels STRG+o wird die Datei nun gespeichert und mittels STRG+x verlässt man den Editor.&lt;br /&gt;
&lt;br /&gt;
Vor den weiteren Schritten sollte man nun erstmal die yowsup Verzeichnisse dem fhem-user zugängig machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo chown -R fhem:dialout /opt/yowsup-master /opt/yowsup-config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die folgenden Schritte würde ich auf den FHEM-Nutzer wechseln:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo su - fhem&lt;br /&gt;
cd /opt/yowsup-master&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Anmeldung am WhatsApp-Server. Dies kann man nun via &amp;lt;code&amp;gt;voice&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sms&amp;lt;/code&amp;gt; machen. Bei einem Handy bietet sich SMS an, bei Festnetzanschlüssen sollte voice gewählt werden, wenn man sich nicht sicher ist, dass der Anschluss die Funktion &#039;SMS im Festnetz&#039; unterstützt. Dann wird der Bestätigungscode zwar auf Englisch vorgelesen, dafür ist die Zuverlässigkeit des Registrierungsvorganges zuverlässiger. Bei Festnetznummern sollte man unbedingt etwas zum schreiben bereit halten!&lt;br /&gt;
&amp;lt;pre&amp;gt;python yowsup-cli registration -c /opt/yowsup-config/yowsup.config -r sms&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückmeldung ist nun entscheidend. Wenn man diese zurückbekommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;de sms&lt;br /&gt;
status: fail&lt;br /&gt;
retry_after: 3600&lt;br /&gt;
reason: no_routes&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dann ist die Nummer so nicht kompatibel. Was man dann noch probieren kann, ist die registration via voice - meistens ist das aber vergebene Liebesmüh&#039;.&lt;br /&gt;
&lt;br /&gt;
Wenn man folgende Rückmeldung bekommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;Detected cc: 49&lt;br /&gt;
status: sent&lt;br /&gt;
retry_after: 1805&lt;br /&gt;
length: 6&lt;br /&gt;
method: sms&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So ist alles gut gelaufen und man sollte kurz später eine SMS bekommen. Darin ist ein Text, der am Ende z.B. 123-456 lautet. Diesen fügt man ohne Bindestrich am Ende des folgenden Befehls ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;python yowsup-cli registration -c /opt/yowsup-config/yowsup.config -R 123456&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kommt ein Text der etwa so aussehen sollte:&lt;br /&gt;
&amp;lt;pre&amp;gt;status: ok&lt;br /&gt;
kind: free&lt;br /&gt;
pw: bfGA9wPWWNeHcSBxxxxxxxxxxxxxxxxx&lt;br /&gt;
price: 0,89 €&lt;br /&gt;
price_expiration: 1432127524&lt;br /&gt;
currency: EUR&lt;br /&gt;
cost: 0.89&lt;br /&gt;
login: 498912345678&lt;br /&gt;
type: existing&lt;br /&gt;
expiration: 1460832553&amp;lt;/pre&amp;gt;&lt;br /&gt;
Den Text hinter dem Zeilenanfang &amp;lt;code&amp;gt;pw: &amp;lt;/code&amp;gt; benötigt man nun für die Konfigurationsdatei, wo dieser eingefügt werden muss:&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /opt/yowsup-config/yowsup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sodass die Datei beispielhaft dann so aussieht:&lt;br /&gt;
&amp;lt;pre&amp;gt;## Actual config starts below ##&lt;br /&gt;
&lt;br /&gt;
#cc ist wichtig ansonsten funktioniert es nicht aus dem Script&lt;br /&gt;
cc=49&lt;br /&gt;
phone=498912345678&lt;br /&gt;
id=0000000000&lt;br /&gt;
password=bfGA9wPWWNeHcSBxxxxxxxxxxxxxxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie man schon gesehen hat, ist der Account nur begrenzt gültig - die Gültigkeit kann man anhand der als &amp;lt;code&amp;gt;expiration: &amp;lt;/code&amp;gt; bezeichneten Zeile ablesen, welche einen Unix-Timestamp beinhaltet. Diese kann man [http://elmar-eigner.de/tstamps.html?zeichen=1444570276&amp;amp;timeformat=2 HIER] umrechnen lassen.&lt;br /&gt;
&lt;br /&gt;
Nun mal ein schneller test an die eigene Nummer (im Beispiel 491751234567):&lt;br /&gt;
&amp;lt;pre&amp;gt;python yowsup-cli demos -c /opt/yowsup-config/yowsup.config -s 491751234567 &amp;quot;Das ist ein Test&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das sollte dir eine Nachricht einbringen. Wenn du darauf antwortest, kommt diese allerdings noch nicht an - der Client hat sich nach dem Befehl sofort beendet. Damit dieser dauerhaft im Hintergrund läuft legen wir nun in FHEM ein Gerät an, welches dies steuert.&lt;br /&gt;
&lt;br /&gt;
=== FHEM Define ===&lt;br /&gt;
* Fhem Device anlegen: &amp;lt;code&amp;gt; define &amp;lt;name&amp;gt; yowsup&amp;lt;/code&amp;gt;, also z.B. &amp;lt;code&amp;gt;define WhatsApp yowsup&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nun muss man den Pfad zu yowsup anpassen: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-config/yowsup.config --yowsup&amp;lt;/code&amp;gt;&lt;br /&gt;
* Und das Home directory mit dem Pfad zum Home des fhem users: &amp;lt;code&amp;gt;attr WhatsApp home PWD&amp;lt;/code&amp;gt;&lt;br /&gt;
* Wenn alles gut geht, gibt es danach im Device ein internal PID und das Reading &#039;&#039;state&#039;&#039;&lt;br /&gt;
* Im Whatsapp Client auf dem Handy sollte man sehen, dass Fhem online ist&lt;br /&gt;
* Zum Senden aus Fhem kann man das Kommando &amp;lt;code&amp;gt;set WhatsApp send &amp;lt;nummer&amp;gt; &amp;lt;text&amp;gt;&amp;lt;/code&amp;gt; verwenden&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
Bitte sehe immer in der [[http://fhem.de/commandref.html#yowsup Commandref]] nach - diese hier könnten veraltet sein.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cmd&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;komplettes Kommando, um den yowsup Client zu starten. z.B.: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-config/yowsup.config --yowsup&amp;lt;/code&amp;gt;. Wenn die ab  yowsup-Version 2.4 standartmässig aktivierte Verschlüsselung abgeschaltet werden muss weil die entsprechenden Libs nicht installiert sind: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/local/bin/yowsup-cli demos -c /root/yowsup-config --yowsup -M&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;accept_from&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;kommagetrennte Liste von Kontakten (Nummern), von denen Nachrichten akzeptiert werden. Ist das Attribut nicht gesetzt, so werden die Nachrichten von jedem akzeptiert.&lt;br /&gt;
* &amp;lt;code&amp;gt;commandPrefix&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;nicht gesetzt -&amp;gt; es werden keine Befehle akzeptiert.&amp;lt;br /&amp;gt;0 -&amp;gt; es werden keine Befehle akzeptiert.&amp;lt;br /&amp;gt;1 -&amp;gt; erlaubt Befehle, jede Nachricht wird als Fhem-Befehl interpretiert.&amp;lt;br /&amp;gt;alles andere -&amp;gt; Wenn die Nachricht mit diesem Prefix startet, wird alles weitere als Befehle interpretiert.&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=&#039;&#039;&#039;allowedCommands&#039;&#039;&#039; should work as intended, but no guarantee can be given, that there is no way to circumvent it.}}&lt;br /&gt;
* &amp;lt;code&amp;gt;allowedCommands&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Eine Komma-getrennte Liste von zulässigen Befehlen für diesen Kontakt. Wenn die Liste leer ist (z.B. nur ein Komma), dann werden keine Befehle akzeptiert.&lt;br /&gt;
* &amp;lt;code&amp;gt;home&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Setzt das Home-directory welches für yowsup verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
* image -&amp;gt; Über diesen Befehl können Bilder gesendet werden.&lt;br /&gt;
&lt;br /&gt;
* raw -&amp;gt; Status ändern :  &lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /profile setStatus &#039;mein Status&#039;    &amp;lt;--- die &#039; &#039; müssen bleiben&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Name der angezeigt werden soll, wenn eine Nachricht z.B. ans iPhone geschickt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /presence name &amp;lt;DeinNick&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anzeige online :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /presence available&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Profilbild ändern :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /profile setPicture &#039;/opt/fhem/fhem_logo.png&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;--- der gesamte Pfad zum Bild muss angegeben werden und Rechte müssen ggfs. bei fhem liegen&lt;br /&gt;
&lt;br /&gt;
Falls es nicht funktioniert disconnect/connect probieren.&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
Da am WhatsApp ständig geschraubt wird, bedarf es eines Updates des Yowsup, wenn keine Funktion mehr gegeben ist:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt&lt;br /&gt;
sudo rm master.zip&lt;br /&gt;
sudo mv yowsup-master yowsup-master-alt&lt;br /&gt;
sudo wget -N https://github.com/tgalal/yowsup/archive/master.zip&lt;br /&gt;
#alternativ sudo wget https://github.com/jlguardi/yowsup/archive/master.zip (Stand März 2016 aktueller)&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
sudo chown fhem yowsup-master -R&lt;br /&gt;
sudo chgrp dialout yowsup-master -R&amp;lt;/pre&amp;gt;Danach muss FHEM mittels &#039;shutdown restart&#039; neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispielnachricht ===&lt;br /&gt;
Beim Empfang einer Nachricht wird automatisch ein Fhem Device für diesen Kontakt angelegt. In diesem Device gibt es das Reading &#039;&#039;&#039;message&#039;&#039;&#039; für die empfangene Nachricht und ab der ersten Nachricht auch das Reading &#039;&#039;&#039;chatstate&#039;&#039;&#039;, in dem zu sehen ist, ob gerade getippt wird.&lt;br /&gt;
Nachdem ein Device für einen Kontakt angelegt ist, lässt sich auch direkt dieses Device zum Senden verwenden: &lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; send &amp;lt;text&amp;gt;&amp;lt;/code&amp;gt;, &lt;br /&gt;
d.h., man spart sich die Angabe der Nummer.&lt;br /&gt;
&lt;br /&gt;
=== Gruppen ===&lt;br /&gt;
Gruppen müssen über die App (Smartphone / Tablet) angelegt werden. Nach dem Empfang einer entsprechenden Nachricht werden Gruppen genauso behandelt, wie einfache Teilnehmer.&lt;br /&gt;
&lt;br /&gt;
=== Broadcast ===&lt;br /&gt;
Beim Senden über das Masterdevice lassen sich mehrere Empfänger mit Komma (und ohne Leerzeichen) getrennt angeben. Die entsprechenden Nachrichten werden dann per Broadcast an alle Teilnehmer gesendet. Die Broadcastempfänger müssen zuvor mindestens eine normale Nachricht erhalten haben.&lt;br /&gt;
&lt;br /&gt;
=== Komponenten steuern ===&lt;br /&gt;
Um ein [[notify]] anlegen zu können, müssen wir zuerst eine Nachricht vom Handy an FHEM senden. Dadurch wird ein Device mit der Nummer als Namen angelegt. Danach sollte das Device umbenannt werden, da einige Befehle einen Namen ausschließlich aus Ziffern nicht akzeptieren. Dies geschieht wie folgt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;rename 49123456789 HandySeppel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann ein &#039;&#039;notify&#039;&#039; angelegt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
 define notifySeppelLicht notify HandySeppel:message.* {&lt;br /&gt;
 if( $EVENT eq &#039;message: Licht an&#039; ) {&lt;br /&gt;
   fhem &amp;quot;set HandySeppel send Licht ist nun an...&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set FS20_a5d800 dim100%&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 } elsif( $EVENT eq &#039;message: Licht aus&#039; ) {&lt;br /&gt;
     fhem &amp;quot;set HandySeppel send Licht ist nun aus...&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set FS20_a5d800 dim0%&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 } else {&lt;br /&gt;
     fhem &amp;quot;set HandySeppel send Wie bitte?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Natürlich ist dieses &#039;&#039;notify&#039;&#039; noch auf die eigenen Wünsche anzupassen.&lt;br /&gt;
&lt;br /&gt;
=== Autoresponder ===&lt;br /&gt;
Nachdem man nun seine Festnetznummer bei WhatsApp registriert hat, wird auch diese natürlich als erreichbares Ziel auf jedem Gerät angezeigt, auf dem sie gespeichert ist. So kann es passieren, dass WhatsApp nicht gelesen werden. Hier schafft ein Autoresponder Abhilfe:&lt;br /&gt;
:&amp;lt;code&amp;gt;define not_WhatsApp_Autoresponder notify 491.*:message.* set  $NAME send Hallo, Du hast eine Nachricht an unsere Festnetznummer geschickt. Da ist aber nur ein kleiner Computer auf Empfang, der Dir nur diese Antwort schicken kann. Bitte benutze unsere Mobilnummern, wenn Du willst, dass Deine Nachricht auch gelesen wird!&amp;lt;/code&amp;gt;&lt;br /&gt;
Das Problem hierbei ist, dass noch nicht bekannt ist, wer etwas sendet und so der Kontakt u.U. noch nicht angelegt ist. Daher wird im obigen Beispiel auf 491*:message.* reagiert. So bekommen nur deutsche Mobilrufnummern die Antwort. Um das noch globaler zu fassen, könnte z.B. auf \d*.*:message.* reagiert werden, was aber voraussetzt, dass keine weiteren Modulnamen (die das Reading message haben) mit einer Ziffer beginnen.&lt;br /&gt;
Alle Kontakte, welche nicht den Autoresponder erhalten sollen, müssen wie oben beschrieben entspr. umbenannt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;rename 49123456789 HandySeppel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=27543|LinkText=Forenthread}}, in dem die Whatsapp Anwendung beschrieben wird&lt;br /&gt;
* {{Link2Forum|Topic=27543|Message=299292|LinkText=Foreneintrag}}, ab dem das yowsup Modul beschrieben wird&lt;br /&gt;
* Die Python Whatsapp Library auf [https://github.com/tgalal/yowsup github]&lt;br /&gt;
* Imagehandling Bugfix [https://github.com/tgalal/yowsup/issues/901 github]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=15007</id>
		<title>Yowsup</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=15007"/>
		<updated>2016-04-06T15:25:10Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Yowsup Installation */ Hinweis auf yowsup-Version von jlguardi entspr. https://forum.fhem.de/index.php/topic,27543.msg429821.html#msg429821&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:yowsup}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Schnittstelle, um WhatsApp-Nachrichten empfangen und senden zu können. &lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=yowsup&lt;br /&gt;
|ModFTopic=27543&lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModTechName=32_yowsup.pm&lt;br /&gt;
|ModOwner=André / justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:justme|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[yowsup]] dient dazu, WhatsApp-Nachrichten zu empfangen und zu senden. Nachrichten können sein:&lt;br /&gt;
* &#039;&#039;&#039;Text&#039;&#039;&#039;: senden und empfangen, z.b.: Infonachrichten senden, FHEM-Kommandos empfangen&lt;br /&gt;
* &#039;&#039;&#039;Bilder&#039;&#039;&#039;: senden und emfangen, z.b.: Webcambilder nach Bewegungserkennung versenden&lt;br /&gt;
* &#039;&#039;&#039;Audio&#039;&#039;&#039;: empfangen, z.b.: Sprachdurchsagen empfangen und über SONOS abspielen&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
* Die Funktionalität ist vermutlich auf Linux/Unix Systeme beschränkt.&lt;br /&gt;
* Nach der Erstinstallation/-einrichtung &#039;&#039;&#039;muss&#039;&#039;&#039; zwingend das &#039;&#039;cmd&#039;&#039; Attribut korrekt gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
Die ursprüngliche Einrichtung wurde {{Link2Forum|Topic=27543|Message=204426|LinkText=hier beschrieben}}, jedoch sind noch einige wichtige Dinge zu setzen.&lt;br /&gt;
&lt;br /&gt;
=== Yowsup Installation ===&lt;br /&gt;
Bevor man loslegt sollte man wie immer sicherstellen, dass Debian auf dem aktuellen Stand ist:&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get dist-upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los gehts mit den Paketen:&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-soappy python-dateutil python-pip python-dev build-essential&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erstmal pip updaten:&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install --upgrade pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und dann axolotl installieren (das dauert ne Weile):&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install python-axolotl&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Zudem wird neben den Python Modulen noch eine Lib von tgalal benötigt:&amp;lt;pre&amp;gt;cd /opt/fhem/yowsup&lt;br /&gt;
sudo wget https://github.com/tgalal/python-axolotl/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
cd python-axolotl-master&lt;br /&gt;
sudo python setup.py install&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man Bilder verarbeiten, so braucht man noch ein paar Pakete mehr:&lt;br /&gt;
* Paketinstallationen:&lt;br /&gt;
** Unter Debian Wheezy: &amp;lt;code&amp;gt;sudo apt-get install libtiff4-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk&amp;lt;/code&amp;gt;&lt;br /&gt;
** Unter Debian Jessie: &amp;lt;code&amp;gt;sudo apt-get install libtiff5-dev libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk&amp;lt;/code&amp;gt;&lt;br /&gt;
* PIP:&amp;lt;code&amp;gt;sudo pip install pillow&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vor den weiteren Schritten sollte geprüft werden, ob dem User fhem eine Loginshell zugewiesen ist:&lt;br /&gt;
:&amp;lt;code&amp;gt;getent passwd fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
Wird hier am Ende /bin/false ausgegeben, so muss dies angepasst werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo chsh -s /bin/bash fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittels &#039;&#039;getent passwd fhem&#039;&#039; kann auch bereits das Home-Verzeichnis ausgelesen werden, dies steht in der ausgegebenen Doppelpunkt-separierten Liste an vorletzter Stelle. &lt;br /&gt;
&lt;br /&gt;
Nun loggt man sich unter dem User ein, unter dem fhem läuft (in den folgenden Beispielen werden die vom fhem-Setup-Script generierten Defaults verwendet: User=fhem , home=/opt/fhem Gruppe=dialout) und liest dort die $HOME-Variable aus und prüft das Home-Verzeichnis:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo su - fhem&lt;br /&gt;
echo $HOME&lt;br /&gt;
cd $HOME&lt;br /&gt;
logout&amp;lt;/pre&amp;gt;&lt;br /&gt;
Diesen Wert braucht man später - gut merken. Sollte hier ein Fehler auftreten (z.B. das home nicht vorhanden), so muss dies zuerst korrigiert werden.&lt;br /&gt;
&lt;br /&gt;
Desweiteren muss man nun yowsup installieren. Hierfür stehen zwei Möglichkeiten zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
Erstens:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt&lt;br /&gt;
sudo mkdir yowsup-config&lt;br /&gt;
sudo wget -N https://github.com/tgalal/yowsup/archive/master.zip&lt;br /&gt;
#alternativ sudo wget https://github.com/jlguardi/yowsup/archive/master.zip (Stand März 2016 aktueller)&lt;br /&gt;
sudo unzip -o master.zip&lt;br /&gt;
rm master.zip&lt;br /&gt;
cd yowsup-config&lt;br /&gt;
sudo nano yowsup.config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie bemerkt, ist man nun im Editor für die yowsup.config gelandet. Diese wird nun wie folgt gefüllt:&lt;br /&gt;
&amp;lt;pre&amp;gt;## Actual config starts below ##&lt;br /&gt;
&lt;br /&gt;
#cc ist wichtig ansonsten funktioniert es nicht aus dem Script&lt;br /&gt;
cc=49&lt;br /&gt;
phone=498912345678&lt;br /&gt;
id=0000000000&lt;br /&gt;
password=&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ersetze die Nummer 498912345678 gegen eine Festnetz oder Handynummer welche derzeit nicht mit WhatsApp verwendet wird. Mittels STRG+o wird die Datei nun gespeichert und mittels STRG+x verlässt man den Editor.&lt;br /&gt;
&lt;br /&gt;
Vor den weiteren Schritten sollte man nun erstmal die yowsup Verzeichnisse dem fhem-user zugängig machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo chown -R fhem:dialout /opt/yowsup-master /opt/yowsup-config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die folgenden Schritte würde ich auf den FHEM-Nutzer wechseln:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo su - fhem&lt;br /&gt;
cd /opt/yowsup-master&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Anmeldung am WhatsApp-Server. Dies kann man nun via &amp;lt;code&amp;gt;voice&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sms&amp;lt;/code&amp;gt; machen. Bei einem Handy bietet sich SMS an, bei Festnetzanschlüssen sollte voice gewählt werden, wenn man sich nicht sicher ist, dass der Anschluss die Funktion &#039;SMS im Festnetz&#039; unterstützt. Dann wird der Bestätigungscode zwar auf Englisch vorgelesen, dafür ist die Zuverlässigkeit des Registrierungsvorganges zuverlässiger. Bei Festnetznummern sollte man unbedingt etwas zum schreiben bereit halten!&lt;br /&gt;
&amp;lt;pre&amp;gt;python yowsup-cli registration -c /opt/yowsup-config/yowsup.config -r sms&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückmeldung ist nun entscheidend. Wenn man diese zurückbekommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;de sms&lt;br /&gt;
status: fail&lt;br /&gt;
retry_after: 3600&lt;br /&gt;
reason: no_routes&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dann ist die Nummer so nicht kompatibel. Was man dann noch probieren kann, ist die registration via voice - meistens ist das aber vergebene Liebesmüh&#039;.&lt;br /&gt;
&lt;br /&gt;
Wenn man folgende Rückmeldung bekommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;Detected cc: 49&lt;br /&gt;
status: sent&lt;br /&gt;
retry_after: 1805&lt;br /&gt;
length: 6&lt;br /&gt;
method: sms&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So ist alles gut gelaufen und man sollte kurz später eine SMS bekommen. Darin ist ein Text, der am Ende z.B. 123-456 lautet. Diesen fügt man ohne Bindestrich am Ende des folgenden Befehls ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;python yowsup-cli registration -c /opt/yowsup-config/yowsup.config -R 123456&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kommt ein Text der etwa so aussehen sollte:&lt;br /&gt;
&amp;lt;pre&amp;gt;status: ok&lt;br /&gt;
kind: free&lt;br /&gt;
pw: bfGA9wPWWNeHcSBxxxxxxxxxxxxxxxxx&lt;br /&gt;
price: 0,89 €&lt;br /&gt;
price_expiration: 1432127524&lt;br /&gt;
currency: EUR&lt;br /&gt;
cost: 0.89&lt;br /&gt;
login: 498912345678&lt;br /&gt;
type: existing&lt;br /&gt;
expiration: 1460832553&amp;lt;/pre&amp;gt;&lt;br /&gt;
Den Text hinter dem Zeilenanfang &amp;lt;code&amp;gt;pw: &amp;lt;/code&amp;gt; benötigt man nun für die Konfigurationsdatei, wo dieser eingefügt werden muss:&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /opt/yowsup-config/yowsup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sodass die Datei beispielhaft dann so aussieht:&lt;br /&gt;
&amp;lt;pre&amp;gt;## Actual config starts below ##&lt;br /&gt;
&lt;br /&gt;
#cc ist wichtig ansonsten funktioniert es nicht aus dem Script&lt;br /&gt;
cc=49&lt;br /&gt;
phone=498912345678&lt;br /&gt;
id=0000000000&lt;br /&gt;
password=bfGA9wPWWNeHcSBxxxxxxxxxxxxxxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie man schon gesehen hat, ist der Account nur begrenzt gültig - die Gültigkeit kann man anhand der als &amp;lt;code&amp;gt;expiration: &amp;lt;/code&amp;gt; bezeichneten Zeile ablesen, welche einen Unix-Timestamp beinhaltet. Diese kann man [http://elmar-eigner.de/tstamps.html?zeichen=1444570276&amp;amp;timeformat=2 HIER] umrechnen lassen.&lt;br /&gt;
&lt;br /&gt;
Nun mal ein schneller test an die eigene Nummer (im Beispiel 491751234567):&lt;br /&gt;
&amp;lt;pre&amp;gt;python yowsup-cli demos -c /opt/yowsup-config/yowsup.config -s 491751234567 &amp;quot;Das ist ein Test&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das sollte dir eine Nachricht einbringen. Wenn du darauf antwortest, kommt diese allerdings noch nicht an - der Client hat sich nach dem Befehl sofort beendet. Damit dieser dauerhaft im Hintergrund läuft legen wir nun in FHEM ein Gerät an, welches dies steuert.&lt;br /&gt;
&lt;br /&gt;
=== FHEM Define ===&lt;br /&gt;
* Fhem Device anlegen: &amp;lt;code&amp;gt; define &amp;lt;name&amp;gt; yowsup&amp;lt;/code&amp;gt;, also z.B. &amp;lt;code&amp;gt;define WhatsApp yowsup&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nun muss man den Pfad zu yowsup anpassen: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-config/yowsup.config --yowsup&amp;lt;/code&amp;gt;&lt;br /&gt;
* Und das Home directory mit dem Pfad zum Home des fhem users: &amp;lt;code&amp;gt;attr WhatsApp home PWD&amp;lt;/code&amp;gt;&lt;br /&gt;
* Wenn alles gut geht, gibt es danach im Device ein internal PID und das Reading &#039;&#039;state&#039;&#039;&lt;br /&gt;
* Im Whatsapp Client auf dem Handy sollte man sehen, dass Fhem online ist&lt;br /&gt;
* Zum Senden aus Fhem kann man das Kommando &amp;lt;code&amp;gt;set WhatsApp send &amp;lt;nummer&amp;gt; &amp;lt;text&amp;gt;&amp;lt;/code&amp;gt; verwenden&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
Bitte sehe immer in der [[http://fhem.de/commandref.html#yowsup Commandref]] nach - diese hier könnten veraltet sein.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cmd&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;komplettes Kommando, um den yowsup Client zu starten. z.B.: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-config/yowsup.config --yowsup&amp;lt;/code&amp;gt;. Wenn die ab  yowsup-Version 2.4 standartmässig aktivierte Verschlüsselung abgeschaltet werden muss weil die entsprechenden Libs nicht installiert sind: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/local/bin/yowsup-cli demos -c /root/yowsup-config --yowsup -M&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;accept_from&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;kommagetrennte Liste von Kontakten (Nummern), von denen Nachrichten akzeptiert werden. Ist das Attribut nicht gesetzt, so werden die Nachrichten von jedem akzeptiert.&lt;br /&gt;
* &amp;lt;code&amp;gt;commandPrefix&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;nicht gesetzt -&amp;gt; es werden keine Befehle akzeptiert.&amp;lt;br /&amp;gt;0 -&amp;gt; es werden keine Befehle akzeptiert.&amp;lt;br /&amp;gt;1 -&amp;gt; erlaubt Befehle, jede Nachricht wird als Fhem-Befehl interpretiert.&amp;lt;br /&amp;gt;alles andere -&amp;gt; Wenn die Nachricht mit diesem Prefix startet, wird alles weitere als Befehle interpretiert.&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=&#039;&#039;&#039;allowedCommands&#039;&#039;&#039; should work as intended, but no guarantee can be given, that there is no way to circumvent it.}}&lt;br /&gt;
* &amp;lt;code&amp;gt;allowedCommands&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Eine Komma-getrennte Liste von zulässigen Befehlen für diesen Kontakt. Wenn die Liste leer ist (z.B. nur ein Komma), dann werden keine Befehle akzeptiert.&lt;br /&gt;
* &amp;lt;code&amp;gt;home&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Setzt das Home-directory welches für yowsup verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
* image -&amp;gt; Über diesen Befehl können Bilder gesendet werden.&lt;br /&gt;
&lt;br /&gt;
* raw -&amp;gt; Status ändern :  &lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /profile setStatus &#039;mein Status&#039;    &amp;lt;--- die &#039; &#039; müssen bleiben&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Name der angezeigt werden soll, wenn eine Nachricht z.B. ans iPhone geschickt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /presence name &amp;lt;DeinNick&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anzeige online :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /presence available&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Profilbild ändern :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /profile setPicture &#039;/opt/fhem/fhem_logo.png&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;--- der gesamte Pfad zum Bild muss angegeben werden und Rechte müssen ggfs. bei fhem liegen&lt;br /&gt;
&lt;br /&gt;
Falls es nicht funktioniert disconnect/connect probieren.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispielnachricht ===&lt;br /&gt;
Beim Empfang einer Nachricht wird automatisch ein Fhem Device für diesen Kontakt angelegt. In diesem Device gibt es das Reading &#039;&#039;&#039;message&#039;&#039;&#039; für die empfangene Nachricht und ab der ersten Nachricht auch das Reading &#039;&#039;&#039;chatstate&#039;&#039;&#039;, in dem zu sehen ist, ob gerade getippt wird.&lt;br /&gt;
Nachdem ein Device für einen Kontakt angelegt ist, lässt sich auch direkt dieses Device zum Senden verwenden: &lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; send &amp;lt;text&amp;gt;&amp;lt;/code&amp;gt;, &lt;br /&gt;
d.h., man spart sich die Angabe der Nummer.&lt;br /&gt;
&lt;br /&gt;
=== Gruppen ===&lt;br /&gt;
Gruppen müssen über die App (Smartphone / Tablet) angelegt werden. Nach dem Empfang einer entsprechenden Nachricht werden Gruppen genauso behandelt, wie einfache Teilnehmer.&lt;br /&gt;
&lt;br /&gt;
=== Broadcast ===&lt;br /&gt;
Beim Senden über das Masterdevice lassen sich mehrere Empfänger mit Komma (und ohne Leerzeichen) getrennt angeben. Die entsprechenden Nachrichten werden dann per Broadcast an alle Teilnehmer gesendet. Die Broadcastempfänger müssen zuvor mindestens eine normale Nachricht erhalten haben.&lt;br /&gt;
&lt;br /&gt;
=== Komponenten steuern ===&lt;br /&gt;
Um ein [[notify]] anlegen zu können, müssen wir zuerst eine Nachricht vom Handy an FHEM senden. Dadurch wird ein Device mit der Nummer als Namen angelegt. Danach sollte das Device umbenannt werden, da einige Befehle einen Namen ausschließlich aus Ziffern nicht akzeptieren. Dies geschieht wie folgt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;rename 49123456789 HandySeppel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann ein &#039;&#039;notify&#039;&#039; angelegt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
 define notifySeppelLicht notify HandySeppel:message.* {&lt;br /&gt;
 if( $EVENT eq &#039;message: Licht an&#039; ) {&lt;br /&gt;
   fhem &amp;quot;set HandySeppel send Licht ist nun an...&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set FS20_a5d800 dim100%&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 } elsif( $EVENT eq &#039;message: Licht aus&#039; ) {&lt;br /&gt;
     fhem &amp;quot;set HandySeppel send Licht ist nun aus...&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set FS20_a5d800 dim0%&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 } else {&lt;br /&gt;
     fhem &amp;quot;set HandySeppel send Wie bitte?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Natürlich ist dieses &#039;&#039;notify&#039;&#039; noch auf die eigenen Wünsche anzupassen.&lt;br /&gt;
&lt;br /&gt;
=== Autoresponder ===&lt;br /&gt;
Nachdem man nun seine Festnetznummer bei WhatsApp registriert hat, wird auch diese natürlich als erreichbares Ziel auf jedem Gerät angezeigt, auf dem sie gespeichert ist. So kann es passieren, dass WhatsApp nicht gelesen werden. Hier schafft ein Autoresponder Abhilfe:&lt;br /&gt;
:&amp;lt;code&amp;gt;define not_WhatsApp_Autoresponder notify 491.*:message.* set  $NAME send Hallo, Du hast eine Nachricht an unsere Festnetznummer geschickt. Da ist aber nur ein kleiner Computer auf Empfang, der Dir nur diese Antwort schicken kann. Bitte benutze unsere Mobilnummern, wenn Du willst, dass Deine Nachricht auch gelesen wird!&amp;lt;/code&amp;gt;&lt;br /&gt;
Das Problem hierbei ist, dass noch nicht bekannt ist, wer etwas sendet und so der Kontakt u.U. noch nicht angelegt ist. Daher wird im obigen Beispiel auf 491*:message.* reagiert. So bekommen nur deutsche Mobilrufnummern die Antwort. Um das noch globaler zu fassen, könnte z.B. auf \d*.*:message.* reagiert werden, was aber voraussetzt, dass keine weiteren Modulnamen (die das Reading message haben) mit einer Ziffer beginnen.&lt;br /&gt;
Alle Kontakte, welche nicht den Autoresponder erhalten sollen, müssen wie oben beschrieben entspr. umbenannt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;rename 49123456789 HandySeppel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=27543|LinkText=Forenthread}}, in dem die Whatsapp Anwendung beschrieben wird&lt;br /&gt;
* {{Link2Forum|Topic=27543|Message=299292|LinkText=Foreneintrag}}, ab dem das yowsup Modul beschrieben wird&lt;br /&gt;
* Die Python Whatsapp Library auf [https://github.com/tgalal/yowsup github]&lt;br /&gt;
* Imagehandling Bugfix [https://github.com/tgalal/yowsup/issues/901 github]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=15006</id>
		<title>Yowsup</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=15006"/>
		<updated>2016-04-06T15:22:00Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Yowsup Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:yowsup}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Schnittstelle, um WhatsApp-Nachrichten empfangen und senden zu können. &lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=yowsup&lt;br /&gt;
|ModFTopic=27543&lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModTechName=32_yowsup.pm&lt;br /&gt;
|ModOwner=André / justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:justme|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[yowsup]] dient dazu, WhatsApp-Nachrichten zu empfangen und zu senden. Nachrichten können sein:&lt;br /&gt;
* &#039;&#039;&#039;Text&#039;&#039;&#039;: senden und empfangen, z.b.: Infonachrichten senden, FHEM-Kommandos empfangen&lt;br /&gt;
* &#039;&#039;&#039;Bilder&#039;&#039;&#039;: senden und emfangen, z.b.: Webcambilder nach Bewegungserkennung versenden&lt;br /&gt;
* &#039;&#039;&#039;Audio&#039;&#039;&#039;: empfangen, z.b.: Sprachdurchsagen empfangen und über SONOS abspielen&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
* Die Funktionalität ist vermutlich auf Linux/Unix Systeme beschränkt.&lt;br /&gt;
* Nach der Erstinstallation/-einrichtung &#039;&#039;&#039;muss&#039;&#039;&#039; zwingend das &#039;&#039;cmd&#039;&#039; Attribut korrekt gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
Die ursprüngliche Einrichtung wurde {{Link2Forum|Topic=27543|Message=204426|LinkText=hier beschrieben}}, jedoch sind noch einige wichtige Dinge zu setzen.&lt;br /&gt;
&lt;br /&gt;
=== Yowsup Installation ===&lt;br /&gt;
Bevor man loslegt sollte man wie immer sicherstellen, dass Debian auf dem aktuellen Stand ist:&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get dist-upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los gehts mit den Paketen:&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-soappy python-dateutil python-pip python-dev build-essential&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erstmal pip updaten:&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install --upgrade pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und dann axolotl installieren (das dauert ne Weile):&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install python-axolotl&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Zudem wird neben den Python Modulen noch eine Lib von tgalal benötigt:&amp;lt;pre&amp;gt;cd /opt/fhem/yowsup&lt;br /&gt;
sudo wget https://github.com/tgalal/python-axolotl/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
cd python-axolotl-master&lt;br /&gt;
sudo python setup.py install&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man Bilder verarbeiten, so braucht man noch ein paar Pakete mehr:&lt;br /&gt;
* Paketinstallationen:&lt;br /&gt;
** Unter Debian Wheezy: &amp;lt;code&amp;gt;sudo apt-get install libtiff4-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk&amp;lt;/code&amp;gt;&lt;br /&gt;
** Unter Debian Jessie: &amp;lt;code&amp;gt;sudo apt-get install libtiff5-dev libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk&amp;lt;/code&amp;gt;&lt;br /&gt;
* PIP:&amp;lt;code&amp;gt;sudo pip install pillow&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vor den weiteren Schritten sollte geprüft werden, ob dem User fhem eine Loginshell zugewiesen ist:&lt;br /&gt;
:&amp;lt;code&amp;gt;getent passwd fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
Wird hier am Ende /bin/false ausgegeben, so muss dies angepasst werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo chsh -s /bin/bash fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittels &#039;&#039;getent passwd fhem&#039;&#039; kann auch bereits das Home-Verzeichnis ausgelesen werden, dies steht in der ausgegebenen Doppelpunkt-separierten Liste an vorletzter Stelle. &lt;br /&gt;
&lt;br /&gt;
Nun loggt man sich unter dem User ein, unter dem fhem läuft (in den folgenden Beispielen werden die vom fhem-Setup-Script generierten Defaults verwendet: User=fhem , home=/opt/fhem Gruppe=dialout) und liest dort die $HOME-Variable aus und prüft das Home-Verzeichnis:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo su - fhem&lt;br /&gt;
echo $HOME&lt;br /&gt;
cd $HOME&lt;br /&gt;
logout&amp;lt;/pre&amp;gt;&lt;br /&gt;
Diesen Wert braucht man später - gut merken. Sollte hier ein Fehler auftreten (z.B. das home nicht vorhanden), so muss dies zuerst korrigiert werden.&lt;br /&gt;
&lt;br /&gt;
Desweiteren muss man nun yowsup installieren. Hierfür stehen zwei Möglichkeiten zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
Erstens:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt&lt;br /&gt;
sudo mkdir yowsup-config&lt;br /&gt;
sudo wget -N https://github.com/tgalal/yowsup/archive/master.zip&lt;br /&gt;
sudo unzip -o master.zip&lt;br /&gt;
rm master.zip&lt;br /&gt;
cd yowsup-config&lt;br /&gt;
sudo nano yowsup.config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie bemerkt, ist man nun im Editor für die yowsup.config gelandet. Diese wird nun wie folgt gefüllt:&lt;br /&gt;
&amp;lt;pre&amp;gt;## Actual config starts below ##&lt;br /&gt;
&lt;br /&gt;
#cc ist wichtig ansonsten funktioniert es nicht aus dem Script&lt;br /&gt;
cc=49&lt;br /&gt;
phone=498912345678&lt;br /&gt;
id=0000000000&lt;br /&gt;
password=&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ersetze die Nummer 498912345678 gegen eine Festnetz oder Handynummer welche derzeit nicht mit WhatsApp verwendet wird. Mittels STRG+o wird die Datei nun gespeichert und mittels STRG+x verlässt man den Editor.&lt;br /&gt;
&lt;br /&gt;
Vor den weiteren Schritten sollte man nun erstmal die yowsup Verzeichnisse dem fhem-user zugängig machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo chown -R fhem:dialout /opt/yowsup-master /opt/yowsup-config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die folgenden Schritte würde ich auf den FHEM-Nutzer wechseln:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo su - fhem&lt;br /&gt;
cd /opt/yowsup-master&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Anmeldung am WhatsApp-Server. Dies kann man nun via &amp;lt;code&amp;gt;voice&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sms&amp;lt;/code&amp;gt; machen. Bei einem Handy bietet sich SMS an, bei Festnetzanschlüssen sollte voice gewählt werden, wenn man sich nicht sicher ist, dass der Anschluss die Funktion &#039;SMS im Festnetz&#039; unterstützt. Dann wird der Bestätigungscode zwar auf Englisch vorgelesen, dafür ist die Zuverlässigkeit des Registrierungsvorganges zuverlässiger. Bei Festnetznummern sollte man unbedingt etwas zum schreiben bereit halten!&lt;br /&gt;
&amp;lt;pre&amp;gt;python yowsup-cli registration -c /opt/yowsup-config/yowsup.config -r sms&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückmeldung ist nun entscheidend. Wenn man diese zurückbekommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;de sms&lt;br /&gt;
status: fail&lt;br /&gt;
retry_after: 3600&lt;br /&gt;
reason: no_routes&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dann ist die Nummer so nicht kompatibel. Was man dann noch probieren kann, ist die registration via voice - meistens ist das aber vergebene Liebesmüh&#039;.&lt;br /&gt;
&lt;br /&gt;
Wenn man folgende Rückmeldung bekommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;Detected cc: 49&lt;br /&gt;
status: sent&lt;br /&gt;
retry_after: 1805&lt;br /&gt;
length: 6&lt;br /&gt;
method: sms&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So ist alles gut gelaufen und man sollte kurz später eine SMS bekommen. Darin ist ein Text, der am Ende z.B. 123-456 lautet. Diesen fügt man ohne Bindestrich am Ende des folgenden Befehls ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;python yowsup-cli registration -c /opt/yowsup-config/yowsup.config -R 123456&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kommt ein Text der etwa so aussehen sollte:&lt;br /&gt;
&amp;lt;pre&amp;gt;status: ok&lt;br /&gt;
kind: free&lt;br /&gt;
pw: bfGA9wPWWNeHcSBxxxxxxxxxxxxxxxxx&lt;br /&gt;
price: 0,89 €&lt;br /&gt;
price_expiration: 1432127524&lt;br /&gt;
currency: EUR&lt;br /&gt;
cost: 0.89&lt;br /&gt;
login: 498912345678&lt;br /&gt;
type: existing&lt;br /&gt;
expiration: 1460832553&amp;lt;/pre&amp;gt;&lt;br /&gt;
Den Text hinter dem Zeilenanfang &amp;lt;code&amp;gt;pw: &amp;lt;/code&amp;gt; benötigt man nun für die Konfigurationsdatei, wo dieser eingefügt werden muss:&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /opt/yowsup-config/yowsup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sodass die Datei beispielhaft dann so aussieht:&lt;br /&gt;
&amp;lt;pre&amp;gt;## Actual config starts below ##&lt;br /&gt;
&lt;br /&gt;
#cc ist wichtig ansonsten funktioniert es nicht aus dem Script&lt;br /&gt;
cc=49&lt;br /&gt;
phone=498912345678&lt;br /&gt;
id=0000000000&lt;br /&gt;
password=bfGA9wPWWNeHcSBxxxxxxxxxxxxxxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie man schon gesehen hat, ist der Account nur begrenzt gültig - die Gültigkeit kann man anhand der als &amp;lt;code&amp;gt;expiration: &amp;lt;/code&amp;gt; bezeichneten Zeile ablesen, welche einen Unix-Timestamp beinhaltet. Diese kann man [http://elmar-eigner.de/tstamps.html?zeichen=1444570276&amp;amp;timeformat=2 HIER] umrechnen lassen.&lt;br /&gt;
&lt;br /&gt;
Nun mal ein schneller test an die eigene Nummer (im Beispiel 491751234567):&lt;br /&gt;
&amp;lt;pre&amp;gt;python yowsup-cli demos -c /opt/yowsup-config/yowsup.config -s 491751234567 &amp;quot;Das ist ein Test&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das sollte dir eine Nachricht einbringen. Wenn du darauf antwortest, kommt diese allerdings noch nicht an - der Client hat sich nach dem Befehl sofort beendet. Damit dieser dauerhaft im Hintergrund läuft legen wir nun in FHEM ein Gerät an, welches dies steuert.&lt;br /&gt;
&lt;br /&gt;
=== FHEM Define ===&lt;br /&gt;
* Fhem Device anlegen: &amp;lt;code&amp;gt; define &amp;lt;name&amp;gt; yowsup&amp;lt;/code&amp;gt;, also z.B. &amp;lt;code&amp;gt;define WhatsApp yowsup&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nun muss man den Pfad zu yowsup anpassen: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-config/yowsup.config --yowsup&amp;lt;/code&amp;gt;&lt;br /&gt;
* Und das Home directory mit dem Pfad zum Home des fhem users: &amp;lt;code&amp;gt;attr WhatsApp home PWD&amp;lt;/code&amp;gt;&lt;br /&gt;
* Wenn alles gut geht, gibt es danach im Device ein internal PID und das Reading &#039;&#039;state&#039;&#039;&lt;br /&gt;
* Im Whatsapp Client auf dem Handy sollte man sehen, dass Fhem online ist&lt;br /&gt;
* Zum Senden aus Fhem kann man das Kommando &amp;lt;code&amp;gt;set WhatsApp send &amp;lt;nummer&amp;gt; &amp;lt;text&amp;gt;&amp;lt;/code&amp;gt; verwenden&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
Bitte sehe immer in der [[http://fhem.de/commandref.html#yowsup Commandref]] nach - diese hier könnten veraltet sein.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cmd&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;komplettes Kommando, um den yowsup Client zu starten. z.B.: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-config/yowsup.config --yowsup&amp;lt;/code&amp;gt;. Wenn die ab  yowsup-Version 2.4 standartmässig aktivierte Verschlüsselung abgeschaltet werden muss weil die entsprechenden Libs nicht installiert sind: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/local/bin/yowsup-cli demos -c /root/yowsup-config --yowsup -M&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;accept_from&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;kommagetrennte Liste von Kontakten (Nummern), von denen Nachrichten akzeptiert werden. Ist das Attribut nicht gesetzt, so werden die Nachrichten von jedem akzeptiert.&lt;br /&gt;
* &amp;lt;code&amp;gt;commandPrefix&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;nicht gesetzt -&amp;gt; es werden keine Befehle akzeptiert.&amp;lt;br /&amp;gt;0 -&amp;gt; es werden keine Befehle akzeptiert.&amp;lt;br /&amp;gt;1 -&amp;gt; erlaubt Befehle, jede Nachricht wird als Fhem-Befehl interpretiert.&amp;lt;br /&amp;gt;alles andere -&amp;gt; Wenn die Nachricht mit diesem Prefix startet, wird alles weitere als Befehle interpretiert.&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=&#039;&#039;&#039;allowedCommands&#039;&#039;&#039; should work as intended, but no guarantee can be given, that there is no way to circumvent it.}}&lt;br /&gt;
* &amp;lt;code&amp;gt;allowedCommands&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Eine Komma-getrennte Liste von zulässigen Befehlen für diesen Kontakt. Wenn die Liste leer ist (z.B. nur ein Komma), dann werden keine Befehle akzeptiert.&lt;br /&gt;
* &amp;lt;code&amp;gt;home&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Setzt das Home-directory welches für yowsup verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
* image -&amp;gt; Über diesen Befehl können Bilder gesendet werden.&lt;br /&gt;
&lt;br /&gt;
* raw -&amp;gt; Status ändern :  &lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /profile setStatus &#039;mein Status&#039;    &amp;lt;--- die &#039; &#039; müssen bleiben&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Name der angezeigt werden soll, wenn eine Nachricht z.B. ans iPhone geschickt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /presence name &amp;lt;DeinNick&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anzeige online :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /presence available&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Profilbild ändern :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /profile setPicture &#039;/opt/fhem/fhem_logo.png&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;--- der gesamte Pfad zum Bild muss angegeben werden und Rechte müssen ggfs. bei fhem liegen&lt;br /&gt;
&lt;br /&gt;
Falls es nicht funktioniert disconnect/connect probieren.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispielnachricht ===&lt;br /&gt;
Beim Empfang einer Nachricht wird automatisch ein Fhem Device für diesen Kontakt angelegt. In diesem Device gibt es das Reading &#039;&#039;&#039;message&#039;&#039;&#039; für die empfangene Nachricht und ab der ersten Nachricht auch das Reading &#039;&#039;&#039;chatstate&#039;&#039;&#039;, in dem zu sehen ist, ob gerade getippt wird.&lt;br /&gt;
Nachdem ein Device für einen Kontakt angelegt ist, lässt sich auch direkt dieses Device zum Senden verwenden: &lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; send &amp;lt;text&amp;gt;&amp;lt;/code&amp;gt;, &lt;br /&gt;
d.h., man spart sich die Angabe der Nummer.&lt;br /&gt;
&lt;br /&gt;
=== Gruppen ===&lt;br /&gt;
Gruppen müssen über die App (Smartphone / Tablet) angelegt werden. Nach dem Empfang einer entsprechenden Nachricht werden Gruppen genauso behandelt, wie einfache Teilnehmer.&lt;br /&gt;
&lt;br /&gt;
=== Broadcast ===&lt;br /&gt;
Beim Senden über das Masterdevice lassen sich mehrere Empfänger mit Komma (und ohne Leerzeichen) getrennt angeben. Die entsprechenden Nachrichten werden dann per Broadcast an alle Teilnehmer gesendet. Die Broadcastempfänger müssen zuvor mindestens eine normale Nachricht erhalten haben.&lt;br /&gt;
&lt;br /&gt;
=== Komponenten steuern ===&lt;br /&gt;
Um ein [[notify]] anlegen zu können, müssen wir zuerst eine Nachricht vom Handy an FHEM senden. Dadurch wird ein Device mit der Nummer als Namen angelegt. Danach sollte das Device umbenannt werden, da einige Befehle einen Namen ausschließlich aus Ziffern nicht akzeptieren. Dies geschieht wie folgt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;rename 49123456789 HandySeppel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann ein &#039;&#039;notify&#039;&#039; angelegt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
 define notifySeppelLicht notify HandySeppel:message.* {&lt;br /&gt;
 if( $EVENT eq &#039;message: Licht an&#039; ) {&lt;br /&gt;
   fhem &amp;quot;set HandySeppel send Licht ist nun an...&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set FS20_a5d800 dim100%&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 } elsif( $EVENT eq &#039;message: Licht aus&#039; ) {&lt;br /&gt;
     fhem &amp;quot;set HandySeppel send Licht ist nun aus...&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set FS20_a5d800 dim0%&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 } else {&lt;br /&gt;
     fhem &amp;quot;set HandySeppel send Wie bitte?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Natürlich ist dieses &#039;&#039;notify&#039;&#039; noch auf die eigenen Wünsche anzupassen.&lt;br /&gt;
&lt;br /&gt;
=== Autoresponder ===&lt;br /&gt;
Nachdem man nun seine Festnetznummer bei WhatsApp registriert hat, wird auch diese natürlich als erreichbares Ziel auf jedem Gerät angezeigt, auf dem sie gespeichert ist. So kann es passieren, dass WhatsApp nicht gelesen werden. Hier schafft ein Autoresponder Abhilfe:&lt;br /&gt;
:&amp;lt;code&amp;gt;define not_WhatsApp_Autoresponder notify 491.*:message.* set  $NAME send Hallo, Du hast eine Nachricht an unsere Festnetznummer geschickt. Da ist aber nur ein kleiner Computer auf Empfang, der Dir nur diese Antwort schicken kann. Bitte benutze unsere Mobilnummern, wenn Du willst, dass Deine Nachricht auch gelesen wird!&amp;lt;/code&amp;gt;&lt;br /&gt;
Das Problem hierbei ist, dass noch nicht bekannt ist, wer etwas sendet und so der Kontakt u.U. noch nicht angelegt ist. Daher wird im obigen Beispiel auf 491*:message.* reagiert. So bekommen nur deutsche Mobilrufnummern die Antwort. Um das noch globaler zu fassen, könnte z.B. auf \d*.*:message.* reagiert werden, was aber voraussetzt, dass keine weiteren Modulnamen (die das Reading message haben) mit einer Ziffer beginnen.&lt;br /&gt;
Alle Kontakte, welche nicht den Autoresponder erhalten sollen, müssen wie oben beschrieben entspr. umbenannt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;rename 49123456789 HandySeppel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=27543|LinkText=Forenthread}}, in dem die Whatsapp Anwendung beschrieben wird&lt;br /&gt;
* {{Link2Forum|Topic=27543|Message=299292|LinkText=Foreneintrag}}, ab dem das yowsup Modul beschrieben wird&lt;br /&gt;
* Die Python Whatsapp Library auf [https://github.com/tgalal/yowsup github]&lt;br /&gt;
* Imagehandling Bugfix [https://github.com/tgalal/yowsup/issues/901 github]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=15005</id>
		<title>Yowsup</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=15005"/>
		<updated>2016-04-06T15:16:43Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Installation */ python-axolotl-master ergänzt etspr. https://forum.fhem.de/index.php/topic,27543.msg431955.html#msg431955&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:yowsup}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Schnittstelle, um WhatsApp-Nachrichten empfangen und senden zu können. &lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=yowsup&lt;br /&gt;
|ModFTopic=27543&lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModTechName=32_yowsup.pm&lt;br /&gt;
|ModOwner=André / justme1968 ({{Link2FU|430|Forum}} / [[Benutzer Diskussion:justme|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[yowsup]] dient dazu, WhatsApp-Nachrichten zu empfangen und zu senden. Nachrichten können sein:&lt;br /&gt;
* &#039;&#039;&#039;Text&#039;&#039;&#039;: senden und empfangen, z.b.: Infonachrichten senden, FHEM-Kommandos empfangen&lt;br /&gt;
* &#039;&#039;&#039;Bilder&#039;&#039;&#039;: senden und emfangen, z.b.: Webcambilder nach Bewegungserkennung versenden&lt;br /&gt;
* &#039;&#039;&#039;Audio&#039;&#039;&#039;: empfangen, z.b.: Sprachdurchsagen empfangen und über SONOS abspielen&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
* Die Funktionalität ist vermutlich auf Linux/Unix Systeme beschränkt.&lt;br /&gt;
* Nach der Erstinstallation/-einrichtung &#039;&#039;&#039;muss&#039;&#039;&#039; zwingend das &#039;&#039;cmd&#039;&#039; Attribut korrekt gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
Die ursprüngliche Einrichtung wurde {{Link2Forum|Topic=27543|Message=204426|LinkText=hier beschrieben}}, jedoch sind noch einige wichtige Dinge zu setzen.&lt;br /&gt;
&lt;br /&gt;
=== Yowsup Installation ===&lt;br /&gt;
Bevor man loslegt sollte man wie immer sicherstellen, dass Debian auf dem aktuellen Stand ist:&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get dist-upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los gehts mit den Paketen:&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install python-soappy python-dateutil python-pip python-dev build-essential&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erstmal pip updaten:&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install --upgrade pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und dann axolotl installieren (das dauert ne Weile):&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install python-axolotl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zudem wird neben den Python Modulen noch eine Lib von tgalal benötigt:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;cd /opt/fhem/yowsup&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo wget https://github.com/tgalal/python-axolotl/archive/master.zip&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo unzip master.zip&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;cd python-axolotl-master&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo python setup.py install&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man Bilder verarbeiten, so braucht man noch ein paar Pakete mehr:&lt;br /&gt;
* Paketinstallationen:&lt;br /&gt;
** Unter Debian Wheezy: &amp;lt;code&amp;gt;sudo apt-get install libtiff4-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk&amp;lt;/code&amp;gt;&lt;br /&gt;
** Unter Debian Jessie: &amp;lt;code&amp;gt;sudo apt-get install libtiff5-dev libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk&amp;lt;/code&amp;gt;&lt;br /&gt;
* PIP:&amp;lt;code&amp;gt;sudo pip install pillow&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vor den weiteren Schritten sollte geprüft werden, ob dem User fhem eine Loginshell zugewiesen ist:&lt;br /&gt;
:&amp;lt;code&amp;gt;getent passwd fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
Wird hier am Ende /bin/false ausgegeben, so muss dies angepasst werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo chsh -s /bin/bash fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mittels &#039;&#039;getent passwd fhem&#039;&#039; kann auch bereits das Home-Verzeichnis ausgelesen werden, dies steht in der ausgegebenen Doppelpunkt-separierten Liste an vorletzter Stelle. &lt;br /&gt;
&lt;br /&gt;
Nun loggt man sich unter dem User ein, unter dem fhem läuft (in den folgenden Beispielen werden die vom fhem-Setup-Script generierten Defaults verwendet: User=fhem , home=/opt/fhem Gruppe=dialout) und liest dort die $HOME-Variable aus und prüft das Home-Verzeichnis:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo su - fhem&lt;br /&gt;
echo $HOME&lt;br /&gt;
cd $HOME&lt;br /&gt;
logout&amp;lt;/pre&amp;gt;&lt;br /&gt;
Diesen Wert braucht man später - gut merken. Sollte hier ein Fehler auftreten (z.B. das home nicht vorhanden), so muss dies zuerst korrigiert werden.&lt;br /&gt;
&lt;br /&gt;
Desweiteren muss man nun yowsup installieren. Hierfür stehen zwei Möglichkeiten zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
Erstens:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt&lt;br /&gt;
sudo mkdir yowsup-config&lt;br /&gt;
sudo wget -N https://github.com/tgalal/yowsup/archive/master.zip&lt;br /&gt;
sudo unzip -o master.zip&lt;br /&gt;
rm master.zip&lt;br /&gt;
cd yowsup-config&lt;br /&gt;
sudo nano yowsup.config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie bemerkt, ist man nun im Editor für die yowsup.config gelandet. Diese wird nun wie folgt gefüllt:&lt;br /&gt;
&amp;lt;pre&amp;gt;## Actual config starts below ##&lt;br /&gt;
&lt;br /&gt;
#cc ist wichtig ansonsten funktioniert es nicht aus dem Script&lt;br /&gt;
cc=49&lt;br /&gt;
phone=498912345678&lt;br /&gt;
id=0000000000&lt;br /&gt;
password=&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ersetze die Nummer 498912345678 gegen eine Festnetz oder Handynummer welche derzeit nicht mit WhatsApp verwendet wird. Mittels STRG+o wird die Datei nun gespeichert und mittels STRG+x verlässt man den Editor.&lt;br /&gt;
&lt;br /&gt;
Vor den weiteren Schritten sollte man nun erstmal die yowsup Verzeichnisse dem fhem-user zugängig machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo chown -R fhem:dialout /opt/yowsup-master /opt/yowsup-config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die folgenden Schritte würde ich auf den FHEM-Nutzer wechseln:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo su - fhem&lt;br /&gt;
cd /opt/yowsup-master&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erfolgt die Anmeldung am WhatsApp-Server. Dies kann man nun via &amp;lt;code&amp;gt;voice&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sms&amp;lt;/code&amp;gt; machen. Bei einem Handy bietet sich SMS an, bei Festnetzanschlüssen sollte voice gewählt werden, wenn man sich nicht sicher ist, dass der Anschluss die Funktion &#039;SMS im Festnetz&#039; unterstützt. Dann wird der Bestätigungscode zwar auf Englisch vorgelesen, dafür ist die Zuverlässigkeit des Registrierungsvorganges zuverlässiger. Bei Festnetznummern sollte man unbedingt etwas zum schreiben bereit halten!&lt;br /&gt;
&amp;lt;pre&amp;gt;python yowsup-cli registration -c /opt/yowsup-config/yowsup.config -r sms&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückmeldung ist nun entscheidend. Wenn man diese zurückbekommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;de sms&lt;br /&gt;
status: fail&lt;br /&gt;
retry_after: 3600&lt;br /&gt;
reason: no_routes&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dann ist die Nummer so nicht kompatibel. Was man dann noch probieren kann, ist die registration via voice - meistens ist das aber vergebene Liebesmüh&#039;.&lt;br /&gt;
&lt;br /&gt;
Wenn man folgende Rückmeldung bekommt:&lt;br /&gt;
&amp;lt;pre&amp;gt;Detected cc: 49&lt;br /&gt;
status: sent&lt;br /&gt;
retry_after: 1805&lt;br /&gt;
length: 6&lt;br /&gt;
method: sms&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So ist alles gut gelaufen und man sollte kurz später eine SMS bekommen. Darin ist ein Text, der am Ende z.B. 123-456 lautet. Diesen fügt man ohne Bindestrich am Ende des folgenden Befehls ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;python yowsup-cli registration -c /opt/yowsup-config/yowsup.config -R 123456&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kommt ein Text der etwa so aussehen sollte:&lt;br /&gt;
&amp;lt;pre&amp;gt;status: ok&lt;br /&gt;
kind: free&lt;br /&gt;
pw: bfGA9wPWWNeHcSBxxxxxxxxxxxxxxxxx&lt;br /&gt;
price: 0,89 €&lt;br /&gt;
price_expiration: 1432127524&lt;br /&gt;
currency: EUR&lt;br /&gt;
cost: 0.89&lt;br /&gt;
login: 498912345678&lt;br /&gt;
type: existing&lt;br /&gt;
expiration: 1460832553&amp;lt;/pre&amp;gt;&lt;br /&gt;
Den Text hinter dem Zeilenanfang &amp;lt;code&amp;gt;pw: &amp;lt;/code&amp;gt; benötigt man nun für die Konfigurationsdatei, wo dieser eingefügt werden muss:&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /opt/yowsup-config/yowsup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sodass die Datei beispielhaft dann so aussieht:&lt;br /&gt;
&amp;lt;pre&amp;gt;## Actual config starts below ##&lt;br /&gt;
&lt;br /&gt;
#cc ist wichtig ansonsten funktioniert es nicht aus dem Script&lt;br /&gt;
cc=49&lt;br /&gt;
phone=498912345678&lt;br /&gt;
id=0000000000&lt;br /&gt;
password=bfGA9wPWWNeHcSBxxxxxxxxxxxxxxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie man schon gesehen hat, ist der Account nur begrenzt gültig - die Gültigkeit kann man anhand der als &amp;lt;code&amp;gt;expiration: &amp;lt;/code&amp;gt; bezeichneten Zeile ablesen, welche einen Unix-Timestamp beinhaltet. Diese kann man [http://elmar-eigner.de/tstamps.html?zeichen=1444570276&amp;amp;timeformat=2 HIER] umrechnen lassen.&lt;br /&gt;
&lt;br /&gt;
Nun mal ein schneller test an die eigene Nummer (im Beispiel 491751234567):&lt;br /&gt;
&amp;lt;pre&amp;gt;python yowsup-cli demos -c /opt/yowsup-config/yowsup.config -s 491751234567 &amp;quot;Das ist ein Test&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das sollte dir eine Nachricht einbringen. Wenn du darauf antwortest, kommt diese allerdings noch nicht an - der Client hat sich nach dem Befehl sofort beendet. Damit dieser dauerhaft im Hintergrund läuft legen wir nun in FHEM ein Gerät an, welches dies steuert.&lt;br /&gt;
&lt;br /&gt;
=== FHEM Define ===&lt;br /&gt;
* Fhem Device anlegen: &amp;lt;code&amp;gt; define &amp;lt;name&amp;gt; yowsup&amp;lt;/code&amp;gt;, also z.B. &amp;lt;code&amp;gt;define WhatsApp yowsup&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nun muss man den Pfad zu yowsup anpassen: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-config/yowsup.config --yowsup&amp;lt;/code&amp;gt;&lt;br /&gt;
* Und das Home directory mit dem Pfad zum Home des fhem users: &amp;lt;code&amp;gt;attr WhatsApp home PWD&amp;lt;/code&amp;gt;&lt;br /&gt;
* Wenn alles gut geht, gibt es danach im Device ein internal PID und das Reading &#039;&#039;state&#039;&#039;&lt;br /&gt;
* Im Whatsapp Client auf dem Handy sollte man sehen, dass Fhem online ist&lt;br /&gt;
* Zum Senden aus Fhem kann man das Kommando &amp;lt;code&amp;gt;set WhatsApp send &amp;lt;nummer&amp;gt; &amp;lt;text&amp;gt;&amp;lt;/code&amp;gt; verwenden&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
Bitte sehe immer in der [[http://fhem.de/commandref.html#yowsup Commandref]] nach - diese hier könnten veraltet sein.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cmd&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;komplettes Kommando, um den yowsup Client zu starten. z.B.: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-config/yowsup.config --yowsup&amp;lt;/code&amp;gt;. Wenn die ab  yowsup-Version 2.4 standartmässig aktivierte Verschlüsselung abgeschaltet werden muss weil die entsprechenden Libs nicht installiert sind: &amp;lt;code&amp;gt;attr WhatsApp cmd /opt/local/bin/yowsup-cli demos -c /root/yowsup-config --yowsup -M&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;accept_from&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;kommagetrennte Liste von Kontakten (Nummern), von denen Nachrichten akzeptiert werden. Ist das Attribut nicht gesetzt, so werden die Nachrichten von jedem akzeptiert.&lt;br /&gt;
* &amp;lt;code&amp;gt;commandPrefix&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;nicht gesetzt -&amp;gt; es werden keine Befehle akzeptiert.&amp;lt;br /&amp;gt;0 -&amp;gt; es werden keine Befehle akzeptiert.&amp;lt;br /&amp;gt;1 -&amp;gt; erlaubt Befehle, jede Nachricht wird als Fhem-Befehl interpretiert.&amp;lt;br /&amp;gt;alles andere -&amp;gt; Wenn die Nachricht mit diesem Prefix startet, wird alles weitere als Befehle interpretiert.&lt;br /&gt;
{{Randnotiz|RNTyp=Warn|RNText=&#039;&#039;&#039;allowedCommands&#039;&#039;&#039; should work as intended, but no guarantee can be given, that there is no way to circumvent it.}}&lt;br /&gt;
* &amp;lt;code&amp;gt;allowedCommands&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Eine Komma-getrennte Liste von zulässigen Befehlen für diesen Kontakt. Wenn die Liste leer ist (z.B. nur ein Komma), dann werden keine Befehle akzeptiert.&lt;br /&gt;
* &amp;lt;code&amp;gt;home&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;Setzt das Home-directory welches für yowsup verwendet werden soll.&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
* image -&amp;gt; Über diesen Befehl können Bilder gesendet werden.&lt;br /&gt;
&lt;br /&gt;
* raw -&amp;gt; Status ändern :  &lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /profile setStatus &#039;mein Status&#039;    &amp;lt;--- die &#039; &#039; müssen bleiben&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Name der angezeigt werden soll, wenn eine Nachricht z.B. ans iPhone geschickt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /presence name &amp;lt;DeinNick&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anzeige online :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /presence available&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Profilbild ändern :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set WhatsApp raw /profile setPicture &#039;/opt/fhem/fhem_logo.png&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;--- der gesamte Pfad zum Bild muss angegeben werden und Rechte müssen ggfs. bei fhem liegen&lt;br /&gt;
&lt;br /&gt;
Falls es nicht funktioniert disconnect/connect probieren.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispielnachricht ===&lt;br /&gt;
Beim Empfang einer Nachricht wird automatisch ein Fhem Device für diesen Kontakt angelegt. In diesem Device gibt es das Reading &#039;&#039;&#039;message&#039;&#039;&#039; für die empfangene Nachricht und ab der ersten Nachricht auch das Reading &#039;&#039;&#039;chatstate&#039;&#039;&#039;, in dem zu sehen ist, ob gerade getippt wird.&lt;br /&gt;
Nachdem ein Device für einen Kontakt angelegt ist, lässt sich auch direkt dieses Device zum Senden verwenden: &lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; send &amp;lt;text&amp;gt;&amp;lt;/code&amp;gt;, &lt;br /&gt;
d.h., man spart sich die Angabe der Nummer.&lt;br /&gt;
&lt;br /&gt;
=== Gruppen ===&lt;br /&gt;
Gruppen müssen über die App (Smartphone / Tablet) angelegt werden. Nach dem Empfang einer entsprechenden Nachricht werden Gruppen genauso behandelt, wie einfache Teilnehmer.&lt;br /&gt;
&lt;br /&gt;
=== Broadcast ===&lt;br /&gt;
Beim Senden über das Masterdevice lassen sich mehrere Empfänger mit Komma (und ohne Leerzeichen) getrennt angeben. Die entsprechenden Nachrichten werden dann per Broadcast an alle Teilnehmer gesendet. Die Broadcastempfänger müssen zuvor mindestens eine normale Nachricht erhalten haben.&lt;br /&gt;
&lt;br /&gt;
=== Komponenten steuern ===&lt;br /&gt;
Um ein [[notify]] anlegen zu können, müssen wir zuerst eine Nachricht vom Handy an FHEM senden. Dadurch wird ein Device mit der Nummer als Namen angelegt. Danach sollte das Device umbenannt werden, da einige Befehle einen Namen ausschließlich aus Ziffern nicht akzeptieren. Dies geschieht wie folgt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;rename 49123456789 HandySeppel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann ein &#039;&#039;notify&#039;&#039; angelegt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
 define notifySeppelLicht notify HandySeppel:message.* {&lt;br /&gt;
 if( $EVENT eq &#039;message: Licht an&#039; ) {&lt;br /&gt;
   fhem &amp;quot;set HandySeppel send Licht ist nun an...&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set FS20_a5d800 dim100%&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 } elsif( $EVENT eq &#039;message: Licht aus&#039; ) {&lt;br /&gt;
     fhem &amp;quot;set HandySeppel send Licht ist nun aus...&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set FS20_a5d800 dim0%&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 } else {&lt;br /&gt;
     fhem &amp;quot;set HandySeppel send Wie bitte?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Natürlich ist dieses &#039;&#039;notify&#039;&#039; noch auf die eigenen Wünsche anzupassen.&lt;br /&gt;
&lt;br /&gt;
=== Autoresponder ===&lt;br /&gt;
Nachdem man nun seine Festnetznummer bei WhatsApp registriert hat, wird auch diese natürlich als erreichbares Ziel auf jedem Gerät angezeigt, auf dem sie gespeichert ist. So kann es passieren, dass WhatsApp nicht gelesen werden. Hier schafft ein Autoresponder Abhilfe:&lt;br /&gt;
:&amp;lt;code&amp;gt;define not_WhatsApp_Autoresponder notify 491.*:message.* set  $NAME send Hallo, Du hast eine Nachricht an unsere Festnetznummer geschickt. Da ist aber nur ein kleiner Computer auf Empfang, der Dir nur diese Antwort schicken kann. Bitte benutze unsere Mobilnummern, wenn Du willst, dass Deine Nachricht auch gelesen wird!&amp;lt;/code&amp;gt;&lt;br /&gt;
Das Problem hierbei ist, dass noch nicht bekannt ist, wer etwas sendet und so der Kontakt u.U. noch nicht angelegt ist. Daher wird im obigen Beispiel auf 491*:message.* reagiert. So bekommen nur deutsche Mobilrufnummern die Antwort. Um das noch globaler zu fassen, könnte z.B. auf \d*.*:message.* reagiert werden, was aber voraussetzt, dass keine weiteren Modulnamen (die das Reading message haben) mit einer Ziffer beginnen.&lt;br /&gt;
Alle Kontakte, welche nicht den Autoresponder erhalten sollen, müssen wie oben beschrieben entspr. umbenannt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;rename 49123456789 HandySeppel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=27543|LinkText=Forenthread}}, in dem die Whatsapp Anwendung beschrieben wird&lt;br /&gt;
* {{Link2Forum|Topic=27543|Message=299292|LinkText=Foreneintrag}}, ab dem das yowsup Modul beschrieben wird&lt;br /&gt;
* Die Python Whatsapp Library auf [https://github.com/tgalal/yowsup github]&lt;br /&gt;
* Imagehandling Bugfix [https://github.com/tgalal/yowsup/issues/901 github]&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:DUOFERNSTICK&amp;diff=14978</id>
		<title>Diskussion:DUOFERNSTICK</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Diskussion:DUOFERNSTICK&amp;diff=14978"/>
		<updated>2016-04-04T06:36:04Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle statt der fehlerträchtigen ttyUSB-Zuordnung die auch in der commandref empfohlene Zuordnung per ID. Das funktioniert nachhaltig und kann auch bei nachträglicher Änderung der USB-Geräte in keinem Fall zu Verwechslungen führen. Durch die relativ eindeutige ID klappt das auch ohne Vorher-Nachher-Vergleich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDuoFernStick DUOFERNSTICK /dev/serial/by-id/usb-Rademacher_DuoFern_USB-Stick_WR03R9WD-if00-port0@115200 6F....&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Code ist nur ein Beispiel, die genaue Bezeichnung ist von Stick zu Stick verschieden, aber eindeutig. Den Link kann man aber sogar über einen FTP-Fernzugriff und den Ordnerbaum erfragen. &lt;br /&gt;
&lt;br /&gt;
Ich schlage vor, das nachzutragen.--[[Benutzer:Pfriemler|Pfriemler]] ([[Benutzer Diskussion:Pfriemler|Diskussion]]) 22:30, 29. Mär. 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
:Dem stimme ich zu und habe es angepasst--[[Benutzer:Muschelpuster|Muschelpuster]] ([[Benutzer Diskussion:Muschelpuster|Diskussion]]) 08:29, 4. Apr. 2016 (CEST)&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DUOFERNSTICK&amp;diff=14977</id>
		<title>DUOFERNSTICK</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DUOFERNSTICK&amp;diff=14977"/>
		<updated>2016-04-04T06:33:32Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=IO-Device für DuoFern-Module&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DUOFERNSTICK&lt;br /&gt;
|ModTechName=10_DUOFERNSTICK.pm&lt;br /&gt;
|ModOwner=Telekatz ({{Link2FU|10183|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
IO-Device für DuoFern-Module&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
Das Modul stellt über den Rademacher USB Stick 70000093 Typ 9495-UW das IO-Device für Geräte dar, die mit dem Modul [[DUOFERN]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
Als Schnittstelle zu den DuoFern-Geräten wird ein Rademacher USB Stick 70000093 Typ 9495-UW benötigt.&lt;br /&gt;
&lt;br /&gt;
==== Hardwareidentifikation ====&lt;br /&gt;
Der Stick sollte über seine ID definiert werden. Um diese zu ermitteln werden die vorhandenen Sticks nach dem Stecken des Sticks abgefragt:&lt;br /&gt;
:&amp;lt;code&amp;gt;/dev/serial/by-id/*&amp;lt;/code&amp;gt;&lt;br /&gt;
Hier sollte nun der Stick angezeigt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13 Jan  1  1970 /dev/serial/by-id/usb-Rademacher_DuoFern_USB-Stick_WR03R9U4-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
Die so ermittelte ID wird nun zur Definition des Sticks verwendet.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
Die Definition des Gerätes erfolgt via:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&#039;meinModulname&#039;&#039;&#039; DUOFERNSTICK &#039;&#039;&#039;USB-Stick&#039;&#039;&#039;@115200 &#039;&#039;&#039;DuoFern_COde&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Der DuoFern-Code des Gerätes muss mit 6F beginnen, die folgenden 4 Stellen können frei gewählt werden (hexadezimal 0-F).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispieldefinition ====&lt;br /&gt;
:&amp;lt;code&amp;gt;define Rademacher DUOFERNSTICK /dev/serial/by-id/usb-Rademacher_DuoFern_USB-Stick_WR03R9U4-if00-port0@115200 6F1A2B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* {{Link2Forum|Topic=40076|LinkText=Forenthema}}&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DUOFERNSTICK&amp;diff=14976</id>
		<title>DUOFERNSTICK</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DUOFERNSTICK&amp;diff=14976"/>
		<updated>2016-04-04T06:30:11Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Beispieldefinition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=IO-Device für DuoFern-Module&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DUOFERNSTICK&lt;br /&gt;
|ModTechName=10_DUOFERNSTICK.pm&lt;br /&gt;
|ModOwner=Telekatz ({{Link2FU|10183|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
IO-Device für DuoFern-Module&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
Das Modul stellt über den Rademacher USB Stick 70000093 Typ 9495-UW das IO-Device für Geräte dar, die mit dem Modul [[DUOFERN]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
Als Schnittstelle zu den DuoFern-Geräten wird ein Rademacher USB Stick 70000093 Typ 9495-UW benötigt.&lt;br /&gt;
&lt;br /&gt;
==== Hardwareidentifikation ====&lt;br /&gt;
Der Stick sollte über seine ID definiert werden. Um diese zu ermitteln werden die vorhandenen Sticks nach dem Stecken des Sticks abgefragt:&lt;br /&gt;
:&amp;lt;code&amp;gt;/dev/serial/by-id/*&amp;lt;/code&amp;gt;&lt;br /&gt;
Hier sollte nun der Stick angezeigt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13 Jan  1  1970 /dev/serial/by-id/usb-Rademacher_DuoFern_USB-Stick_WR03R9U4-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
Die so ermittelte ID wird nun zur Definition des Sticks verwendet.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
Die Definition des Gerätes erfolgt via:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&#039;meinModulname&#039;&#039;&#039; DUOFERNSTICK &#039;&#039;&#039;USB-Stick&#039;&#039;&#039;@115200 &#039;&#039;&#039;DuoFern_COde&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Der DuoFern-Code des Gerätes muss mit 6F beginnen, die folgenden 4 Stellen können frei gewählt werden (hexadezimal 0-F).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispieldefinition ====&lt;br /&gt;
:&amp;lt;code&amp;gt;define Rademacher DUOFERNSTICK /dev/serial/by-id/usb-Rademacher_DuoFern_USB-Stick_WR03R9U4-if00@115200 6F1A2B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* {{Link2Forum|Topic=40076|LinkText=Forenthema}}&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:DUOFERNSTICK&amp;diff=14975</id>
		<title>Diskussion:DUOFERNSTICK</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Diskussion:DUOFERNSTICK&amp;diff=14975"/>
		<updated>2016-04-04T06:29:10Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle statt der fehlerträchtigen ttyUSB-Zuordnung die auch in der commandref empfohlene Zuordnung per ID. Das funktioniert nachhaltig und kann auch bei nachträglicher Änderung der USB-Geräte in keinem Fall zu Verwechslungen führen. Durch die relativ eindeutige ID klappt das auch ohne Vorher-Nachher-Vergleich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define myDuoFernStick DUOFERNSTICK /dev/serial/by-id/usb-Rademacher_DuoFern_USB-Stick_WR03R9WD-if00-port0@115200 6F....&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Code ist nur ein Beispiel, die genaue Bezeichnung ist von Stick zu Stick verschieden, aber eindeutig. Den Link kann man aber sogar über einen FTP-Fernzugriff und den Ordnerbaum erfragen. &lt;br /&gt;
&lt;br /&gt;
Ich schlage vor, das nachzutragen.--[[Benutzer:Pfriemler|Pfriemler]] ([[Benutzer Diskussion:Pfriemler|Diskussion]]) 22:30, 29. Mär. 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
Dem stimme ich zu und habe es angepasst--[[Benutzer:Muschelpuster|Muschelpuster]] ([[Benutzer Diskussion:Muschelpuster|Diskussion]]) 08:29, 4. Apr. 2016 (CEST)&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DUOFERNSTICK&amp;diff=14974</id>
		<title>DUOFERNSTICK</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DUOFERNSTICK&amp;diff=14974"/>
		<updated>2016-04-04T06:28:00Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Anpassung entspr. Commandref entspr. Hinweis vom Pfriemler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=IO-Device für DuoFern-Module&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DUOFERNSTICK&lt;br /&gt;
|ModTechName=10_DUOFERNSTICK.pm&lt;br /&gt;
|ModOwner=Telekatz ({{Link2FU|10183|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
IO-Device für DuoFern-Module&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
Das Modul stellt über den Rademacher USB Stick 70000093 Typ 9495-UW das IO-Device für Geräte dar, die mit dem Modul [[DUOFERN]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
Als Schnittstelle zu den DuoFern-Geräten wird ein Rademacher USB Stick 70000093 Typ 9495-UW benötigt.&lt;br /&gt;
&lt;br /&gt;
==== Hardwareidentifikation ====&lt;br /&gt;
Der Stick sollte über seine ID definiert werden. Um diese zu ermitteln werden die vorhandenen Sticks nach dem Stecken des Sticks abgefragt:&lt;br /&gt;
:&amp;lt;code&amp;gt;/dev/serial/by-id/*&amp;lt;/code&amp;gt;&lt;br /&gt;
Hier sollte nun der Stick angezeigt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;lrwxrwxrwx 1 root root 13 Jan  1  1970 /dev/serial/by-id/usb-Rademacher_DuoFern_USB-Stick_WR03R9U4-if00-port0 -&amp;gt; ../../ttyUSB0&amp;lt;/code&amp;gt;&lt;br /&gt;
Die so ermittelte ID wird nun zur Definition des Sticks verwendet.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
Die Definition des Gerätes erfolgt via:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&#039;meinModulname&#039;&#039;&#039; DUOFERNSTICK &#039;&#039;&#039;USB-Stick&#039;&#039;&#039;@115200 &#039;&#039;&#039;DuoFern_COde&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Der DuoFern-Code des Gerätes muss mit 6F beginnen, die folgenden 4 Stellen können frei gewählt werden (hexadezimal 0-F).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispieldefinition ====&lt;br /&gt;
:&amp;lt;code&amp;gt;define Rademacher DUOFERNSTICK /dev/ttyUSB0@115200 6F1A2B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* {{Link2Forum|Topic=40076|LinkText=Forenthema}}&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14973</id>
		<title>DUOFERN</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14973"/>
		<updated>2016-04-04T06:15:55Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Pairing bei Erstinbetriebnahme des Gerätes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=IO-Device für DuoFern-Module&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DUOFERN&lt;br /&gt;
|ModTechName=30_DUOFERN.pm&lt;br /&gt;
|ModOwner=Telekatz ({{Link2FU|10183|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
DuoFern-Module&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
Das Modul definiert DuoFern-Geräte, welche über das Modul [[DUOFERNSTICK]] angesteuert werden können. Dieses muss zuvor definiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
Die Aktoren senden nach einer Zustandsänderung automatisch eine Statusnachricht aus - auch wenn sie noch mit keinem anderen Gerät gepaart sind. Empfängt FHEM eine solche Nachricht, wird der Aktor per [[Autocreate]] angelegt und erscheint im Ordner DUOFERN (wenn in FHEM kein anderer Ordner für Neugeräte definiert wurde).&lt;br /&gt;
Ohne [[Autocreate]] muss das Gerät manuell definiert werden:&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&#039;meinModulname&#039;&#039;&#039; DUOFERN &#039;&#039;&#039;DUOFERNCODE&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Wenn der Code des Gerätes nicht bekannt ist, kann dieser mittels des Event-Monitors ermittelt werden, indem an dem DuoFern-Gerät eine Aktion ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
==== Beispieldefinition ====&lt;br /&gt;
:&amp;lt;code&amp;gt;define Rolladen1 DUOFERN 49A1F9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Zusätzlich zur Definition muss das Gerät mit dem Stick gepairt werden. Ohne Pairing kann FHEM zwar den Status des Gerätes lesen, es aber nicht steuern. &lt;br /&gt;
&lt;br /&gt;
==== Pairing bei Erstinbetriebnahme des Gerätes ====&lt;br /&gt;
Während der ersten zwei Stunden nach Aktivierung der Stromzufuhr ist der Aktor bereit, das remotePair/remoteUnpair Kommando auch von nicht gepairten Geräten zu akzeptieren. Nach Ablauf dieser Zeit muss das Gerät manuell in den Pairing-Mode gebracht werden (s.u.).&lt;br /&gt;
Abschließend muss dann noch der Stick mittels Pair-Kommando in den Pairing-Mode versetzt werden.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel&lt;br /&gt;
:&amp;lt;code&amp;gt;set DUOFERN_4989AB set remotePair&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set mein_DuoFern_Stick pair&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pairing über Pairing-Funktion des Gerätes ====&lt;br /&gt;
Das Gerät wird entspr. seiner Bedienungsanleitung in den Pairing-Modus versetzt. Dann wird das Pair-Kommando auf dem Stick ausgeführt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;set mein_DuoFern_Stick pair&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* {{Link2Forum|Topic=40076|LinkText=Forenthema}}&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14972</id>
		<title>DUOFERN</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14972"/>
		<updated>2016-04-04T06:15:13Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Pairing bei Erstinbetriebnahme des Gerätes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=IO-Device für DuoFern-Module&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DUOFERN&lt;br /&gt;
|ModTechName=30_DUOFERN.pm&lt;br /&gt;
|ModOwner=Telekatz ({{Link2FU|10183|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
DuoFern-Module&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
Das Modul definiert DuoFern-Geräte, welche über das Modul [[DUOFERNSTICK]] angesteuert werden können. Dieses muss zuvor definiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
Die Aktoren senden nach einer Zustandsänderung automatisch eine Statusnachricht aus - auch wenn sie noch mit keinem anderen Gerät gepaart sind. Empfängt FHEM eine solche Nachricht, wird der Aktor per [[Autocreate]] angelegt und erscheint im Ordner DUOFERN (wenn in FHEM kein anderer Ordner für Neugeräte definiert wurde).&lt;br /&gt;
Ohne [[Autocreate]] muss das Gerät manuell definiert werden:&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&#039;meinModulname&#039;&#039;&#039; DUOFERN &#039;&#039;&#039;DUOFERNCODE&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Wenn der Code des Gerätes nicht bekannt ist, kann dieser mittels des Event-Monitors ermittelt werden, indem an dem DuoFern-Gerät eine Aktion ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
==== Beispieldefinition ====&lt;br /&gt;
:&amp;lt;code&amp;gt;define Rolladen1 DUOFERN 49A1F9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Zusätzlich zur Definition muss das Gerät mit dem Stick gepairt werden. Ohne Pairing kann FHEM zwar den Status des Gerätes lesen, es aber nicht steuern. &lt;br /&gt;
&lt;br /&gt;
==== Pairing bei Erstinbetriebnahme des Gerätes ====&lt;br /&gt;
Während der ersten zwei Stunden nach Aktivierung der Stromzufuhr ist der Aktor bereit, das remotePair/remoteUnpair Kommando auch von nicht gepairten Geräten zu akzeptieren. Nach Ablauf dieser Zeit muss das Gerät entspr. seiner Bedienungsanleitung in den Pairing-Mode gebracht werden (s.u.).&lt;br /&gt;
Abschließend muss dann noch der Stick mittels Pair-Kommando in den Pairing-Mode versetzt werden.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel&lt;br /&gt;
:&amp;lt;code&amp;gt;set DUOFERN_4989AB set remotePair&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set mein_DuoFern_Stick pair&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pairing über Pairing-Funktion des Gerätes ====&lt;br /&gt;
Das Gerät wird entspr. seiner Bedienungsanleitung in den Pairing-Modus versetzt. Dann wird das Pair-Kommando auf dem Stick ausgeführt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;set mein_DuoFern_Stick pair&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* {{Link2Forum|Topic=40076|LinkText=Forenthema}}&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14971</id>
		<title>DUOFERN</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14971"/>
		<updated>2016-04-04T06:13:53Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Pairing bei Erstinbetriebnahme des Gerätes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=IO-Device für DuoFern-Module&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DUOFERN&lt;br /&gt;
|ModTechName=30_DUOFERN.pm&lt;br /&gt;
|ModOwner=Telekatz ({{Link2FU|10183|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
DuoFern-Module&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
Das Modul definiert DuoFern-Geräte, welche über das Modul [[DUOFERNSTICK]] angesteuert werden können. Dieses muss zuvor definiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
Die Aktoren senden nach einer Zustandsänderung automatisch eine Statusnachricht aus - auch wenn sie noch mit keinem anderen Gerät gepaart sind. Empfängt FHEM eine solche Nachricht, wird der Aktor per [[Autocreate]] angelegt und erscheint im Ordner DUOFERN (wenn in FHEM kein anderer Ordner für Neugeräte definiert wurde).&lt;br /&gt;
Ohne [[Autocreate]] muss das Gerät manuell definiert werden:&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&#039;meinModulname&#039;&#039;&#039; DUOFERN &#039;&#039;&#039;DUOFERNCODE&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Wenn der Code des Gerätes nicht bekannt ist, kann dieser mittels des Event-Monitors ermittelt werden, indem an dem DuoFern-Gerät eine Aktion ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
==== Beispieldefinition ====&lt;br /&gt;
:&amp;lt;code&amp;gt;define Rolladen1 DUOFERN 49A1F9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Zusätzlich zur Definition muss das Gerät mit dem Stick gepairt werden. Ohne Pairing kann FHEM zwar den Status des Gerätes lesen, es aber nicht steuern. &lt;br /&gt;
&lt;br /&gt;
==== Pairing bei Erstinbetriebnahme des Gerätes ====&lt;br /&gt;
Während der ersten zwei Stunden nach Aktivierung der Stromzufuhr ist der Aktor bereit, das remotePair/remoteUnpair Kommando auch von nicht gepairten Geräten zu akzeptieren. Nach Ablauf dieser Zeit muss das Gerät entspr. seiner Bedienungsanleitung in den Pairing-Mode gebracht werden.&lt;br /&gt;
Abschließend muss dann noch der Stick mittels Pair-Kommando in den Pairing-Mode versetzt werden.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel&lt;br /&gt;
:&amp;lt;code&amp;gt;set DUOFERN_4989AB set remotePair&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set mein_DuoFern_Stick pair&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pairing über Pairing-Funktion des Gerätes ====&lt;br /&gt;
Das Gerät wird entspr. seiner Bedienungsanleitung in den Pairing-Modus versetzt. Dann wird das Pair-Kommando auf dem Stick ausgeführt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;set mein_DuoFern_Stick pair&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* {{Link2Forum|Topic=40076|LinkText=Forenthema}}&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14970</id>
		<title>DUOFERN</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14970"/>
		<updated>2016-04-04T06:11:45Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Pairing bei Erstinbetriebnahme des Gerätes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=IO-Device für DuoFern-Module&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DUOFERN&lt;br /&gt;
|ModTechName=30_DUOFERN.pm&lt;br /&gt;
|ModOwner=Telekatz ({{Link2FU|10183|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
DuoFern-Module&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
Das Modul definiert DuoFern-Geräte, welche über das Modul [[DUOFERNSTICK]] angesteuert werden können. Dieses muss zuvor definiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
Die Aktoren senden nach einer Zustandsänderung automatisch eine Statusnachricht aus - auch wenn sie noch mit keinem anderen Gerät gepaart sind. Empfängt FHEM eine solche Nachricht, wird der Aktor per [[Autocreate]] angelegt und erscheint im Ordner DUOFERN (wenn in FHEM kein anderer Ordner für Neugeräte definiert wurde).&lt;br /&gt;
Ohne [[Autocreate]] muss das Gerät manuell definiert werden:&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&#039;meinModulname&#039;&#039;&#039; DUOFERN &#039;&#039;&#039;DUOFERNCODE&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Wenn der Code des Gerätes nicht bekannt ist, kann dieser mittels des Event-Monitors ermittelt werden, indem an dem DuoFern-Gerät eine Aktion ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
==== Beispieldefinition ====&lt;br /&gt;
:&amp;lt;code&amp;gt;define Rolladen1 DUOFERN 49A1F9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Zusätzlich zur Definition muss das Gerät mit dem Stick gepairt werden. Ohne Pairing kann FHEM zwar den Status des Gerätes lesen, es aber nicht steuern. &lt;br /&gt;
&lt;br /&gt;
==== Pairing bei Erstinbetriebnahme des Gerätes ====&lt;br /&gt;
Während der ersten zwei Stunden nach Aktivierung der Stromzufuhr ist der Aktor bereit, das remotePair/remoteUnpair Kommando auch von nicht gepairten Geräten zu akzeptieren. Danach muss dann noch der Stick mittels Pair-Kommando in den Pairing-Mode versetzt werden.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel&lt;br /&gt;
:&amp;lt;code&amp;gt;set DUOFERN_4989AB set remotePair&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set mein_DuoFern_Stick pair&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pairing über Pairing-Funktion des Gerätes ====&lt;br /&gt;
Das Gerät wird entspr. seiner Bedienungsanleitung in den Pairing-Modus versetzt. Dann wird das Pair-Kommando auf dem Stick ausgeführt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;set mein_DuoFern_Stick pair&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* {{Link2Forum|Topic=40076|LinkText=Forenthema}}&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14855</id>
		<title>DUOFERN</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14855"/>
		<updated>2016-03-26T21:04:14Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=IO-Device für DuoFern-Module&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DUOFERN&lt;br /&gt;
|ModTechName=30_DUOFERN.pm&lt;br /&gt;
|ModOwner=Telekatz ({{Link2FU|10183|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
DuoFern-Module&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
Das Modul definiert DuoFern-Geräte, welche über das Modul [[DUOFERNSTICK]] angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Vor der Definition des Gerätes muss dieses mit dem Stick gepairt werden (auch wenn es bereits durch [[Autocreate]] im Raum Duofern erscheint.&lt;br /&gt;
&lt;br /&gt;
==== Pairing mit Autocrate bei Erstinbetriebnahme des Gerätes ====&lt;br /&gt;
Die Aktoren senden nach einer Zustandsänderung automatisch eine Statusnachricht aus - auch wenn sie noch mit keinem anderen Gerät gepaart sind. Empfängt FHEM eine solche Nachricht, wird der Aktor per [[Autocreate]] angelegt. Gepaart ist er deshalb noch nicht. Man sieht seinen Status, kann ihn aber ohne Pairing nicht fernsteuern.&amp;lt;br&amp;gt;&lt;br /&gt;
Während der ersten zwei Stunden nach Aktivierung der Stromzufuhr ist der Aktor bereit, das remotePair/remoteUnpair Kommando auch von nicht gepairten Geräten zu akzeptieren. Danach muss dann noch ein pair/unpair Kommando vom Stick kommen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel&lt;br /&gt;
:&amp;lt;code&amp;gt;set DUOFERN_4989AB set remotePair&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set mein_DuoFern_Stick pair&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pairing über Pairing-Funktion des Gerätest ====&lt;br /&gt;
Das Gerät wird entspr. seiner Bedienungsanleitung in den Pairing-Modus versetzt. Dann wird das Pair-Kommando auf dem Stick ausgeführt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;set mein_DuoFern_Stick pair&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
Ohne [[Autocreate]] muss das Gerät nach dem Pairing manuell definiert werden&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&#039;meinModulname&#039;&#039;&#039; DUOFERN &#039;&#039;&#039;DUOFERNCODE&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Wenn der Code des Gerätes nicht bekannt ist, kann dieser mittels des Event-Monitors ermittelt werden, indem an dem DuoFern-Gerät eine Aktion ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
==== Beispieldefinition ====&lt;br /&gt;
:&amp;lt;code&amp;gt;define Rolladen1 DUOFERN 49A1F9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* {{Link2Forum|Topic=40076|LinkText=Forenthema}}&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14854</id>
		<title>DUOFERN</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14854"/>
		<updated>2016-03-26T21:01:58Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Pairing */  - Erweiterung um Vorgänge beim Autocreate entspr. Beschreibung von Telekatz&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=IO-Device für DuoFern-Module&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DUOFERN&lt;br /&gt;
|ModTechName=30_DUOFERN.pm&lt;br /&gt;
|ModOwner=Telekatz ({{Link2FU|10183|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
DuoFern-Module&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
Das Modul definiert DuoFern-Geräte, welche über das Modul [[DUOFERNSTICK]] angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Vor der Definition des Gerätes muss dieses mit dem Stick gepairt werden (auch wenn es bereits durch [[Autocreate]] im Raum Duofern erscheint.&lt;br /&gt;
&lt;br /&gt;
==== Pairing mit Autocrate bei Erstinbetriebnahme des Gerätes ====&lt;br /&gt;
Die Aktoren senden nach einer Zustandsänderung automatisch eine Statusnachricht aus - auch wenn sie noch mit keinem anderen Gerät gepaart sind. Empfängt FHEM eine solche Nachricht, wird der Aktor per [[Autocreate]] angelegt. Gepaart ist er deshalb noch nicht. Man sieht seinen Status, kann ihn aber ohne Pairing nicht fernsteuern.&amp;lt;br&amp;gt;&lt;br /&gt;
Während der ersten zwei Stunden nach Aktivierung der Stromzufuhr ist der Aktor bereit, das remotePair/remoteUnpair Kommando auch von nicht gepairten Geräten zu akzeptieren. Danach muss dann noch ein pair/unpair Kommando vom Stick kommen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel&lt;br /&gt;
:&amp;lt;code&amp;gt;set DUOFERN_4989AB set remotePair&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set mein_DuoFern_Stick pair&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Pairing über Pairing-Funktion des Gerätest ====&lt;br /&gt;
Das Gerät wird entspr. seiner Bedienungsanleitung in den Pairing-Modus versetzt. Dann wird das Pair-Kommando auf dem Stick ausgeführt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;set mein_DuoFern_Stick pair&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
Wenn [[Autocreate]] aktiv ist, sollte das Gerät nach dem Pairing bereits im Raum Duofern angelegt sein. &amp;lt;br&amp;gt;&lt;br /&gt;
Die manuelle Definition des Gerätes erfolgt via:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&#039;meinModulname&#039;&#039;&#039; DUOFERN &#039;&#039;&#039;DUOFERNCODE&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Wenn der Code des Gerätes nicht bekannt ist, kann dieser mittels des Event-Monitors ermittelt werden, indem an dem DuoFern-Gerät eine Aktion ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
==== Beispieldefinition ====&lt;br /&gt;
:&amp;lt;code&amp;gt;define Rolladen1 DUOFERN 49A1F9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* {{Link2Forum|Topic=40076|LinkText=Forenthema}}&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14852</id>
		<title>DUOFERN</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14852"/>
		<updated>2016-03-26T19:14:20Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: Hinweis auf Autocreate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=IO-Device für DuoFern-Module&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DUOFERN&lt;br /&gt;
|ModTechName=30_DUOFERN.pm&lt;br /&gt;
|ModOwner=Telekatz ({{Link2FU|10183|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
DuoFern-Module&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
Das Modul definiert DuoFern-Geräte, welche über das Modul [[DUOFERNSTICK]] angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Vor der Definition des Gerätes muss dieses entspr. seiner Bedienungsanleitung mit dem Stick gepairt werden. Dazu wird zuerst der Pairing-Modus des Gerätes aktiviert und dann im Modul [[DUOFERNSTICK]] der Befehl &#039;set pair&#039; ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel&lt;br /&gt;
:&amp;lt;code&amp;gt;set mein_DuoFern_Stick pair&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
Wenn [[Autocreate]] aktiv ist, sollte das Gerät nach dem Pairing bereits im Raum Duofern angelegt sein. &amp;lt;br&amp;gt;&lt;br /&gt;
Die manuelle Definition des Gerätes erfolgt via:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&#039;meinModulname&#039;&#039;&#039; DUOFERN &#039;&#039;&#039;DUOFERNCODE&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Wenn der Code des Gerätes nicht bekannt ist, kann dieser mittels des Event-Monitors ermittelt werden, indem an dem DuoFern-Gerät eine Aktion ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
==== Beispieldefinition ====&lt;br /&gt;
:&amp;lt;code&amp;gt;define Rolladen1 DUOFERN 49A1F9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* {{Link2Forum|Topic=40076|LinkText=Forenthema}}&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14836</id>
		<title>DUOFERN</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DUOFERN&amp;diff=14836"/>
		<updated>2016-03-25T22:20:36Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=IO-Device für DuoFern-Module&lt;br /&gt;
|ModForumArea=FHEM - Hausautomations-Systeme&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DUOFERN&lt;br /&gt;
|ModTechName=30_DUOFERN.pm&lt;br /&gt;
|ModOwner=Telekatz ({{Link2FU|10183|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
DuoFern-Module&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
Das Modul definiert DuoFern-Geräte, welche über das Modul [[DUOFERNSTICK]] angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Vor der Definition des Gerätes muss dieses entspr. seiner Bedienungsanleitung mit dem Stick gepairt werden. Dazu wird zuerst der Pairing-Modus des Gerätes aktiviert und dann im Modul [[DUOFERNSTICK]] der Befehl &#039;set pair&#039; ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel&lt;br /&gt;
:&amp;lt;code&amp;gt;set mein_DuoFern_Stick pair&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
Die Definition des Gerätes erfolgt via:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&#039;meinModulname&#039;&#039;&#039; DUOFERN &#039;&#039;&#039;DUOFERNCODE&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Wenn der Code des Gerätes nicht bekannt ist, kann dieser mittels des Event-Monitors ermittelt werden, indem an dem DuoFern-Gerät eine Aktion ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
==== Beispieldefinition ====&lt;br /&gt;
:&amp;lt;code&amp;gt;define Rolladen1 DUOFERN 49A1F9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* {{Link2Forum|Topic=40076|LinkText=Forenthema}}&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DUOFERNSTICK&amp;diff=14835</id>
		<title>DUOFERNSTICK</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DUOFERNSTICK&amp;diff=14835"/>
		<updated>2016-03-25T22:19:46Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=IO-Device für DuoFern-Module&lt;br /&gt;
|ModForumArea=FHEM - Hausautomations-Systeme&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DUOFERNSTICK&lt;br /&gt;
|ModTechName=10_DUOFERNSTICK.pm&lt;br /&gt;
|ModOwner=Telekatz ({{Link2FU|10183|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
IO-Device für DuoFern-Module&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
Das Modul stellt über den Rademacher USB Stick 70000093 Typ 9495-UW das IO-Device für Geräte dar, die mit dem Modul [[DUOFERN]] definiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
Als Schnittstelle zu den DuoFern-Geräten wird ein Rademacher USB Stick 70000093 Typ 9495-UW benötigt.&lt;br /&gt;
&lt;br /&gt;
==== Hardwareidentifikation ====&lt;br /&gt;
Um den Stick einwandfrei identifizieren zu können, empfiehlt es sich, vor dem Stecken des Sticks bereits vorhandene Device abzufragen:&lt;br /&gt;
:&amp;lt;code&amp;gt;ls -l /dev/ttyUSB*&amp;lt;/code&amp;gt;&lt;br /&gt;
Ggf. vorhandene USB-Devices werden hier aufgelistet. Nun kann der Stick gesteckt werden und der og.g Befehl erneut ausgeführt werden. Das nun in der Liste hinzugekommene Device wird nun für die Definition des Sticks in FHEM benötigt.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
Die Definition des Gerätes erfolgt via:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &#039;&#039;&#039;meinModulname&#039;&#039;&#039; DUOFERNSTICK &#039;&#039;&#039;USB-Stick&#039;&#039;&#039;@115200 &#039;&#039;&#039;DuoFern_COde&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
Der DuoFern-Code des Gerätes muss mit 6F beginnen, die folgenden 4 Stellen können frei gewählt werden (hexadezimal 0-F).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Beispieldefinition ====&lt;br /&gt;
:&amp;lt;code&amp;gt;define Rademacher DUOFERNSTICK /dev/ttyUSB0@115200 6F1A2B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* {{Link2Forum|Topic=40076|LinkText=Forenthema}}&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Rademacher_DuoFern&amp;diff=14834</id>
		<title>Rademacher DuoFern</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Rademacher_DuoFern&amp;diff=14834"/>
		<updated>2016-03-25T22:18:11Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Ansteuerung von Rademacher DuoFern-Modulen&lt;br /&gt;
|ModForumArea=FHEM - Hausautomations-Systeme&lt;br /&gt;
|ModTechName=10_DUOFERNSTICK.pm&amp;lt;br&amp;gt;30_DUOFERN.pm&lt;br /&gt;
|ModOwner=Telekatz ({{Link2FU|10183|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Ansteuerung von Rademacher DuoFern-Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
Mit den Modulen [[DUOFERNSTICK]] und [[DUOFERN]] können Geräte des Herstellers Rademacher angesteuert werden, die auf dem DuoFern-Standard von Rademacher basieren. primär wurde die Modulgruppe für die Ansteuerung von Rademacher Rolladenmotoren und Gurtwicklern entwickelt - inzwischen sind aber weitere Module implementiert.&lt;br /&gt;
Alle Duofern-Geräte haben einen 6-stelligen hexadezimalen DuoFern-Code, der das Gerät identifiziert. Die führenden beiden Stellen definieren hierbei den Gerätetyp.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
Als Schnittstelle zu den DuoFern-Geräten wird ein Rademacher USB Stick 70000093 Typ 9495-UW benötigt. Eine Liste der unterstützten Geräte gilt es an dieser Stelle noch zu ergänzen.&lt;br /&gt;
&lt;br /&gt;
=== Module ===&lt;br /&gt;
[[DUOFENSTICK]] definiert den Stick als IO-Device&amp;lt;br&amp;gt;&lt;br /&gt;
[[DUOFERN]] definiert die DuoFern-Geräte&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* {{Link2Forum|Topic=40076|LinkText=Forenthema}}&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Rademacher_DuoFern&amp;diff=14833</id>
		<title>Rademacher DuoFern</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Rademacher_DuoFern&amp;diff=14833"/>
		<updated>2016-03-25T20:47:49Z</updated>

		<summary type="html">&lt;p&gt;Muschelpuster: /* Allgemeines */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Ansteuerung von Rademacher DuoFern-Modulen&lt;br /&gt;
|ModForumArea=FHEM - Hausautomations-Systeme&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModTechName=10_DUOFERNSTICK.pm&amp;lt;br&amp;gt;30_DUOFERN.pm&lt;br /&gt;
|ModOwner=Telekatz ({{Link2FU|10183|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Ansteuerung von Rademacher DuoFern-Komponenten&lt;br /&gt;
&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
Mit den Modulen [[DUOFERNSTICK]] und [[DUOFERN]] können Geräte des Herstellers Rademacher angesteuert werden, die auf dem DuoFern-Standard von Rademacher basieren. primär wurde die Modulgruppe für die Ansteuerung von Rademacher Rolladenmotoren und Gurtwicklern entwickelt - inzwischen sind aber weitere Module implementiert.&lt;br /&gt;
Alle Duofern-Geräte haben einen 6-stelligen hexadezimalen DuoFern-Code, der das Gerät identifiziert. Die führenden beiden Stellen definieren hierbei den Gerätetyp.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
Als Schnittstelle zu den DuoFern-Geräten wird ein Rademacher USB Stick 70000093 Typ 9495-UW benötigt. Eine Liste der unterstützten Geräte gilt es an dieser Stelle noch zu ergänzen.&lt;br /&gt;
&lt;br /&gt;
=== Module ===&lt;br /&gt;
[[DUOFENSTICK]] definiert den Stick als IO-Device&amp;lt;br&amp;gt;&lt;br /&gt;
[[DUOFERN]] definiert die DuoFern-Geräte&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* {{Link2Forum|Topic=40076|LinkText=Forenthema}}&lt;/div&gt;</summary>
		<author><name>Muschelpuster</name></author>
	</entry>
</feed>