<?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=Nielsiwilsi</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=Nielsiwilsi"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Nielsiwilsi"/>
	<updated>2026-04-30T21:17:07Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Dewpoint&amp;diff=26841</id>
		<title>Dewpoint</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Dewpoint&amp;diff=26841"/>
		<updated>2018-05-21T16:31:41Z</updated>

		<summary type="html">&lt;p&gt;Nielsiwilsi: /* Attribute */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:dewpoint}}&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Berechnung des Taupunkts&lt;br /&gt;
|ModType=h&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=dewpoint&lt;br /&gt;
|ModTechName=98_dewpoint.pm&lt;br /&gt;
|ModOwner=Willi Herzig}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[dewpoint]] bietet Funktionen im Zusammenhang mit der Taupunktberechnung an. Die verfügbaren Funktionen, über einen Parameter bei der Definition gesteuert, sind &lt;br /&gt;
* dewpoint (Taupunkt)&lt;br /&gt;
* fan (erzeugt ein Event, das zur Lüftersteuerung verwendet werden kann)&lt;br /&gt;
* alarm (erzeugt einen &amp;quot;Schimmel-Alarm&amp;quot;, wenn eine Referenztemperatur unter den Taupunkt fällt)&lt;br /&gt;
{{todo|Seite muss noch vervollständigt werden --[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 13:49, 14. Mär. 2016 (CET)}}&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Es muss ein Device geben, das die zur Berechnung erforderlichen Basisdaten &#039;&#039;Temperatur&#039;&#039; und &#039;&#039;Feuchte&#039;&#039; liefert. Die Namen der entsprechenden Readings können bei der Definition des &#039;&#039;dewpoint&#039;&#039; Device angegeben werden. &lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Ein &#039;&#039;dewpoint&#039;&#039; Device (siehe auch {{Link2CmdRef|Anker=dewpoint}}) wird definiert mit:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; dewpoint &amp;lt;type&amp;gt; ...&amp;lt;/code&amp;gt;&lt;br /&gt;
Mögliche Werte und Bedeutung von&lt;br /&gt;
;type&lt;br /&gt;
*dewpoint - aus &#039;&#039;temp_name&#039;&#039; und &#039;&#039;hum_name&#039;&#039; wird der Taupunkt berechnet und als Reading mit dem Namen &#039;&#039;new_name&#039;&#039; an die durch &#039;&#039;devicename-regex&#039;&#039; spezifizierten Devices hinzugefügt&lt;br /&gt;
*fan - &lt;br /&gt;
*alarm - &lt;br /&gt;
&lt;br /&gt;
Die vollständige Syntax für den Typ &#039;&#039;dewpoint&#039;&#039;:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; dewpoint &#039;&#039;&#039;dewpoint&#039;&#039;&#039; &amp;lt;devicename-regex&amp;gt; [&amp;lt;temp_name&amp;gt; &amp;lt;hum_name&amp;gt; &amp;lt;new_name&amp;gt;]&amp;lt;/code&amp;gt;&lt;br /&gt;
wobei die Platzhalter folgende Bedeutung haben:&lt;br /&gt;
;name&lt;br /&gt;
:der Name des definierten &#039;&#039;dewpoint&#039;&#039; Device&lt;br /&gt;
;devicename-regex&lt;br /&gt;
:Spezifikation des Geräts / der Geräte, von denen &#039;&#039;temp_name&#039;&#039; und &#039;&#039;hum_name&#039;&#039; gelesen und &#039;&#039;new_name&#039;&#039; geschrieben werden soll &lt;br /&gt;
;temp_name&lt;br /&gt;
:Name des Readings, das den Temperaturwert enthält; wenn dieser Parameter nicht angegeben ist, wird &#039;&#039;temperature&#039;&#039; angenommen&lt;br /&gt;
;hum_name&lt;br /&gt;
:Name des Readings, das den Feuchtewert enthält; wenn dieser Parameter nicht angegeben ist, wird &#039;&#039;humidity&#039;&#039; angenommen&lt;br /&gt;
;new_name&lt;br /&gt;
:Name des Readings, das den berechneten Taupunkt aufnehmen soll; wenn dieser Parameter nicht angegeben ist, wird &#039;&#039;dewpoint&#039;&#039; angenommen&lt;br /&gt;
&lt;br /&gt;
==== Statuszeile ====&lt;br /&gt;
Will man den Taupunkt nicht als einzelnes Reading &#039;&#039;dewpoint&#039;&#039;, sondern in Kurzform zusammen mit den anderen Werten in der Statuszeile anzeigen lassen, so muss man für &#039;&#039;temp_name&#039;&#039; und &#039;&#039;hum_name&#039;&#039; die Spezialwerte &#039;&#039;T&#039;&#039; und &#039;&#039;H&#039;&#039; angeben:&lt;br /&gt;
:&amp;lt;code&amp;gt;define dew_state dewpoint dewpoint .* T H D&amp;lt;/code&amp;gt;&lt;br /&gt;
Dies bewirkt, dass bei allen abgefragten Geräten die Werte &#039;&#039;T&#039;&#039; und &#039;&#039;H&#039;&#039; aus der Statuszeile ausgelesen werden und selbige dann wie folgt um den Taupunkt mit dem Buchstaben &#039;&#039;D&#039;&#039; erweitert wird:&lt;br /&gt;
&amp;lt;pre&amp;gt;T: 18.2 H: 55 D: 9.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
;absFeuchte&lt;br /&gt;
:Beim Setzen dieses Attributs wird zusätzlich die absolute Luftfeuchtigkeit (in Gramm Wasser pro Kubikmeter Luft) berechnet und als Reading mit dem Namen &#039;&#039;absFeuchte&#039;&#039; ausgegeben. Hat man das Dewpoint-Device vorher so definiert, dass es den Taupunkt an den Status anhängt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define dew_state dewpoint dewpoint .* T H D&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr dew_state absFeuchte 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:dann braucht man nichts weiter zu tun, die absolute Feuchtigkeit wird ab sofort unter dem Buchstaben &#039;&#039;A&#039;&#039; an den Status angehängt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;T: 18.2 H: 55 D: 9.0 A: 8.5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Für den Taupunkt konnte man mit dem Parameter &#039;&#039;new_name&#039;&#039; einen eigenen Namen für das erzeugten Reading festlegen. Für die absolute Luftfeuchte ist dieser Parameter nicht vorhanden, das Reading hat immer den Standardnamen &#039;&#039;absFeuchte&#039;&#039; bzw. &#039;&#039;A&#039;&#039; in der Statuszeile.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
&lt;br /&gt;
== Alternativen zu diesem Modul ==&lt;br /&gt;
&lt;br /&gt;
=== Berechnung direkt im userReading ===&lt;br /&gt;
&lt;br /&gt;
Um den Taupunkt einfach berechnen zu können, kann neben dem Modul &#039;&#039;dewpoint&#039;&#039; auch das Folgende userReading gesetzt werden (der Code dazu wurde direkt aus dem Modul entnommen und ist so über das Webinterface einzugeben).&lt;br /&gt;
&lt;br /&gt;
Das Userreading hat den Vorteil, nicht mit anderen Modulen in Konflikt zu geraten.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;attr &amp;lt;Device&amp;gt; userReadings dew:temperature.* { &lt;br /&gt;
 my $dp;&lt;br /&gt;
 my $temperature = ReadingsVal($name,&amp;quot;temperature&amp;quot;,0);&lt;br /&gt;
 my $humidity = ReadingsVal($name,&amp;quot;humidity&amp;quot;,0);&lt;br /&gt;
 my $A = 17.2694;&lt;br /&gt;
 my $B = ($temperature &amp;gt; 0) ? 237.3 : 265.5;&lt;br /&gt;
 my $es = 610.78 * exp( $A * $temperature / ($temperature + $B) );&lt;br /&gt;
 my $e = $humidity/ 100 * $es;&lt;br /&gt;
 if ($e == 0) { Log 1, &amp;quot;Error: dewpoint() e==0: temp=$temperature, hum=$humidity&amp;quot;;&lt;br /&gt;
  return 0;&lt;br /&gt;
 } &lt;br /&gt;
 my $e1 = $e / 610.78;&lt;br /&gt;
 my $f = log( $e1 ) / $A;&lt;br /&gt;
 my $f1 = 1 - $f;&lt;br /&gt;
 if ($f1 == 0) { &lt;br /&gt;
  Log 1, &amp;quot;Error: dewpoint() (1-f)==0: temp=$temperature, hum=$humidity&amp;quot;;&lt;br /&gt;
  return 0;&lt;br /&gt;
 }&lt;br /&gt;
 $dp = $B * $f / $f1 ;&lt;br /&gt;
 sprintf &amp;quot;%.2f&amp;quot;, $dp;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
(Das obige Beispiel wurde nach Umstellung auf &amp;quot;Source&amp;quot;-Formatierung noch nicht getestet. --[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 13:49, 14. Mär. 2016 (CET))&lt;br /&gt;
&lt;br /&gt;
=== Variante über 99_myUtils ===&lt;br /&gt;
&lt;br /&gt;
Noch besser ist es, die im vorigen Abschnitt durchgeführte Berechnung nicht für jedes Device per userReading wieder neu einzugeben, sondern diese einmalig als Funktion in der 99_myUtils zu hinterlegen und diese dann im jeweiligen Device im userReading nur noch aufzurufen.&lt;br /&gt;
&lt;br /&gt;
Dazu ist in der 99_myUtils folgende sub anzulegen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub urDewpoint&lt;br /&gt;
{&lt;br /&gt;
	my ($dname,$tname,$hname) = @_;&lt;br /&gt;
&lt;br /&gt;
	#Prüfen, ob überhaupt ein Device(-name) als Parameter übergeben wurde&lt;br /&gt;
	if(!defined($dname)) {&lt;br /&gt;
		Log3 undef,1,&amp;quot;Error: urDewpoint - No device specified!&amp;quot;;&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	#Prüfen, ob das angegebene Device überhaupt existiert&lt;br /&gt;
	if(!$defs{$dname}) {&lt;br /&gt;
		Log3 undef,1,&amp;quot;Error: urDewpoint - Device $dname is not defined!&amp;quot;;&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	#Wenn keine Readingsnamen für die Temperatur oder Luftfeuchtigkeit &lt;br /&gt;
	#übergebenwurde wird per default temperature oder humidity verwendet&lt;br /&gt;
	$tname=&#039;temperature&#039; if(!defined($tname));&lt;br /&gt;
	$hname=&#039;humidity&#039; if(!defined($hname));&lt;br /&gt;
	&lt;br /&gt;
	my $dp;&lt;br /&gt;
	&lt;br /&gt;
	#Auslesen der Readingswerte für Temperatur und Luftfeuchtigkeit aus den&lt;br /&gt;
	#entsprechenden Readings des Devic&lt;br /&gt;
	my $temperature = ReadingsVal($dname,$tname,0);&lt;br /&gt;
	my $humidity = ReadingsVal($dname,$hname,0);&lt;br /&gt;
	&lt;br /&gt;
	#Magische Berechnung :)&lt;br /&gt;
	my $A = 17.2694;&lt;br /&gt;
	my $B = ($temperature &amp;gt; 0) ? 237.3 : 265.5;&lt;br /&gt;
	my $es = 610.78 * exp( $A * $temperature / ($temperature + $B) );&lt;br /&gt;
	my $e = $humidity/ 100 * $es;&lt;br /&gt;
	if ($e == 0) { &lt;br /&gt;
		Log3 undef,1, &amp;quot;Error: urDewpoint: $dname - e==0: temp=$temperature, hum=$humidity&amp;quot;;&lt;br /&gt;
		return &#039;ERR&#039;;&lt;br /&gt;
	} &lt;br /&gt;
	my $e1 = $e / 610.78;&lt;br /&gt;
	my $f = log( $e1 ) / $A;&lt;br /&gt;
	my $f1 = 1 - $f;&lt;br /&gt;
	if ($f1 == 0) { &lt;br /&gt;
		Log3 undef,1, &amp;quot;Error: urDewpoint: $dname - (1-f)==0: temp=$temperature, hum=$humidity&amp;quot;;&lt;br /&gt;
		return &#039;ERR&#039;;&lt;br /&gt;
	}&lt;br /&gt;
	$dp = $B * $f / $f1 ;&lt;br /&gt;
	&lt;br /&gt;
	#Rückgabe der Taupunkt-Temperatur&lt;br /&gt;
	return sprintf &amp;quot;%.2f&amp;quot;, $dp;	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend kann dann im jeweiligen Device ganz einfach ein userReading definiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;attr &amp;lt;Device&amp;gt; userReadings dew:temperature.* {urDewpoint($name)}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Readings-Namen für Temperatur und Luftfeuchtigkeit bei Device können bei bedarf auch abweichend angegeben werden. Bei den Homematic-Wandthermostaten heßt das Reading für die tatsächlich gemessene Temperatur measured-temp und nicht temperature, dann würde die definition des userReading wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;attr &amp;lt;Device&amp;gt; userReadings dew:measured-temp.* {urDewpoint($name,&#039;measured-temp&#039;)}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Forendiskussion um {{Link2Forum|Topic=8576|LinkText=Lüften oder nicht}}&lt;br /&gt;
* Forendiskussion um {{Link2Forum|Topic=23080|LinkText=Temperaturdifferenz}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Nielsiwilsi</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=E-Mail_senden&amp;diff=15307</id>
		<title>E-Mail senden</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=E-Mail_senden&amp;diff=15307"/>
		<updated>2016-05-06T22:09:01Z</updated>

		<summary type="html">&lt;p&gt;Nielsiwilsi: /* Raspberry Pi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um aus FHEM heraus &#039;&#039;&#039;E-Mail senden&#039;&#039;&#039; zu können, sind abhängig von der verwendeten Platform unterschiedliche Vorgehensweisen erforderlich.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Anleitung zur Einrichtung von Exim4 auf Debian mit GMX als Smarthost:[http://www.fhemwiki.de/w/images/f/f6/Anleitung_Exim4_Debian_GMX.pdf PDF]}}&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
=== FritzBox 7170 (non-chroot) oder &amp;quot;reine&amp;quot; Linuxe ===&lt;br /&gt;
Datei 99_email.pm im Modul-Verzeichnis mit folgender Funktion anlegen (oder in bestehende 99_irgendwas.pm kopieren):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sub fb_mail {&lt;br /&gt;
 my $rcpt = $_[0];&lt;br /&gt;
 my $subject = $_[1];&lt;br /&gt;
 my $text = $_[2];&lt;br /&gt;
 system(&amp;amp;quot;/bin/echo \&amp;amp;quot;$text\&amp;amp;quot; | /usr/bin/mail send -i - -s \&amp;amp;quot;$subject\&amp;amp;quot; -t \&amp;amp;quot;$rcpt\&amp;amp;quot;&amp;amp;quot;);&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Aufruf dann mittels &lt;br /&gt;
:&amp;lt;code&amp;gt;{ fb_mail(&#039;empfaenger@mail.de&#039;,&#039;Subject&#039;,&#039;text 123&#039;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
Darauf achten, dass der fhem-User Mails senden darf (in richtige Gruppe eintragen. Ggf. vorher einmal su fhem und probieren).&lt;br /&gt;
&lt;br /&gt;
=== Fritz!Box 7390 ===&lt;br /&gt;
Auf der [[AVM Fritz!Box|FritzBox 7390]] ist diese Funktion seit 10/2012 Bestandteil der Fhem Standardauslieferung. Sie ist untergebracht in FritzBoxUtils.pm und heisst dort FB_mail($$$) (Groß-Kleinschreibung beachten).&lt;br /&gt;
&lt;br /&gt;
Da der Dateiname von FritzBoxUtils.pm nicht mit 99_ beginnt, wird diese Programmdatei nicht automatisch beim Start von Fhem geladen. Fhem muss zum Laden dieser Programmdatei aufgefordert werden. Dazu (z.&amp;amp;nbsp;B. in 99_myUtils.pm) die Zeile &#039;&#039;use FritzBoxUtils;&#039;&#039; einfügen.&lt;br /&gt;
&lt;br /&gt;
Mit dem Install von AVM.de wird fhem in einer chroot-Umgebung ausgeführt, die den Zugriff auf die Mailfunktion der Fritzbox nicht zulässt. Daher muss Fhem in der [http://fhem.de/fhem.html#Download Version von fhem.de] installiert sein. Sollte Ihre Fritzbox bisher mit dem install von AVM laufen, kann (nach einem backup!) das image von fhem.de einfach drüberinstalliert werden. Es sollten dabei alle Einstellungen erhalten bleiben.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sub fb_mail {&lt;br /&gt;
 my $rcpt = $_[0];&lt;br /&gt;
 my $subject = $_[1];&lt;br /&gt;
 my $text = $_[2];&lt;br /&gt;
 system(&amp;amp;quot;/bin/echo \&amp;amp;quot;$text\&amp;amp;quot; &amp;amp;gt; /var/tmp/fhem_nachricht.txt&amp;amp;quot;);&lt;br /&gt;
 system(&amp;amp;quot;/sbin/mailer send -i &#039;/var/tmp/fhem_nachricht.txt&#039; -s \&amp;amp;quot;$subject\&amp;amp;quot; -t \&amp;amp;quot;$rcpt\&amp;amp;quot;&amp;amp;quot;);&lt;br /&gt;
 system(&amp;amp;quot;rm /var/tmp/fhem_nachricht.txt&amp;amp;quot;);&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aufruf dann mittels &lt;br /&gt;
:&amp;lt;code&amp;gt;{ fb_mail(&#039;empfaenger@mail.de&#039;,&#039;Subject&#039;,&#039;text 123&#039;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
bzw. &lt;br /&gt;
:&amp;lt;code&amp;gt;{ FB_mail(&#039;empfaenger@mail.de&#039;,&#039;Subject&#039;,&#039;text 123&#039;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dem Mailer können noch weitere Parameter hinzugefügt werden. Mehr dazu siehe: [http://www.wehavemorefun.de/fritzbox/Mailer Mailer]&lt;br /&gt;
&lt;br /&gt;
=== OpenWRT  ===&lt;br /&gt;
Die Anleitung wurde mit einer frühen Beta von Barrier Breaker (r391xx) mit einem TP_Lind WDR 4900 getestet. Da &amp;quot;sendEmail&amp;quot; nicht als Package vorliegt wird in dieser Anleitung &amp;quot;ssmtp&amp;quot; verwendet.&lt;br /&gt;
Die Installation erfolgt mittels:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install ssmtp_2.64-4_mpc85xx.ipk  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei werden die Packete libopenssl und zlib mit installiert. Damit ssmtp funktioniert müssen die Dateien /etc/ssmtp/ssmtp.conf und /etc/ssmtp/revaliases angepasst werden.&lt;br /&gt;
&lt;br /&gt;
/etc/ssmtp/ssmtp.conf &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root=arnold@gmx.net&lt;br /&gt;
mailhub=mail.gmx.net:465&lt;br /&gt;
rewriteDomain=gmx.net&lt;br /&gt;
hostname=gmx.net&lt;br /&gt;
FromLineOverride=YES&lt;br /&gt;
UseTLS=YES&lt;br /&gt;
#UseSTARTTLS=YES&lt;br /&gt;
AuthUser=arnold@gmx.net&lt;br /&gt;
AuthPass=Passwort_von_arnold@gmx.net&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/etc/ssmtp/revaliases&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root:arnold@gmx.net:mail.gmx.net:465&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der [[99_myUtils_anlegen|99_myUtils]] folgende Unterroutine einfügen (von der RPi-Anleitung übernommen):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sub &lt;br /&gt;
OpenWRTMail &lt;br /&gt;
{ &lt;br /&gt;
 my $rcpt = shift;&lt;br /&gt;
 my $subject = shift; &lt;br /&gt;
 my $text = shift; &lt;br /&gt;
 my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
 my $sender = &amp;quot;dockstar\@heye-tammo.de&amp;quot;; &lt;br /&gt;
 Log 1, &amp;quot;sendEmail RCP: $rcpt, Subject: $subject, Text: $text&amp;quot;;&lt;br /&gt;
 $ret .= qx(echo -e &#039;to:$rcpt\n from:$sender\nsubject:$subject\n$text\n&#039; | ssmtp $rcpt);&lt;br /&gt;
 $ret =~ s,[\r\n]*,,g;    # remove CR from return-string &lt;br /&gt;
 Log 1, &amp;quot;sendEmail returned: $ret&amp;quot;; &lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab hier den entsprechenden Abschnitt unter &amp;quot;Raspberry Pi&amp;quot; lesen.&lt;br /&gt;
&lt;br /&gt;
=== Synology DiskStation ===&lt;br /&gt;
Beim DSM 3.2 gab es keinen &amp;lt;code&amp;gt;sendmail&amp;lt;/code&amp;gt;-Befehl, sondern nur eine Funktion für den Versand der System-Benachrichtigungen. Interessanterweise funktionierte aber der &amp;lt;code&amp;gt;php-mail&amp;lt;/code&amp;gt;-Befehl, so dass man mittels folgendem Modul Mails frei versenden kann:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sub sendmail($$$) {&lt;br /&gt;
 my($empf, $subj, $nachricht) = @_;&lt;br /&gt;
 system(&amp;amp;quot;php -r &#039;mail(\&amp;amp;quot;$empf\&amp;amp;quot;,\&amp;amp;quot;$subj\&amp;amp;quot;,\&amp;amp;quot;$nachricht\&amp;amp;quot;);&#039;&amp;amp;quot;);&lt;br /&gt;
 undef;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi ===&lt;br /&gt;
In der weezy-Version, wie sie von busware zur Verfügung gestellt wird, muss auf einem [[Raspberry Pi]] noch sendEmail nachinstalliert werden. Diese Anleitung funktioniert auch unter &#039;&#039;&#039;Ubuntu&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install sendEmail libio-socket-ssl-perl libnet-ssleay-perl perl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in der [[99_myUtils_anlegen|99_myUtils]] folgende Unterroutine einfügen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;######## DebianMail  Mail auf dem RPi versenden ############ &lt;br /&gt;
sub &lt;br /&gt;
DebianMail &lt;br /&gt;
{ &lt;br /&gt;
 my $rcpt = shift;&lt;br /&gt;
 my $subject = shift; &lt;br /&gt;
 my $text = shift;&lt;br /&gt;
 my $attach = shift; &lt;br /&gt;
 my $ret = &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 my $sender = &amp;amp;quot;absender\@account.de&amp;amp;quot;; &lt;br /&gt;
 my $konto = &amp;amp;quot;kontoname\@account.de&amp;amp;quot;;&lt;br /&gt;
 my $passwrd = &amp;amp;quot;passwrd&amp;amp;quot;;&lt;br /&gt;
 my $provider = &amp;amp;quot;smtp.provider.de:587&amp;amp;quot;;&lt;br /&gt;
 Log 1, &amp;amp;quot;sendEmail RCP: $rcpt&amp;amp;quot;;&lt;br /&gt;
 Log 1, &amp;amp;quot;sendEmail Subject: $subject&amp;amp;quot;;&lt;br /&gt;
 Log 1, &amp;amp;quot;sendEmail Text: $text&amp;amp;quot;;&lt;br /&gt;
 Log 1, &amp;quot;sendEmail Anhang: $attach&amp;quot;;;&lt;br /&gt;
 &lt;br /&gt;
 $ret .= qx(sendEmail -f &#039;$sender&#039; -t &#039;$rcpt&#039; -u &#039;$subject&#039; -m &#039;$text&#039; -a &#039;$attach&#039; -s &#039;$provider&#039; -xu &#039;$konto&#039; -xp &#039;$passwrd&#039; -o tls=auto -o message-charset=utf-8);&lt;br /&gt;
 $ret =~ s,[\r\n]*,,g;    # remove CR from return-string &lt;br /&gt;
 Log 1, &amp;amp;quot;sendEmail returned: $ret&amp;amp;quot;; &lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die TLS Verschlüsselung (ehem. SSL) nicht zu nutzen, muss in der 4. letzten Zeile tls=no verwendet und der Port des Mailproviders auf 25 eigetragen werden. Sollte anschließend keine Mail verschickt werden, siehe Probleme.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls der Body-Text in einem (Android-)Mailer auf dem Handy nicht gezeigt wird, kann der Parameter &#039;&#039;&#039;-o message-content-type=html&#039;&#039;&#039; helfen.&lt;br /&gt;
&lt;br /&gt;
Die Funktion kann beispielsweise folgendermaßen aufgerufen werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Sonstiges notify Fenster:Window:.*,.*Low.Batt*. {\&lt;br /&gt;
 DebianMail(&#039;email@email.domain&#039;,&#039;Subject&#039;,&#039;Text&#039;,&#039;Anhang&#039;);;\&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Sonstiges at *01:00:00 {\&lt;br /&gt;
 DebianMail(&#039;email@email.domain&#039;,&#039;Subject&#039;,&#039;Text&#039;,&#039;Anhang&#039;);;\&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BeagleBoard-xM ===&lt;br /&gt;
Auf einem [[:Kategorie:BeagleBoard-xM|BeagleBoard-xM]] mit einem [http://en.opensuse.org/HCL:BeagleBoard-xM OpenSUSE 12.2] kann man ebenfalls das Perl-Programm &#039;&#039;sendEmail&#039;&#039; wie beim RPi nutzen. Dies gibt es aber nicht in den Repositories von openSUSE, sondern man muss sich &#039;&#039;sendEmail&#039;&#039; als Source herunterladen. Das geht am einfachsten per &#039;&#039;wget&#039;&#039;, welches man ebenfalls erst installieren muss (aber aus einem Repository).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ zypper in wget&lt;br /&gt;
$ cd /opt&lt;br /&gt;
$ wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz&lt;br /&gt;
$ tar xvfz sendEmail-v1.56.tar.gz&lt;br /&gt;
$ cd sendEmail-v1.56&lt;br /&gt;
$ cp sendMail /usr/local/bin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Dann geht man weiter vor wie unter RPi beschrieben (anlegen der SUB-Routine in 99_myUtils usw.).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die Version 1.56 von &#039;&#039;sendEmail&#039;&#039; ist Stand Januar 2013 die aktuelle. Da diese Programmversion von 2009 stammt, ist mit neuen Versionen selten zu rechnen. Vielleicht schauen Sie trotzdem vorher auf der [http://caspian.dotconf.net/menu/Software/SendEmail/ Homepage von sendEmail] nach.&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
# Kopiere die Datei sendEmail.exe* in Dein FHEM Verzeichnis (hier c:\fhem-5.0\); Quelle: [http://caspian.dotconf.net/menu/Software/SendEmail/ http://caspian.dotconf.net/menu/Software/SendEmail/]&lt;br /&gt;
# Erstelle im FHEM Verzeichnis die Datei wmail.bat mit folgendem Inhalt (eine Zeile): &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;sendEmail -f absender@domain.de -u &amp;quot;%1&amp;quot; -m &amp;quot; &amp;quot; -s SMTP-SERVERAdresse -xu SMTP_USERNAME -xp SMTP_PASSWORT -t empfänger@domain.de -o message-header=&amp;quot;X-Message-Flag: FHEM&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beispiel fhem.cfg&lt;br /&gt;
## Mail wenn sich der Status von Heizung.* oder Hzg.* ändert &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;define Mail_Heizung notify Heizung.*|Hzg.* { system(&amp;quot;wmail $NAME:$EVENT&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
## Mail bei Signal Aussentemperatur (für dieses Beispiel wird [http://fhem.de/commandref.html#getstate http://fhem.de/commandref.html#getstate getstate] benötigt) &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;define Mail_Aussentemperatur notify Aussentemperatur {\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;my ($val);;\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;$val = fhem &amp;quot;getstate $NAME&amp;quot;;;\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;system(&amp;quot;wmail \&amp;quot;$NAME: $val\&amp;quot;&amp;quot;);;\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
=== sendEmail ===&lt;br /&gt;
Falls man keine E-Mails verschicken kann, kann man in einem ersten Test prüfen, ob sendEmail als solches funktioniert und die Konfiguration (Benutzer, Passwort, Server-Name usw.) des Mail-Kontos, über das die Mails abgesetzt werden sollen, richtig ist.&lt;br /&gt;
&lt;br /&gt;
Hierzu setzt man in der FHEM-Befehlszeile die folgende Anweisung ab:&lt;br /&gt;
:&amp;lt;code&amp;gt;{ SUB-Routinen-Name(&#039;EMailAdresse@Mail.Domain&#039;,&#039;Test&#039;,&#039;Test-Text&#039;);; }&amp;lt;/code&amp;gt;&lt;br /&gt;
und ersetzt &#039;&#039;SUB-Routinen-Name&#039;&#039; durch den Namen der in 99_myUtils erzeugten Prozedur. Statt &#039;&#039;EMailAdresse@Mail.Domain&#039;&#039; trägt man noch eine gültige E-Mail-Adresse ein und bestätigt den Befehl dann mittels &amp;amp;lt;Enter&amp;amp;gt; (nicht &amp;quot;save&amp;quot;). Empfangen Sie nicht kurzfristig eine entsprechende E-Mail, ist sehr wahrscheinlich an den Zugangsdaten etwas verkehrt. &lt;br /&gt;
&lt;br /&gt;
Vor dem testen der Routine oben kann sendEmail auch über die Konsole (z.&amp;amp;nbsp;B. via Putty) getestet werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sendEmail -f &#039;fhemsystem@meinedomain.tld&#039; -t &#039;ich@meinedomain.tld&#039; -u &#039;subject&#039; -m &#039;body&#039; -s &#039;meinmailserver.meinedomain.de&#039; -xu &#039;fhemmailer&#039; -xp &#039;geheimespassword&#039; -o tls=no&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Keine Mail mit TLS Verschlüsselung ===&lt;br /&gt;
Den Test über die Konsole durchführen. Erhält man folgende Fehlermeldung:&lt;br /&gt;
&#039;&#039;invalid SSL_version specified at /usr/share/perl5/IO/Socket/SSL.pm line 332&#039;&#039;&lt;br /&gt;
muss auf dem Raspberry folgende Datei angepasst werden: &#039;&#039;/usr/bin/sendEmail&#039;&#039;.&lt;br /&gt;
In Zeile 1907 muss&lt;br /&gt;
 if (! IO::Socket::SSL-&amp;gt;start_SSL($SERVER, SSL_version =&amp;gt; &#039;SSLv3 TLSv1&#039;)) {&lt;br /&gt;
&lt;br /&gt;
in folgendes geändert werden&lt;br /&gt;
  if (! IO::Socket::SSL-&amp;gt;start_SSL($SERVER, SSL_version =&amp;gt; &#039;SSLv23:!SSLv2&#039;)) {&lt;br /&gt;
&lt;br /&gt;
Der frühere Tipp direkt in der SSL.pm Datei zu editieren führt zu Problemen wenn man auf FHEM per HTTPS zugreifen will und ist daher nicht zu empfehlen.&lt;br /&gt;
&lt;br /&gt;
== Email laut Log gesendet aber nicht angekommen? ==&lt;br /&gt;
Dann bitte in der Fritzbox Oberfläche überpüfen, ob unter &amp;quot;System&amp;quot; -&amp;gt; &amp;quot;Push Service&amp;quot; selbiger eingerichtet und aktiviert wurde. &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:FritzBox]]&lt;br /&gt;
[[Kategorie:BeagleBoard-xM]]&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;/div&gt;</summary>
		<author><name>Nielsiwilsi</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=E-Mail_senden&amp;diff=15306</id>
		<title>E-Mail senden</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=E-Mail_senden&amp;diff=15306"/>
		<updated>2016-05-06T22:07:29Z</updated>

		<summary type="html">&lt;p&gt;Nielsiwilsi: /* Raspberry Pi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um aus FHEM heraus &#039;&#039;&#039;E-Mail senden&#039;&#039;&#039; zu können, sind abhängig von der verwendeten Platform unterschiedliche Vorgehensweisen erforderlich.&lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Anleitung zur Einrichtung von Exim4 auf Debian mit GMX als Smarthost:[http://www.fhemwiki.de/w/images/f/f6/Anleitung_Exim4_Debian_GMX.pdf PDF]}}&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
=== FritzBox 7170 (non-chroot) oder &amp;quot;reine&amp;quot; Linuxe ===&lt;br /&gt;
Datei 99_email.pm im Modul-Verzeichnis mit folgender Funktion anlegen (oder in bestehende 99_irgendwas.pm kopieren):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sub fb_mail {&lt;br /&gt;
 my $rcpt = $_[0];&lt;br /&gt;
 my $subject = $_[1];&lt;br /&gt;
 my $text = $_[2];&lt;br /&gt;
 system(&amp;amp;quot;/bin/echo \&amp;amp;quot;$text\&amp;amp;quot; | /usr/bin/mail send -i - -s \&amp;amp;quot;$subject\&amp;amp;quot; -t \&amp;amp;quot;$rcpt\&amp;amp;quot;&amp;amp;quot;);&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Aufruf dann mittels &lt;br /&gt;
:&amp;lt;code&amp;gt;{ fb_mail(&#039;empfaenger@mail.de&#039;,&#039;Subject&#039;,&#039;text 123&#039;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
Darauf achten, dass der fhem-User Mails senden darf (in richtige Gruppe eintragen. Ggf. vorher einmal su fhem und probieren).&lt;br /&gt;
&lt;br /&gt;
=== Fritz!Box 7390 ===&lt;br /&gt;
Auf der [[AVM Fritz!Box|FritzBox 7390]] ist diese Funktion seit 10/2012 Bestandteil der Fhem Standardauslieferung. Sie ist untergebracht in FritzBoxUtils.pm und heisst dort FB_mail($$$) (Groß-Kleinschreibung beachten).&lt;br /&gt;
&lt;br /&gt;
Da der Dateiname von FritzBoxUtils.pm nicht mit 99_ beginnt, wird diese Programmdatei nicht automatisch beim Start von Fhem geladen. Fhem muss zum Laden dieser Programmdatei aufgefordert werden. Dazu (z.&amp;amp;nbsp;B. in 99_myUtils.pm) die Zeile &#039;&#039;use FritzBoxUtils;&#039;&#039; einfügen.&lt;br /&gt;
&lt;br /&gt;
Mit dem Install von AVM.de wird fhem in einer chroot-Umgebung ausgeführt, die den Zugriff auf die Mailfunktion der Fritzbox nicht zulässt. Daher muss Fhem in der [http://fhem.de/fhem.html#Download Version von fhem.de] installiert sein. Sollte Ihre Fritzbox bisher mit dem install von AVM laufen, kann (nach einem backup!) das image von fhem.de einfach drüberinstalliert werden. Es sollten dabei alle Einstellungen erhalten bleiben.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sub fb_mail {&lt;br /&gt;
 my $rcpt = $_[0];&lt;br /&gt;
 my $subject = $_[1];&lt;br /&gt;
 my $text = $_[2];&lt;br /&gt;
 system(&amp;amp;quot;/bin/echo \&amp;amp;quot;$text\&amp;amp;quot; &amp;amp;gt; /var/tmp/fhem_nachricht.txt&amp;amp;quot;);&lt;br /&gt;
 system(&amp;amp;quot;/sbin/mailer send -i &#039;/var/tmp/fhem_nachricht.txt&#039; -s \&amp;amp;quot;$subject\&amp;amp;quot; -t \&amp;amp;quot;$rcpt\&amp;amp;quot;&amp;amp;quot;);&lt;br /&gt;
 system(&amp;amp;quot;rm /var/tmp/fhem_nachricht.txt&amp;amp;quot;);&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aufruf dann mittels &lt;br /&gt;
:&amp;lt;code&amp;gt;{ fb_mail(&#039;empfaenger@mail.de&#039;,&#039;Subject&#039;,&#039;text 123&#039;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
bzw. &lt;br /&gt;
:&amp;lt;code&amp;gt;{ FB_mail(&#039;empfaenger@mail.de&#039;,&#039;Subject&#039;,&#039;text 123&#039;) }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dem Mailer können noch weitere Parameter hinzugefügt werden. Mehr dazu siehe: [http://www.wehavemorefun.de/fritzbox/Mailer Mailer]&lt;br /&gt;
&lt;br /&gt;
=== OpenWRT  ===&lt;br /&gt;
Die Anleitung wurde mit einer frühen Beta von Barrier Breaker (r391xx) mit einem TP_Lind WDR 4900 getestet. Da &amp;quot;sendEmail&amp;quot; nicht als Package vorliegt wird in dieser Anleitung &amp;quot;ssmtp&amp;quot; verwendet.&lt;br /&gt;
Die Installation erfolgt mittels:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install ssmtp_2.64-4_mpc85xx.ipk  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei werden die Packete libopenssl und zlib mit installiert. Damit ssmtp funktioniert müssen die Dateien /etc/ssmtp/ssmtp.conf und /etc/ssmtp/revaliases angepasst werden.&lt;br /&gt;
&lt;br /&gt;
/etc/ssmtp/ssmtp.conf &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root=arnold@gmx.net&lt;br /&gt;
mailhub=mail.gmx.net:465&lt;br /&gt;
rewriteDomain=gmx.net&lt;br /&gt;
hostname=gmx.net&lt;br /&gt;
FromLineOverride=YES&lt;br /&gt;
UseTLS=YES&lt;br /&gt;
#UseSTARTTLS=YES&lt;br /&gt;
AuthUser=arnold@gmx.net&lt;br /&gt;
AuthPass=Passwort_von_arnold@gmx.net&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/etc/ssmtp/revaliases&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root:arnold@gmx.net:mail.gmx.net:465&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der [[99_myUtils_anlegen|99_myUtils]] folgende Unterroutine einfügen (von der RPi-Anleitung übernommen):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sub &lt;br /&gt;
OpenWRTMail &lt;br /&gt;
{ &lt;br /&gt;
 my $rcpt = shift;&lt;br /&gt;
 my $subject = shift; &lt;br /&gt;
 my $text = shift; &lt;br /&gt;
 my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
 my $sender = &amp;quot;dockstar\@heye-tammo.de&amp;quot;; &lt;br /&gt;
 Log 1, &amp;quot;sendEmail RCP: $rcpt, Subject: $subject, Text: $text&amp;quot;;&lt;br /&gt;
 $ret .= qx(echo -e &#039;to:$rcpt\n from:$sender\nsubject:$subject\n$text\n&#039; | ssmtp $rcpt);&lt;br /&gt;
 $ret =~ s,[\r\n]*,,g;    # remove CR from return-string &lt;br /&gt;
 Log 1, &amp;quot;sendEmail returned: $ret&amp;quot;; &lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab hier den entsprechenden Abschnitt unter &amp;quot;Raspberry Pi&amp;quot; lesen.&lt;br /&gt;
&lt;br /&gt;
=== Synology DiskStation ===&lt;br /&gt;
Beim DSM 3.2 gab es keinen &amp;lt;code&amp;gt;sendmail&amp;lt;/code&amp;gt;-Befehl, sondern nur eine Funktion für den Versand der System-Benachrichtigungen. Interessanterweise funktionierte aber der &amp;lt;code&amp;gt;php-mail&amp;lt;/code&amp;gt;-Befehl, so dass man mittels folgendem Modul Mails frei versenden kann:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sub sendmail($$$) {&lt;br /&gt;
 my($empf, $subj, $nachricht) = @_;&lt;br /&gt;
 system(&amp;amp;quot;php -r &#039;mail(\&amp;amp;quot;$empf\&amp;amp;quot;,\&amp;amp;quot;$subj\&amp;amp;quot;,\&amp;amp;quot;$nachricht\&amp;amp;quot;);&#039;&amp;amp;quot;);&lt;br /&gt;
 undef;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Raspberry Pi ===&lt;br /&gt;
In der weezy-Version, wie sie von busware zur Verfügung gestellt wird, muss auf einem [[Raspberry Pi]] noch sendEmail nachinstalliert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install sendEmail libio-socket-ssl-perl libnet-ssleay-perl perl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in der [[99_myUtils_anlegen|99_myUtils]] folgende Unterroutine einfügen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;######## DebianMail  Mail auf dem RPi versenden ############ &lt;br /&gt;
sub &lt;br /&gt;
DebianMail &lt;br /&gt;
{ &lt;br /&gt;
 my $rcpt = shift;&lt;br /&gt;
 my $subject = shift; &lt;br /&gt;
 my $text = shift;&lt;br /&gt;
 my $attach = shift; &lt;br /&gt;
 my $ret = &amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;
 my $sender = &amp;amp;quot;absender\@account.de&amp;amp;quot;; &lt;br /&gt;
 my $konto = &amp;amp;quot;kontoname\@account.de&amp;amp;quot;;&lt;br /&gt;
 my $passwrd = &amp;amp;quot;passwrd&amp;amp;quot;;&lt;br /&gt;
 my $provider = &amp;amp;quot;smtp.provider.de:587&amp;amp;quot;;&lt;br /&gt;
 Log 1, &amp;amp;quot;sendEmail RCP: $rcpt&amp;amp;quot;;&lt;br /&gt;
 Log 1, &amp;amp;quot;sendEmail Subject: $subject&amp;amp;quot;;&lt;br /&gt;
 Log 1, &amp;amp;quot;sendEmail Text: $text&amp;amp;quot;;&lt;br /&gt;
 Log 1, &amp;quot;sendEmail Anhang: $attach&amp;quot;;;&lt;br /&gt;
 &lt;br /&gt;
 $ret .= qx(sendEmail -f &#039;$sender&#039; -t &#039;$rcpt&#039; -u &#039;$subject&#039; -m &#039;$text&#039; -a &#039;$attach&#039; -s &#039;$provider&#039; -xu &#039;$konto&#039; -xp &#039;$passwrd&#039; -o tls=auto -o message-charset=utf-8);&lt;br /&gt;
 $ret =~ s,[\r\n]*,,g;    # remove CR from return-string &lt;br /&gt;
 Log 1, &amp;amp;quot;sendEmail returned: $ret&amp;amp;quot;; &lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die TLS Verschlüsselung (ehem. SSL) nicht zu nutzen, muss in der 4. letzten Zeile tls=no verwendet und der Port des Mailproviders auf 25 eigetragen werden. Sollte anschließend keine Mail verschickt werden, siehe Probleme.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls der Body-Text in einem (Android-)Mailer auf dem Handy nicht gezeigt wird, kann der Parameter &#039;&#039;&#039;-o message-content-type=html&#039;&#039;&#039; helfen.&lt;br /&gt;
&lt;br /&gt;
Die Funktion kann beispielsweise folgendermaßen aufgerufen werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Sonstiges notify Fenster:Window:.*,.*Low.Batt*. {\&lt;br /&gt;
 DebianMail(&#039;email@email.domain&#039;,&#039;Subject&#039;,&#039;Text&#039;,&#039;Anhang&#039;);;\&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Sonstiges at *01:00:00 {\&lt;br /&gt;
 DebianMail(&#039;email@email.domain&#039;,&#039;Subject&#039;,&#039;Text&#039;,&#039;Anhang&#039;);;\&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BeagleBoard-xM ===&lt;br /&gt;
Auf einem [[:Kategorie:BeagleBoard-xM|BeagleBoard-xM]] mit einem [http://en.opensuse.org/HCL:BeagleBoard-xM OpenSUSE 12.2] kann man ebenfalls das Perl-Programm &#039;&#039;sendEmail&#039;&#039; wie beim RPi nutzen. Dies gibt es aber nicht in den Repositories von openSUSE, sondern man muss sich &#039;&#039;sendEmail&#039;&#039; als Source herunterladen. Das geht am einfachsten per &#039;&#039;wget&#039;&#039;, welches man ebenfalls erst installieren muss (aber aus einem Repository).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ zypper in wget&lt;br /&gt;
$ cd /opt&lt;br /&gt;
$ wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz&lt;br /&gt;
$ tar xvfz sendEmail-v1.56.tar.gz&lt;br /&gt;
$ cd sendEmail-v1.56&lt;br /&gt;
$ cp sendMail /usr/local/bin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Dann geht man weiter vor wie unter RPi beschrieben (anlegen der SUB-Routine in 99_myUtils usw.).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die Version 1.56 von &#039;&#039;sendEmail&#039;&#039; ist Stand Januar 2013 die aktuelle. Da diese Programmversion von 2009 stammt, ist mit neuen Versionen selten zu rechnen. Vielleicht schauen Sie trotzdem vorher auf der [http://caspian.dotconf.net/menu/Software/SendEmail/ Homepage von sendEmail] nach.&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
# Kopiere die Datei sendEmail.exe* in Dein FHEM Verzeichnis (hier c:\fhem-5.0\); Quelle: [http://caspian.dotconf.net/menu/Software/SendEmail/ http://caspian.dotconf.net/menu/Software/SendEmail/]&lt;br /&gt;
# Erstelle im FHEM Verzeichnis die Datei wmail.bat mit folgendem Inhalt (eine Zeile): &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;sendEmail -f absender@domain.de -u &amp;quot;%1&amp;quot; -m &amp;quot; &amp;quot; -s SMTP-SERVERAdresse -xu SMTP_USERNAME -xp SMTP_PASSWORT -t empfänger@domain.de -o message-header=&amp;quot;X-Message-Flag: FHEM&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beispiel fhem.cfg&lt;br /&gt;
## Mail wenn sich der Status von Heizung.* oder Hzg.* ändert &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;define Mail_Heizung notify Heizung.*|Hzg.* { system(&amp;quot;wmail $NAME:$EVENT&amp;quot;)}&amp;lt;/code&amp;gt;&lt;br /&gt;
## Mail bei Signal Aussentemperatur (für dieses Beispiel wird [http://fhem.de/commandref.html#getstate http://fhem.de/commandref.html#getstate getstate] benötigt) &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;define Mail_Aussentemperatur notify Aussentemperatur {\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;my ($val);;\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;$val = fhem &amp;quot;getstate $NAME&amp;quot;;;\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;system(&amp;quot;wmail \&amp;quot;$NAME: $val\&amp;quot;&amp;quot;);;\&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
=== sendEmail ===&lt;br /&gt;
Falls man keine E-Mails verschicken kann, kann man in einem ersten Test prüfen, ob sendEmail als solches funktioniert und die Konfiguration (Benutzer, Passwort, Server-Name usw.) des Mail-Kontos, über das die Mails abgesetzt werden sollen, richtig ist.&lt;br /&gt;
&lt;br /&gt;
Hierzu setzt man in der FHEM-Befehlszeile die folgende Anweisung ab:&lt;br /&gt;
:&amp;lt;code&amp;gt;{ SUB-Routinen-Name(&#039;EMailAdresse@Mail.Domain&#039;,&#039;Test&#039;,&#039;Test-Text&#039;);; }&amp;lt;/code&amp;gt;&lt;br /&gt;
und ersetzt &#039;&#039;SUB-Routinen-Name&#039;&#039; durch den Namen der in 99_myUtils erzeugten Prozedur. Statt &#039;&#039;EMailAdresse@Mail.Domain&#039;&#039; trägt man noch eine gültige E-Mail-Adresse ein und bestätigt den Befehl dann mittels &amp;amp;lt;Enter&amp;amp;gt; (nicht &amp;quot;save&amp;quot;). Empfangen Sie nicht kurzfristig eine entsprechende E-Mail, ist sehr wahrscheinlich an den Zugangsdaten etwas verkehrt. &lt;br /&gt;
&lt;br /&gt;
Vor dem testen der Routine oben kann sendEmail auch über die Konsole (z.&amp;amp;nbsp;B. via Putty) getestet werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sendEmail -f &#039;fhemsystem@meinedomain.tld&#039; -t &#039;ich@meinedomain.tld&#039; -u &#039;subject&#039; -m &#039;body&#039; -s &#039;meinmailserver.meinedomain.de&#039; -xu &#039;fhemmailer&#039; -xp &#039;geheimespassword&#039; -o tls=no&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Keine Mail mit TLS Verschlüsselung ===&lt;br /&gt;
Den Test über die Konsole durchführen. Erhält man folgende Fehlermeldung:&lt;br /&gt;
&#039;&#039;invalid SSL_version specified at /usr/share/perl5/IO/Socket/SSL.pm line 332&#039;&#039;&lt;br /&gt;
muss auf dem Raspberry folgende Datei angepasst werden: &#039;&#039;/usr/bin/sendEmail&#039;&#039;.&lt;br /&gt;
In Zeile 1907 muss&lt;br /&gt;
 if (! IO::Socket::SSL-&amp;gt;start_SSL($SERVER, SSL_version =&amp;gt; &#039;SSLv3 TLSv1&#039;)) {&lt;br /&gt;
&lt;br /&gt;
in folgendes geändert werden&lt;br /&gt;
  if (! IO::Socket::SSL-&amp;gt;start_SSL($SERVER, SSL_version =&amp;gt; &#039;SSLv23:!SSLv2&#039;)) {&lt;br /&gt;
&lt;br /&gt;
Der frühere Tipp direkt in der SSL.pm Datei zu editieren führt zu Problemen wenn man auf FHEM per HTTPS zugreifen will und ist daher nicht zu empfehlen.&lt;br /&gt;
&lt;br /&gt;
== Email laut Log gesendet aber nicht angekommen? ==&lt;br /&gt;
Dann bitte in der Fritzbox Oberfläche überpüfen, ob unter &amp;quot;System&amp;quot; -&amp;gt; &amp;quot;Push Service&amp;quot; selbiger eingerichtet und aktiviert wurde. &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:FritzBox]]&lt;br /&gt;
[[Kategorie:BeagleBoard-xM]]&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;/div&gt;</summary>
		<author><name>Nielsiwilsi</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=13129</id>
		<title>Yowsup</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=13129"/>
		<updated>2015-12-03T13:01:11Z</updated>

		<summary type="html">&lt;p&gt;Nielsiwilsi: /* Attribute */&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.&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;
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, was wie folgt vonstatten geht:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt&lt;br /&gt;
sudo mkdir yowsup-config&lt;br /&gt;
sudo wget https://github.com/tgalal/yowsup/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
rm master.zip&lt;br /&gt;
cd yowsup-config&lt;br /&gt;
sudo nano yowsup.config&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 (ReadingsVal(&amp;quot;HandySeppel&amp;quot;,&amp;quot;message&amp;quot;,0) eq &amp;quot;Licht an&amp;quot;) {&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;
 } else {&lt;br /&gt;
   if (ReadingsVal(&amp;quot;HandySeppel&amp;quot;,&amp;quot;message&amp;quot;,0) eq &amp;quot;Licht aus&amp;quot;) {&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;
   } else {&lt;br /&gt;
     fhem &amp;quot;set HandySeppel send Wie bitte?&amp;quot;&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;
== 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>Nielsiwilsi</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=13128</id>
		<title>Yowsup</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Yowsup&amp;diff=13128"/>
		<updated>2015-12-03T12:59:59Z</updated>

		<summary type="html">&lt;p&gt;Nielsiwilsi: /* Attribute */&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.&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;
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, was wie folgt vonstatten geht:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt&lt;br /&gt;
sudo mkdir yowsup-config&lt;br /&gt;
sudo wget https://github.com/tgalal/yowsup/archive/master.zip&lt;br /&gt;
sudo unzip master.zip&lt;br /&gt;
rm master.zip&lt;br /&gt;
cd yowsup-config&lt;br /&gt;
sudo nano yowsup.config&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/config.yowsup --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 (ReadingsVal(&amp;quot;HandySeppel&amp;quot;,&amp;quot;message&amp;quot;,0) eq &amp;quot;Licht an&amp;quot;) {&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;
 } else {&lt;br /&gt;
   if (ReadingsVal(&amp;quot;HandySeppel&amp;quot;,&amp;quot;message&amp;quot;,0) eq &amp;quot;Licht aus&amp;quot;) {&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;
   } else {&lt;br /&gt;
     fhem &amp;quot;set HandySeppel send Wie bitte?&amp;quot;&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;
== 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>Nielsiwilsi</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Trick_der_Woche&amp;diff=12824</id>
		<title>Trick der Woche</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Trick_der_Woche&amp;diff=12824"/>
		<updated>2015-11-08T21:19:18Z</updated>

		<summary type="html">&lt;p&gt;Nielsiwilsi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Seite enthält Tipps und Tricks, die zu unbedeutend sind, einen eigenen Artikel zu rechtfertigen, alternative Schreibweisen/Lösungen für eine Problem darstellen, Ungenauigkeiten oder unklare Formulierungen in den offiziellen Dokumenten ergänzen und ähnliches. Jeder Eintrag ist typischerweise sehr kurz (wenige Zeilen lang) und beleuchtet vielleicht nur einen Aspekt von Fhem, er kann allgemeiner Natur sein, oder sich auf ein spezielles Gerät oder einen speziellen Anwendungsfall beziehen.&lt;br /&gt;
&lt;br /&gt;
== April 2015 ==&lt;br /&gt;
===FS20 Timer===&lt;br /&gt;
FS20 Aktoren beherrschen zwei verschiedene Timer-Methoden.&lt;br /&gt;
&lt;br /&gt;
Angenommen ein FS20 Device heisse &amp;quot;Lampe&amp;quot; und sei z.B. ein [[FS20_SU_Unterputz-Funk-Schalter|FS20 SU]] (Unterputzschalter), dann kann man mit FHEM sowohl &lt;br /&gt;
:&amp;lt;code&amp;gt; set Lampe on-for-timer 30&amp;lt;/code&amp;gt;&lt;br /&gt;
verwenden um die Lampe 30 Sekunden einzuschalten, aber auch zunächst in den FS20 SU die maximale Einschaltdauer einprogrammieren:&lt;br /&gt;
:&amp;lt;code&amp;gt; set Lampe timer 30&amp;lt;/code&amp;gt;&lt;br /&gt;
Dannach wird jedes normale&lt;br /&gt;
:&amp;lt;code&amp;gt; set Lampe on&amp;lt;/code&amp;gt;&lt;br /&gt;
die Lampe für nur 30 Sekunden einschalten.&lt;br /&gt;
&lt;br /&gt;
Als Timerwerte kommen in beiden Fällen die bekannten [[Trick_der_Woche#FS20_Timerzeiten|128 Sekundenwerte]] von 0,25 Sekunden bis Etwa 4,5 Stunden in Frage.&lt;br /&gt;
&lt;br /&gt;
Es ist offenbar nicht bei allen Aktoren möglich einen einmal eingestellten Timer zu löschen, neue Werte eingeben aber sehr wohl.&lt;br /&gt;
&lt;br /&gt;
Mehr hier: [[FS20_Allgemein#Gerätetimer setzen / löschen|FS20 timer]].&lt;br /&gt;
&lt;br /&gt;
== Februar 2015 ==&lt;br /&gt;
=== 1-wire am GPIO4-Port des RaspberryPi funktioniert nicht mehr nach Systemupdate ===&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. Eine Problemlösung dazu ist im Artikel &amp;quot;[[Raspberry Pi und 1-Wire#1-wire am GPIO4-Port funktioniert nicht mehr nach Systemupdate]]&amp;quot; beschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Backup der Konfiguration (fhem.cfg und fhem.state) bei jedem &amp;quot;save&amp;quot; ===&lt;br /&gt;
Der nachfolgende Codeschnipsel erstellt bei jedem &amp;quot;save&amp;quot; eine Kopie der aktuellen [[Konfiguration]] (fhem.cfg und fhem.state) in ein Verzeichnis &amp;quot;backup_cfg-state&amp;quot; welches unter /opt/fhem/ zu finden ist. Somit kann bei einem Fehler jederzeit auf den letzten Stand zurückgegangen werden.&lt;br /&gt;
Zuerst ins FHEM Befehlsfeld den folgenden Befehl eingeben:&lt;br /&gt;
:&amp;lt;code&amp;gt;{ `mkdir backup_cfg-state` } &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach folgendes [[notify]] anlegen:&lt;br /&gt;
 define backupCfg notify global:SAVE {\&lt;br /&gt;
 my $now = TimeNow();; $now =~ s/ /_/g;; \&lt;br /&gt;
 `cp $attr{global}{configfile} ./backup_cfg-state/fhem.cfg.$now`;;\&lt;br /&gt;
 `cp $attr{global}{statefile} ./backup_cfg-state/fhem.state.$now`;;\&lt;br /&gt;
 } &lt;br /&gt;
&lt;br /&gt;
Quelle: {{Link2Forum|Topic=30873|Message=234412|LinkText=FHEM-Forum}}&lt;br /&gt;
&lt;br /&gt;
== Januar 2015 ==&lt;br /&gt;
=== CUL &amp;amp; CO über Serial ID-einbinden ===&lt;br /&gt;
Bei mehreren USB-Geräten kann es vorkommen, dass sie vertauscht werden z.B. &#039;&#039;/dev/ttyUSB0&#039;&#039; zu&#039;&#039; /dev/ttyUSB1&#039;&#039; oder &#039;&#039;/dev/ttyACM0&#039;&#039; zu &#039;&#039;/dev/ttyACM1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um dies zu umgehen, kann man sie über ihre Serial-ID in Fhem einbinden.&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl zeigt die Serial-ID:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;ls -l /dev/serial/by-id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier die Beispielausgabe eines CUL868, JeeLink, RFXtrx und eines CUL433&lt;br /&gt;
&lt;br /&gt;
 user@xxxx:~# ls -l /dev/serial/by-id&lt;br /&gt;
 lrwxrwxrwx 1 root root 13 Jan  9 23:34 usb-busware.de_CUL868-if00 -&amp;gt; ../../ttyACM0&lt;br /&gt;
 lrwxrwxrwx 1 root root 13 Jan  9 13:26 usb-FTDI_FT232R_USB_UART_A901RQ9F-if00-port0-&amp;gt; ../../ttyUSB0&lt;br /&gt;
 lrwxrwxrwx 1 root root 13 Jan  9 13:26 usb-RFXCOM_RFXtrx433_A1WZWL5Y-if00-port0-&amp;gt; ../../ttyUSB1&lt;br /&gt;
 lrwxrwxrwx 1 root root 13 Jan  9 21:29 usb-busware.de_CUL433-if00 -&amp;gt; ../../ttyACM1 &lt;br /&gt;
&lt;br /&gt;
Damit lässt sich folgende Definition erstellen:&lt;br /&gt;
&lt;br /&gt;
z.B. für einen CUL868&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define CUL868 CUL /dev/serial/by-id/usb-busware.de_CUL868-if00@9600 1134&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder einen JeeLink&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define Jeelink JeeLink /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A901RQ9F-if00-port0@57600&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Einschränkung:&#039;&#039;&#039; Bei CULs von Busware lassen sich nur CUL433 und CUL868 unterscheiden. Zwei CUL868 haben z.B. immer die gleiche Serial-ID.&lt;br /&gt;
&lt;br /&gt;
=== HM LAN Konfig-Adapter Antenne verbessern===&lt;br /&gt;
Die Antenne des [[HM-CFG-LAN LAN Konfigurations-Adapter]] kann man mit etwas Bastelgeschick verlängern um den Empfang zu verbessern. &lt;br /&gt;
&lt;br /&gt;
Sinnvoll ist die Verlängerung auf 1/2 Lambda  (868MHz = 17,27 cm) oder gar 1 Lambda.&lt;br /&gt;
1 Lambda Antennen haben starke Richtwirkung in Form eines gedachten Zylinders, dessen Mittelachse die Antenne ist.&lt;br /&gt;
D.h., Alles was sich in Richtung des Anfangs und des Endes des Antennedrahtes befindet, hat schlechteren Empfang als mit einer kurzen Antenne. Daher muss man die Antenne ggf. genauer ausrichten.&lt;br /&gt;
&lt;br /&gt;
Anleitungen dazu werden an verschiedenen Stellen veröffentlicht, z.B. in &lt;br /&gt;
[http://www.ip-symcon.de/forum/threads/18411-Umbau-HM-LAN-Adapter-auf-Lambda-1-2-Dipol-Antenne diesem Beitrag] im IP-Symcon Forum (anders als der Namen der Anleitung vermuten lässt, liegt hier kein Dipol vor, sondern eine &amp;quot;normale&amp;quot; 1 Lambda Antenne.)&lt;br /&gt;
&lt;br /&gt;
Prinzipiell so dünnen Draht wie möglich verwenden.&lt;br /&gt;
&lt;br /&gt;
Wer noch mehr rausholen will, kann auch zusätzlichen Aufwand betreiben und die Antenne etwas von der Elektronik entfernen, die nämlich Störstrahlung in die Antenne einkoppelt. Oder eine Groundplane bauen.&lt;br /&gt;
Ein Anleitung für die CCU (analog auch für den HM LAN Konfig-Adapter einsetzbar) gibt es [http://www.techwriter.de/beispiel/funkeige.htm hier].&lt;br /&gt;
&lt;br /&gt;
== Dezember 2014 ==&lt;br /&gt;
=== FHT80TF als &amp;quot;Prüfsender&amp;quot; einsetzen  ===&lt;br /&gt;
Da der [[FHT80TF-2]] günstig ist und seinen Zustand ca. alle zwei Minuten sendet, kann er gut zum Ermitteln der Funklage von [[SlowRF]] Komponenten genutzt werden, auch wenn diese nicht senden. Den RSSI einer FS20 Schaltsteckdose kann man z.B. nicht wissen, da die Dose nur ein Empfänger ist. Wenn eine Dose nicht gut funktioniert und man den Verdacht hat, dass sie funktechnisch ungünstig liegt, kann man einen [[FHT80TF-2]] neben die Steckdose legen und man bekommt nach zwei Minuten einen Wert, der (trotz umgekehrter Funkrichtung) gut genug ist, um einem Hinweise zu geben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== November 2014 ==&lt;br /&gt;
=== FS20 Adressschema und die Rolle des Hauscodes  ===&lt;br /&gt;
[[FS20_Allgemein#FS20_Adressierungsschema_.28Vorschlag.29]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Oktober 2014 ==&lt;br /&gt;
=== Aktor für Wanddosen ohne Nulleiter  ===&lt;br /&gt;
Zwar gibt es viele Aktoren, die man in Wanddosen hinter Schaltern einbauen kann, oft scheitert deren Nutzung aber daran, dass in vielen Elektroinstalltionen in der Wanddose eines (Licht)schalters kein Nulleiter verlegt ist, den die meisten Aktoren zur eigenen Stromversorgung brauchen. Hier kann der [[RSL 2-Draht Einbauschalter]] helfen, der auch ohne Nulleiter funktioniert und kompatibel zu InterTechno ist. Er lässt sich z.B. mit einem CUL(433) schalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== August 2014 ==&lt;br /&gt;
=== Perl-Skripte Online testen  ===&lt;br /&gt;
Im Internet existieren Webseiten auf denen man Perl-Code online testen kann. Beispielsweise auf [http://www.tutorialspoint.com/execute_perl_online.php codingground] kann man Code zum Testen eingeben und die Auswirkungen betrachten. Dies eignet sich zur schnellen Fehleranalyse oder um Perl zu lernen. Natürlich lassen sich keine Fhem-Besonderheiten nutzen.&lt;br /&gt;
&lt;br /&gt;
== Juli 2014 ==&lt;br /&gt;
=== Funklast reduzieren===&lt;br /&gt;
Bewegungsmelder erzeugen in der Regel eine recht hohe Funklast, wenn sie oft ausgelöst werden, also z.B. Licht in einem Zimmer schalten sollen.&lt;br /&gt;
&lt;br /&gt;
Konstruktionen der Art:&lt;br /&gt;
:&amp;lt;code&amp;gt;define FlurLicht notify Bewegungsmelder_Flur:motion:.* set Licht_Flur on-for-timer 256&amp;lt;/code&amp;gt;&lt;br /&gt;
haben daher den Nachteil bei viel Bewegung im Flur und je nach Einstellung des Sendeabstandes des Bewegungsmelders mindestens alle 120 Sekunde oder öfter ein &lt;br /&gt;
:&amp;lt;code&amp;gt;on-for-timer 256&amp;lt;/code&amp;gt;&lt;br /&gt;
zu senden. Das erzeugt eine hohe Funklast, speziell wenn der Aktor ein SlowRF Gerät ist (z.B. FS20 Unterputzschalter).&lt;br /&gt;
In solchen Fällen kann es helfen, nur dann einen Befehl zu senden, wenn das Licht nicht schon an ist:&lt;br /&gt;
:&amp;lt;code&amp;gt;define FlurLicht notify Bewegungsmelder_Flur:motion:.* { if (Value(&amp;quot;Licht_Flur&amp;quot;) eq &amp;quot;off&amp;quot;) { fhem (&amp;quot;set Licht_Flur1 on-for-timer 256&amp;quot;) } }&amp;lt;/code&amp;gt;&lt;br /&gt;
Nachteilig ist aber, dass eine Auslösung innerhalb 256 Sekunden die Einschaltzeit nicht verlängert. Dies kann man umgehen, indem man nicht on-for-timer verwendet, sondern den Aktor selber verzögert auschaltet und bei weiteren Auslösungen nur die Verzögerung erneut anlegt:&lt;br /&gt;
:&amp;lt;code&amp;gt;define FlurLicht notify Bewegungsmelder_Flur:motion:.* { if (Value(&amp;quot;Licht_Flur1&amp;quot;) eq &amp;quot;off&amp;quot;) { fhem (&amp;quot;set Licht_Flur on ;; define FlurLicht_aus at +00:04:16 set Licht_Flur off&amp;quot;) } else { fhem (&amp;quot;delete FlurLicht_aus ;; define FlurLicht_aus at +00:04:16 set Licht_Flur off&amp;quot;) }}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Juni 2014 ==&lt;br /&gt;
=== Batteriestatus bei HomeMatic Devices aktivieren===&lt;br /&gt;
Zumindest einige (wenn nicht alle) batteriegespeisten HM-Geräte können Batteriemeldungen senden, tun dies in der normalen Konfiguration aber nicht.&lt;br /&gt;
Dazu muss das Register cyclicInfoMsg auf on gesetzt werden. &lt;br /&gt;
&lt;br /&gt;
Wie man das macht steht z.B. hier&lt;br /&gt;
[[HM-SEC-SC_Tür-Fensterkontakt#Batteriestatus_aktivieren]]&lt;br /&gt;
und hier&lt;br /&gt;
[[HomeMatic_Type_ThreeState]]&lt;br /&gt;
&lt;br /&gt;
== Mai 2014 ==&lt;br /&gt;
=== Dummywert mit aktueller Uhrzeit versehen in anderen Dummy kopieren===&lt;br /&gt;
Der Inhalt von Dummy1 soll erweitert um  Uhrzeit und Datum in Dummy2 kopiert werden (z.B. um die Urzeit der letzten Auslösung einer Alarmanlage anzuzeigen)&lt;br /&gt;
:&amp;lt;code&amp;gt;{ fhem(&amp;quot;set dummy2 &amp;quot; . (Value(&amp;quot;Dummy1&amp;quot;).&amp;quot; &amp;quot;.TimeNow()) )  } &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zwei Dummywerte in einen anderen Dummy kopieren ===&lt;br /&gt;
Der String in Dummy1 soll um den String in Dummy2 erweitert und nach Dummy3 kopiert werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;{ fhem(&amp;quot;set Dummy3 &amp;quot;.(Value(&amp;quot;Dummy1&amp;quot;)+Value(&amp;quot;Dummy2&amp;quot;))) } &amp;lt;/code&amp;gt;&lt;br /&gt;
(Achtung: &amp;quot;+&amp;quot;  ist Zahlen addieren, &amp;quot;.&amp;quot; ist String konkatenieren) &lt;br /&gt;
&lt;br /&gt;
== April 2014==&lt;br /&gt;
=== Code sparen ===&lt;br /&gt;
Wer Definitionen wie die aus dem März zum [[Trick der Woche#Zuverlässigkeit von FS20 Schaltungen erhöhen|Abfangen von Fehlbedienungen]] verwendet, kann durch eine ELSE Erweiterung auch gleich das Auschalten erledigen.&lt;br /&gt;
:&amp;lt;code&amp;gt;define act_on_TV_on notify TV { if (&amp;quot;$EVENT&amp;quot; eq &amp;quot;on&amp;quot; || &amp;quot;$EVENT&amp;quot; eq &amp;quot;dimup&amp;quot;) { fhem(&amp;quot;set TV on&amp;quot;) } else { fhem(&amp;quot;set TV off&amp;quot;) } }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierdurch schaltet ON oder versehentlich zu langes Drücken (also DIMUP) den Fernseher ein, jeder &#039;&#039;andere&#039;&#039; Tastendruck (also insbesondere die OFF Taste oder zu langes Drücken der OFF Taste -&amp;gt; DIMDOWN) den Fernseher aus.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung ist, dass die Fernbedienung standardkonfiguriert ist, siehe auch nächster Tip.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration eines FS20 Senders prüfen ===&lt;br /&gt;
Gelegentlich reagieren bestimmte notifys nicht, die von Sendern (Fernbedienungen, Sensoren oder Schaltern) ausgelöst werden sollen. Speziell bei FS20 aber auch bei HomeMatic kann das daran liegen, dass der Sender nicht sendet was man denkt. So gut wie alle FS20 Sender kennen nämlich nicht nur ON und OFF, sondern über ein Dutzend Schaltzustände. Dimmen ist einem noch hinreichend bewusst, es gibt aber auch exotische Dinge wie  Ein-für-Zeitdauer, Ein-auf-alte-Helligkeit, Aus-für-Zeitdauer (nur FS20), Ein-für-Zeitdauer-dannach-alter-Zustand und vieles mehr.&lt;br /&gt;
&lt;br /&gt;
Was also ein Infrarot-Bewegungsmelder bei Auslösung sendet und auch was eine Fernbedienungstaste sendet ist einstellbar. Wenn jetzt zum Beispiel an einer Fernbedienung auf Tastendruck nicht ON sondern Ein-für-Zeitdauer (ON-FOR-TIMER) gesendet wird, wird&lt;br /&gt;
:&amp;lt;code&amp;gt;define act_on_TV_on notify TV:on set TV on&amp;lt;/code&amp;gt;&lt;br /&gt;
seltsamerweise nicht auslösen, obwohl die richtige Taste (und diese auch nicht zu lang) gedrückt wurde.&lt;br /&gt;
&lt;br /&gt;
Auch wenn man sich sicher ist, das Richtige in die Fernbedienung/Sensoren einprogramiert zu haben, ist ein einfacher Test immer, dies mit&lt;br /&gt;
:&amp;lt;code&amp;gt;define act_on_TV notify TV set TV on&amp;lt;/code&amp;gt;&lt;br /&gt;
zu prüfen. Dieses notify löst immer aus, wenn &amp;quot;TV&amp;quot;  &#039;&#039;irgendetwas&#039;&#039; sendet, egal was. (Beachte: Man kann dann den Fernseher aber nicht mehr ausschalten, da auch die Austaste das notify auslöst und zum TV-Aktor nur &amp;quot;on&amp;quot; sendet). Geht die Schaltung jetzt (kann man den Fernseher also jetzt EINschalten), liegt der Verdacht nahe, dass die Konfiguration des Senders / Sensors anders ist, als man denkt. Das Logfile gibt Aufschluss, welcher Befehl tatsächlich empfangen wurde.&lt;br /&gt;
&lt;br /&gt;
=== Alles in FHEM, nichts in der Fernbedienung ===&lt;br /&gt;
Versuche in deiner FHEM Umgebung nicht, das Verhalten von Aktoren durch entsprechende Befehle aus Sensoren oder Fernbedienungen zu steuern. An Besten senden die nur ON und OFF oder DIM, den Rest möglichst immer in FHEM erledigen. &lt;br /&gt;
&lt;br /&gt;
Wer eine Lampe immer für vier Minuten einschalten will, programmiert seinen Schalter (Fernbedienung) also so, das nur &amp;quot;on&amp;quot; gesendet wird und erledigt den Rest in FHEM:&lt;br /&gt;
:&amp;lt;code&amp;gt;define act_on_Schalter notify Schalter set Lampe-on-for-timer 240&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vielfach wird argumentiert, das eine dirkete Kopplung die Zuverlässigkeit erhöht, da bei einem Ausfall von FHEM der Aktor totzdem schaltbar sei.&lt;br /&gt;
Überlege, ob es hier nicht weniger komplex ist, die Zuverlässigkeit der FHEM Instanz zu erhöhen.&lt;br /&gt;
&lt;br /&gt;
== März 2014==&lt;br /&gt;
=== Zuverlässigkeit von FS20 Schaltungen erhöhen ===&lt;br /&gt;
FS20 Fernbedienungen senden bei Tastendrücken von mehr als 0,4 Sekunden anstatt ON bzw. OFF DIMUP bzw DIMDOWN.&lt;br /&gt;
&lt;br /&gt;
Das führt gelegentlich zu allgemein schlechter Bedienbarkeit (und schlechtem WAF), da 0,4 Sekunden relativ kurz ist und gerne aus versehen länger gedrückt wird. Das ist vor allem problematisch, wenn etwas geschaltet werden soll, was keinen Dimmer hat oder Dimmen nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Konfiguration wie &lt;br /&gt;
:&amp;lt;code&amp;gt;define act_on_TV_on notify TV:on set TV on&amp;lt;/code&amp;gt;&lt;br /&gt;
hat also dann den Nachteil, dass bei versehentlich zu langem Tastendruck das TV nicht angeht. Da die meisten Nutzer unbewusst dazu neigen, bei Misserfolg die selbe Taste erneut aber länger zu drücken (was erneut keinen Erfolg zeigt) ist Frustration zu erwarten.&lt;br /&gt;
&lt;br /&gt;
Es kann daher speziell bei nicht dimmbaren Aktoren von Vorteil sein, auch dimmen abzufangen, z.B. durch eine zweite zusätzliche Definition:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define act_on_TV_dimup notify TV:dimup set TV on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist in der Regel einfacher, einige dieser zusätzlichen Definitionen einzufügen, als allen Bedienern des Systems zu erklären, dass man keinesfalls länger als 0,4 Sekunden drücken darf.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann man auch beide Befehle in einer Definition durch Perlbefehle {} abfangen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define act_on_TV_on notify TV { if (&amp;quot;$EVENT&amp;quot; eq &amp;quot;on&amp;quot; || &amp;quot;$EVENT&amp;quot; eq &amp;quot;dimup&amp;quot;) { fhem(&amp;quot;set TV on&amp;quot;) }}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andere Möglichkeiten vergleiche: [[Trick der Woche#notify durch mehrere Ereignisse auslösen lassen|Notify durch mehrere Ereignisse auslösen lassen]]&lt;br /&gt;
&lt;br /&gt;
== Februar 2014==&lt;br /&gt;
=== Sequence nutzen ===&lt;br /&gt;
Man kann Aktionen statt mit einem Tastedruck auch mit einer Sequenz von Tastendücken auslösen. Das Format des Befehle ist:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; sequence &amp;lt;re1&amp;gt; &amp;lt;timeout1&amp;gt; &amp;lt;re2&amp;gt; [&amp;lt;timeout2&amp;gt; &amp;lt;re3&amp;gt; ...] &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei &amp;lt;re1&amp;gt; ...&amp;lt;re_n&amp;gt; die Aktionen sind und &amp;lt;timeout_n&amp;gt; der maximale Abstand der Tastendrücke in Sekunden.&lt;br /&gt;
&lt;br /&gt;
Angenommen, man wolle z.B. eine Lampe dann anschalten, wenn man zuerst Taste1 EIN, dann Taste2 AUS und dann wieder Taste1 EIN einer Fernbedienung drückt, könnte das konkret so aussehen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define MeineLampenSequenz1 sequence Btn1:on 0.5 Btn2:off 0.5 Btn1:on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zwischen jedem der Tastendrücke darf eine halbe Sekunde Abstand sein. Diese Definition selbst löst die Lampe nicht aus, sondern definiert nur wie die Sequenz aussehen soll. Um die Lampe bei erfolgreicher Betätigung der Sequenz auch einzuschalten, bedarf es zusätzlich etwas wie:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define MeineLampe notify MeineLampenSequenz1:trigger set Lampe on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sequence kann man gut nutzen, um mit einer Fernbedienung mehr Funktionen zu schalten als Tasten zur Verfügung stehen. Ebenso könnte man damit simple Codeschlösser für Alarmanlagen bauen, z.B. um eine Anlage auszuschalten, wenn eine bestimmte Abfolge von Tasten gedrückt wird.&lt;br /&gt;
&lt;br /&gt;
Je nach Funksystem nimmt die Zuverlässigkeit aber rasch ab. Angenommen im Bereich FS20 (das System ist etwas unzuverlässiger ist als z.B. HomeMatic) seien 95% aller Funktsignale ungestört übertragbar, dann würden in der Praxis von 100 Tastendrücken an einer Fernbedienung 95x Erfolg zeigen und 5x fehlschlagen; das ist sicher tolerabel. &lt;br /&gt;
&lt;br /&gt;
Bei einer Sequenzlänge von nur 4 Tasten würde die kombinierte Erfolgsquote der Sequenz jedoch nur noch ca. 80% sein, zum Ausschalten einer Alarmanlage vermutlich bereits unpraktisch.&lt;br /&gt;
&lt;br /&gt;
== Januar 2014==&lt;br /&gt;
===isday===&lt;br /&gt;
Bekanntlich kann man  mit &amp;quot;isday&amp;quot; leicht testen ob es draussen hell ist oder nicht. isday ist eine Funktion des (automatisch geladenen) Moduls [[SUNRISE_EL]], das auch sunset und sunrise enthält.&lt;br /&gt;
&lt;br /&gt;
Problematisch bei isday ist die fehlende Möglichkeit, Sonnenaufgang und Untergang einzustellen (zumindest wenn man nicht 99_SUNRISE_EL.pm verändern will): isday ist wahr, wenn die Sonne im gegebenen Breitengrad sichtbar ist. Wenn örtliche Gegebenheiten eine Anpassung erfordern, kann man sich auch ein eigenes isday basteln, in dem man sunrise und sunset verwendet und dieses mit getrennten offsets versieht.&lt;br /&gt;
&lt;br /&gt;
Zuerst definiert man sich eine Variable (&amp;quot;dummy&amp;quot;) der anstelle isday eingesetzt werden soll, z.B.:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define Tageslicht dummy &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann wird diese mit sunset und sunrise befüllt:&lt;br /&gt;
&lt;br /&gt;
 define SetDummy1 at *{sunset(-3600)} set Tageslicht hell &lt;br /&gt;
 define SetDummy2 at *{sunrise(+1800)} set Tageslicht dunkel &lt;br /&gt;
&lt;br /&gt;
Jetzt kann für jeden Wechsel ein eigener Offset gewählt werden, im Beispiel 3600 Sekunden vor Sonnenuntergang und 1800 Sekunden nach Sonnenaufgang. Anstatt das Dummy &amp;quot;Tageslicht&amp;quot; mit den Werten &amp;quot;hell/dunkel&amp;quot; zu befüllen, kann natürlich auch 1/0 oder &amp;quot;Tag/Nacht&amp;quot; etc. verwendet werden, je nach dem was bei der Anwendung besser passt.&lt;br /&gt;
&lt;br /&gt;
Für höhere Ansprüche könnte hingegen das [[Twilight]]-Modul verwendet werden, das Dämmerungsstufen kennt.&lt;br /&gt;
&lt;br /&gt;
===Struktur von &amp;quot;else if&amp;quot; Verzweigungen===&lt;br /&gt;
 define ... notify ... {\&lt;br /&gt;
  if ... {\&lt;br /&gt;
   fhem (&amp;quot;... ;; ...&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
  elsif ... {\&lt;br /&gt;
    fhem (&amp;quot;... ;; ...&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
  elsif ... {\&lt;br /&gt;
    fhem (&amp;quot;... ;; ...&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
  else {\&lt;br /&gt;
   if ... {\&lt;br /&gt;
    fhem (&amp;quot;... ;; ...&amp;quot;)\&lt;br /&gt;
  }\&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Achtung: es muss tatsächlich &amp;quot;elsif&amp;quot; heissen und nicht &amp;quot;elseif&amp;quot; oder &amp;quot;else if&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Gilt für Perl Aufrufe. &lt;br /&gt;
Wer aktuell in FHEM neu einsteigt kann auch den seit 2014 zur Verfügung stehenden Fhem Befehl [[DOIF]] verwenden, der bei ähnlichem Funktionsumfang wir Perl if/elsif  übersichtlicher ist.&lt;br /&gt;
&lt;br /&gt;
== Dezember 2013==&lt;br /&gt;
===notify durch mehrere Ereignisse auslösen lassen===&lt;br /&gt;
Bekanntermassen löst&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define irgendwas notify MeinSchalter …&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
aus, wenn irgendein Ereignis vom Sender &amp;quot;MeinSchalter&amp;quot; eintrifft.&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define irgendwas notify MeinSchalter:on …&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird das notify jedoch nur ausgelöst, wenn dieses Ereignis eine &amp;quot;on&amp;quot; ist.&lt;br /&gt;
Wenn man aber möchte, das z.B. &amp;quot;on&amp;quot; und &amp;quot;off&amp;quot; auslöst (um etwa Dim-Befehle auszuschliessen) kann dies wie folgt erreicht werden:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define irgendwas notify MeinSchalter:(on|off) …&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Klammern sind wichtig, vergleiche eine Lösung, bei der zwei Sender alternativ das notify auslösen können:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define irgendwas notify MeinSchalter:on|MeinAndererSchalter:on …&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Selbstverständlich geht z.B. auch folgendes:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define irgendwas notify MeinSchalter:on|MeinAndererSchalter …&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird ausgelöst wenn &amp;quot;MeinSchalter&amp;quot; das Ereignis &amp;quot;on&amp;quot; liefert oder &amp;quot;MeinAndererSchalter&amp;quot; irgendein Ereignis&lt;br /&gt;
&lt;br /&gt;
=== Aktoren über mehrere Funkschnittstellen ansprechen ===&lt;br /&gt;
Falls man mehrere Funkschnittstellen zur Reichweitenverlängerung hat (CUL / CUNO etc), und ein Aktor von beiden Funkschnittstellen in etwa gleich (schlecht) erreichbar ist, mag der Wunsch aufkommen, einen Funkbefehl über beide Schnittstellen auszusenden. Dies ist bei Funkprotokollen möglich, die kein echtes Pairing der Aktoren an die Funkschnittstelle erfordern, also z.B. FS20 oder Intertechno, nicht jedoch ohne weiteres bei HomeMatic.&lt;br /&gt;
&lt;br /&gt;
Problematisch ist aber, dass die Funkschnittstelle über IODev eindeutige je Aktor festgelegt werden muss, eine Zuordnung mehrerer IODevs ist nicht vorgesehen.&lt;br /&gt;
(wenn man IODev nicht setzt, wird per default die LETZTE definiert passende Schnittstelle verwendet)&lt;br /&gt;
&lt;br /&gt;
Dieses Problem kann mit einem Trick aber umgangen werden. Und zwar legt man den Aktor 2x mit gleicher Adresse aber abweichenden Namen und IOdevs an, z.B. so:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 define brenner_CUL1 FS20 11114244 11&lt;br /&gt;
 attr brenner_CUL1 IODev CUL1&lt;br /&gt;
 attr brenner_CUL2 room Keller&lt;br /&gt;
&lt;br /&gt;
 define brenner_CUL2 FS20 11114244 11&lt;br /&gt;
 attr brenner_CUL2 IODev CUL2&lt;br /&gt;
 attr brenner_CUL2 room Keller&lt;br /&gt;
&lt;br /&gt;
Ein Befehl der Art:&lt;br /&gt;
&lt;br /&gt;
 set brenner_CUL1,brenner_CUL2 on&lt;br /&gt;
&lt;br /&gt;
sendet den ON Befehl für den FS20 Aktor 11114244 11  jetzt tatsächlich über beide CULs aus!&lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn die Schnittstellen gleichschnell angebunden sind, sollte vermutlich der [[Sendpool]] verwendet werden, da die Aussendungen sonst tatsächlich gleichzeitig erfolgen könnten und sich dann gegenseitig stören würden. Dieser Trick funktioniert ausserdem nur bei Befehlen, bei denen es im Zweifel egal ist, wenn sie beim Aktor 2x eintreffen. &lt;br /&gt;
&lt;br /&gt;
Bei HomeMatic lässt sich ein ähnlicher Effekt durch einrichten einer [[Virtueller Controller VCCU|virtuellen CCU]] erreichen.&lt;br /&gt;
&lt;br /&gt;
=== Retrycount bei FHTs ist überflüssig===&lt;br /&gt;
Das von der Funktion &#039;&#039;autocreate&#039;&#039; älterer FHEM Versionen beim Anlegen von FHT80 Heizungsreglern voreingetragene attribute &amp;quot;retrycount&amp;quot; hat in den allermeisten Fällen keine Wirkung, da es NUR greift, wenn man als Funkschnittstelle eine FHZ1X00PC verwendet und dann den Softbuffer einschaltet. Selbst wenn man diese Konfiguration nutzt, will gut überlegt werden, ob die Wirkung postiv ist: Bei ungenügender Empfangslage vergrössert es Kommunikationsprobleme eventuell sogar.&lt;br /&gt;
&lt;br /&gt;
Es kann also in der Regel entfernt oder auf den Wert &amp;quot;1&amp;quot; gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
 define Heizung_Bad FHT 060d&lt;br /&gt;
 attr Heizung_Bad retrycount 3       &amp;lt;=== Diese Zeile entfernen&lt;br /&gt;
&lt;br /&gt;
Siehe auch:[[Kommunikationsprobleme mit FHT]]&lt;br /&gt;
&lt;br /&gt;
== November 2013 ==&lt;br /&gt;
=== FS20 Funksteckdose sicherer schalten===&lt;br /&gt;
Seltsamerweise kommt es vor, das FS20 Aktoren - insbesondere die FS20 Funksteckdose - an der Grenze der Funkreichweite bestimmte Befehle eines Typs empfängt, andere aber nicht. Z.B. lässt sich die FS20 Steckdose zwar immer einschalten, aber oft nicht mehr aus (oder umgekehrt).&lt;br /&gt;
&lt;br /&gt;
Gelegentlich kann man die Zuverlässigkeit erhöhen, indem man statt dem nicht funktionierenden Befehl das Gegenteil mit &amp;quot;for-timer 1&amp;quot; verwendet.&lt;br /&gt;
&lt;br /&gt;
Im Fall, dass eine FS20 Steckdose sich also einwandfrei EINschalten lässt:&lt;br /&gt;
:&amp;lt;code&amp;gt;set SteckdoseA on&amp;lt;/code&amp;gt;&lt;br /&gt;
aber oft ein AUSschalten mittels&lt;br /&gt;
:&amp;lt;code&amp;gt;set SteckdoseA off&amp;lt;/code&amp;gt;&lt;br /&gt;
nicht funktioniert, kann man versuchen die Dose anstelle mit &amp;quot;off&amp;quot; mit dem Befehl&lt;br /&gt;
:&amp;lt;code&amp;gt;set SteckdoseA on-for-timer 1&amp;lt;/code&amp;gt;&lt;br /&gt;
auszuschalten.&lt;br /&gt;
&lt;br /&gt;
Analog kann man mit off-for-timer arbeiten, wenn sich Aktoren nicht einschalten lassen, ausschalten aber geht.&lt;br /&gt;
&lt;br /&gt;
Achtung: Dieser Trick funtioniert ausdrücklich nur, wenn der &amp;quot;on/off-for-timer&amp;quot; Befehl im Aktor selber abgebildet wird. Daher ist der Trick vermutlich nicht auf andere Funksysteme übertragbar. z.B. unterstützt HM nur on-for-timer und Intertechno kennt keinen Timer.&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Geräte zugleich schalten===&lt;br /&gt;
Ein Ereignis soll mehrere Geräte schalten:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define act_on_Bewegungsmelder notify Bewegungsmelder set Lampe1 on;;set Lampe2 on;;set FunksteckdoseA on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aus Übersichtlichkeitsgründen können vor und nach den Semikolons auch Leerzeichen eingefügt werden (obwohl in einigen Dokumentation behauptet wird, dies dürfe man nicht machen):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define act_on_Bewegungsmelder notify Bewegungsmelder set Lampe1 on ;; set Lampe2 on ;; set FunksteckdoseA on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn der Schaltbefehl bei allen Geräten gleich ist, kann man wie folgt zusammenfassen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define act_on_Bewegungsmelder notify Bewegungsmelder set Lampe1,Lampe2,FunksteckdoseA on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Komma wird nicht [[Escapen in Perlbefehlen|escaped]] (verdoppelt), hier darf tatsächlich KEIN Leerzeichen vor oder nach dem Komma eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
=== Logfileinträge unterdrücken===&lt;br /&gt;
Das Attribute &amp;quot;verbose 0&amp;quot; verhindert, dass das Gerät Logfileinträge erzeugt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
 define Funksteckdose FS20 22224222 01&lt;br /&gt;
 attr Funksteckdose verbose 0&lt;br /&gt;
&lt;br /&gt;
===FHT Lazy Mode benutzen===&lt;br /&gt;
Es gibt wenig Gründe, den FHT &amp;quot;Lazy Mode&amp;quot; nicht zu verwenden&lt;br /&gt;
 define Heizung_Bad FHT 060d&lt;br /&gt;
 attr Heizung_Bad lazy&lt;br /&gt;
&lt;br /&gt;
Dieser sorgt dafür, dass Temperaturänderungen (genau genommen alle Änderungen, auch z.B. date) nur übertragen werden, wenn sie nicht sowieso schon am FHT eingestellt sind und veringern die Funklast dadurch deutlich. &lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Kommunikationsprobleme mit FHT]]&lt;br /&gt;
&lt;br /&gt;
== Oktober 2013 ==&lt;br /&gt;
=== Zuverlässigkeit von Wiedereinschalten erhöhen ===&lt;br /&gt;
Speziell bei FS20 Aktoren ist wegen des fehlenden Rückkanals nicht leicht erkennbar, ob ein Einschaltbefehl Wirkung gezeigt hat. Das hat ganz schlechten WAF, wenn man z.B. mit einem FS20 Aktor eine Heizung ausschaltet und das Wiedereinschalten nach z.B. einer Stunde nicht klappt.&lt;br /&gt;
&lt;br /&gt;
Hier empfiehlt es sich, das Ausschalten mittels &lt;br /&gt;
:&amp;lt;code&amp;gt;set Heizungs_schalter off-for-timer 3584&amp;lt;/code&amp;gt;   (= fast eine Stunde)&lt;br /&gt;
zu erledigen. Da bei FS20 der off-for-timer Befehl im Aktor abgewickelt wird (und nicht durch FHEM), schaltet sich der Aktor auch dann garantiert wieder ein, wenn Fhem abstürzt, eine Funkstörung vorliegt oder ähnliches.  Bei Bedarf kann der Befehl off-for-timer zur  Verlängerung der Ausschaltzeit wiederholt werden. Dies kann z.B. nötig sein, wenn die Ausschaltung länger als 4,5 Stunden (15360 Sekunden, der Maximalwert des Timers) dauern soll.&lt;br /&gt;
&lt;br /&gt;
Achtung: dieser Trick funktioniert nur, wenn der Aktor &amp;quot;off-for-timer&amp;quot; selbst beherrscht. FS20 Geräte können das, HomeMatic können aber nur &amp;quot;on-for-timer&amp;quot;. Man kann off-for-timer mit HomeMatic trotzdem verwenden, aber in diesem Fall sendet Fhem den Einschaltbefehl nach der Timerzeit. InterTechno, RSL etc, können gar keinen Timer, hier sendet Fhem immer 2 Befehle im passenden Abstand.&lt;br /&gt;
&lt;br /&gt;
=== FS20 Timerzeiten ===&lt;br /&gt;
FS20 Timer werden in Sekunden angegeben. Es sind jedoch nicht alle Werte einstellbar. Da der Timer Wert in 7 Bit übertragen werden muss, sind nur 128 Werte möglich. Um mit diesen Werten im unteren Bereich möglichst fein aufzulösen, andererseits aber auch lange Zeiten zu ermöglichen, ist die Verteilung nicht linear. Einstellbar sind folgende Zeiten in Sekunden;&lt;br /&gt;
&lt;br /&gt;
0,25  0,5  0,75  1  1,25  1,5  1,75  2  2,25  2,5  2,75  3  3,25  3,5  3,75   &lt;br /&gt;
4  4,5  5  5,5  6  6,5  7  7,5  8  9  10  11  12  13  14  15  16  18  20  22   &lt;br /&gt;
24  26  28  30  32  36  40  44  48  52  56  60  64  72  80  88  96  104  112   &lt;br /&gt;
120  128  144  160  176  192  208  224  240  256  288  320  352  384  416   &lt;br /&gt;
448  480  512  576  640  704  768  832  896  960  1024  1152  1280  1408   &lt;br /&gt;
1536  1664  1792  1920  2048  2304  2560  2816  3072  3328  3584  3840  4096   &lt;br /&gt;
4608  5120  5632  6144  6656  7168  7680  8192  9216  10240  11264  12288   &lt;br /&gt;
13312  14336  15360 &lt;br /&gt;
(etwas übersichtlicher formatiert auch [[FS20 Allgemein#ON/OFF Befehle mit Time Parameter|hier]]).&lt;br /&gt;
 &lt;br /&gt;
Andere Zeiten werden von Fhem gerundet. Ein neues Setzen des Timer für FS20 löscht den alten Wert.&lt;/div&gt;</summary>
		<author><name>Nielsiwilsi</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-SEC-SD_Rauchmelder&amp;diff=8876</id>
		<title>HM-SEC-SD Rauchmelder</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-SEC-SD_Rauchmelder&amp;diff=8876"/>
		<updated>2014-12-16T16:58:33Z</updated>

		<summary type="html">&lt;p&gt;Nielsiwilsi: /* virtueller TeamLead */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Features ==&lt;br /&gt;
Das Gerät ist ein VdS-zertifizierter Rauchmelder. Mehrere Rauchmelder können unabhängig von einer Zentrale zu einer Gruppe zusammengefasst werden. Auch ohne FHEM-Zentrale meldet ein Rauchmelder seinen Alarm immer an die anderen vernetzten Rauchmelder weiter.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Der HM-SEC-SD Rauchmelder beherrscht kein AES. Der Betrieb ist mit &amp;lt;u&amp;gt;[[HMLAN Konfigurator]]&amp;lt;/u&amp;gt; oder mit &amp;lt;u&amp;gt;[[CUL]]&amp;lt;/u&amp;gt; möglich.&lt;br /&gt;
Das Pairing sollte wie in &amp;lt;u&amp;gt;[[HomeMatic Devices pairen]]&amp;lt;/u&amp;gt; beschrieben durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
===Teams===&lt;br /&gt;
Rauchmelder können/sollen in Teams gruppiert werden. Jeder SD kann einem Team angehören - und das sollte man auch einrichten. Nutzt man nur einen SD sollte man diesen mit sich selbst Teamen.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
nutzt man einen SD und will diese nicht mit anderen in einem team haben peert man ihm mit sich selbst. Damit ist der SD sein eigener teamLead. &lt;br /&gt;
 &amp;lt;code&amp;gt;set Rauchmelder_Flur peerChan 0 Rauchmelder_Flur single set actor&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Hat man mehrere SDs, die in einem Team zusammenfassen will wird der teamLead festgelegt und alle SDs werden mit ihm gepeert. Das Team kann jederzeit erweitert werden. &lt;br /&gt;
 &amp;lt;code&amp;gt;set Rauchmelder_Flur peerChan 0 Rauchmelder_Flur single set actor&lt;br /&gt;
 set Rauchmelder_Flur peerChan 0 Rauchmelder_WZ single set actor&lt;br /&gt;
 set Rauchmelder_Flur peerChan 0 Rauchmelder_SZ single set actor&lt;br /&gt;
 set Rauchmelder_Flur peerChan 0 Rauchmelder_KZ single set actor&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Nutzt man einen virtuellen TeamLead - siehe Kapitel - werden alle realen SDs mit diesem gepeert&lt;br /&gt;
 &amp;lt;code&amp;gt;set Rauchmelder_Team peerChan 0 Rauchmelder_Flur single set actor&lt;br /&gt;
 set Rauchmelder_Team peerChan 0 Rauchmelder_WZ single set actor&lt;br /&gt;
 set Rauchmelder_Team peerChan 0 Rauchmelder_SZ single set actor&lt;br /&gt;
 set Rauchmelder_Team peerChan 0 Rauchmelder_KZ single set actor&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/code&amp;gt;.&lt;br /&gt;
entfernen eines SDs aus dem team geht mit unset. Um einen SD von einem Team in ein anderes zu transferieren muss man ihn erst mit unset aus dem Team entfernen, dann mit set in das neue Team eintragen. Einen physkalischen TeamLead kann man nur aus dem Team nehmen, indem man ihn aus allen team-mitgliedern entfernt. &lt;br /&gt;
&lt;br /&gt;
Die korrekte Gruppierung sollte nach der Konfiguration durch einen teamCall geprüft werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Betrieb mehrer Teams ist möglich, ein SD kann aber nur einem Team angehören. Will man einen SD von einem Team in ein anderes umhängen muss man ihn erste aus dem ersten Team entfernen (unset) und dann in das Neue aufnehmen.&lt;br /&gt;
&lt;br /&gt;
===TeamLead===&lt;br /&gt;
Für ein Team muss immer ein TeamLead festgelegt werden. Anders als der Name suggeriert gibt es hier keinen Master. Sinn und Zweck ist einzig, eine Team-Adresse (HMId) festzulegen, unter der man alle SDs eines Teams ansprechen kann. Diese muss, wie alle HMIds, einzig im System sein. Um dies zu erreichen verwendet HM beim Teamen ohne Zentrale die HMId eines der SDs. &lt;br /&gt;
Verwendet man eine Zentrale (FHEM) kann man dies auch entzerren und einen virtuelen SD als teamLead  nutzen. Siehe hierzu virtual TeamLead.&amp;lt;br&amp;gt;&lt;br /&gt;
Nutzt man nur einen einzelnen SD sollte man diesen mit sich selbst teamen.&lt;br /&gt;
===Kommandos===&lt;br /&gt;
Es gibt Team-Nachrichten die jeder SD senden kann und auf die jeder SD im Team reagiert. Jeder SD kann somit einen teamcall auslösen oder einen Alarm ausgeben. Die Kommandos werden &#039;&#039;&#039;nicht&#039;&#039;&#039; von einem SD zum anderen weitergereicht. Auch der TeamLead hat &#039;&#039;&#039;keine&#039;&#039;&#039; Sonderfunktion. Der einzelne SD sendet seine Nachricht an das Team und jeder im Team reagiert darauf. &amp;lt;br&amp;gt;&lt;br /&gt;
Es ist somit darauf zu achten, dass auch die entferntesten SDs sich gegenseitig erreichen können. &amp;lt;br&amp;gt;&lt;br /&gt;
Die Kommandos können von der Zentrale getriggert werden. Da sie unter der TeamId gesendet werden stehen sie nur bei der Komponente des Teamleads zu Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Dazu gehören teamCall, alarmOn und alarmOff. &amp;lt;br&amp;gt;&lt;br /&gt;
Sie stehen nur für die Entity des TeamLeads zu Verfügung.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt;set EurerTeamleader alarmOn&lt;br /&gt;
  set EurerTeamleader alarmOff&lt;br /&gt;
  set EurerTeamleader teamCall&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;teamCall&#039;&#039;&#039; testet die Zugehörigkeit und Erreichbarkeit aller SDs im Team. Alle SDs sollten 10 mal leise piepen.&lt;br /&gt;
&lt;br /&gt;
Einzelne SDs kann man mit &amp;quot;statusRequest&amp;quot; abfragen.&lt;br /&gt;
&lt;br /&gt;
==virtueller TeamLead==&lt;br /&gt;
Nutzt man einen SD kann/sollte man diesen mit sich selbst teamen (peerChan). In allen andere Fällen braucht man einen Teamlead um eine team-ID zu erhalten. Man kann hierzu einen der SDs nutzen. Wird dieser einmal ausgewechselt hat man allerdings seine team-ID verloren.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn man mit Zentrale (FHEM) arbeitet gibt es eigentlich keinen vernünftigen Grund (ausser 1-SD-Teams) einen der SDs als lead zu nutzen. Man kann genauso gut einen virtuellen Aktor bauen und diesen zum Lead machen. Das ergibt eine sauberere Struktur.&amp;lt;br&amp;gt;&lt;br /&gt;
Erzeugen eines virtuellen TeamLeads könnte so aussehen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;define TeamDev CUL_HM 111111 &lt;br /&gt;
 set TeamDev virtual 1&lt;br /&gt;
 rename TeamDev_Btn1 Rauchmelder_Team&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte beachten: &#039;&#039;&#039;die HMID muss für die gesamte Installation einmalig sein&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Anschließend muss man noch einen Homematic-Kanal für das Peering definieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Jeder Rauchmelder muss jetzt in das Team aufgenommen werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;set Rauchmelder_Team peerChan 0 Rauchmelder_Flur single set&lt;br /&gt;
 set Rauchmelder_Team peerChan 0 Rauchmelder_WZ single set&lt;br /&gt;
 ...&lt;br /&gt;
 save&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist &amp;quot;Rauchmelder_Team&amp;quot; der Name des virtuellen Teamleaders und &amp;quot;Rauchmelder_Flur&amp;quot; der Name des jeweiligen Rauchmelders. &amp;lt;br&amp;gt;&lt;br /&gt;
Das &amp;quot;save&amp;quot; ist notwendig um auch die Einstellungen des virtuellen SDs im Config file zu sichern. &amp;lt;br&amp;gt;&lt;br /&gt;
Bei jedem Rauchmelder sollte den Name des virtuellen Teamleaders in der peerList stehen und beim virtuellen Teamleader jeder Rauchmelder.&amp;lt;br&amp;gt;&lt;br /&gt;
Mit teamCall sollte man die korrekte Funktion des Teams prüfen, wer will auch mit alarmOn.&lt;br /&gt;
&lt;br /&gt;
==Variablen==&lt;br /&gt;
===Internals===&lt;br /&gt;
keine Spezifischen&lt;br /&gt;
===Readings===&lt;br /&gt;
Für &#039;&#039;&#039;jeden&#039;&#039;&#039; SD sind folgende Readings relevant:&lt;br /&gt;
  teamCall from &amp;lt;name&amp;gt;:&amp;lt;count&amp;gt;&lt;br /&gt;
  state:[off|smoke-Alarm_&amp;lt;count&amp;gt;]&lt;br /&gt;
  smoke_detect:&amp;lt;von_name&amp;gt;&lt;br /&gt;
  battery:[ok|low]&lt;br /&gt;
  level:&amp;lt;0..200&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;count&#039;&#039;&#039; ist ein Zähler, den das Gerät liefert um neue Alarme unterschieden zu können&lt;br /&gt;
*&#039;&#039;&#039;level&#039;&#039;&#039; ist ein Wert zwischen 0 und 200. 200 ist alarm, 199 bedeutet Alarm, aber die Sirene ist abgeschaltet.&lt;br /&gt;
&lt;br /&gt;
Beim &#039;&#039;&#039;Teamlead&#039;&#039;&#039; laufen alle Alarme auf&lt;br /&gt;
  teamCall: from &amp;lt;name&amp;gt;:&amp;lt;count&amp;gt;&lt;br /&gt;
  recentAlarm:&amp;lt;von_name&amp;gt;&lt;br /&gt;
  level:&amp;lt;0..200&amp;gt;&lt;br /&gt;
  eventNo:&amp;lt;count&amp;gt;&lt;br /&gt;
  state:[off|smoke-Alarm_&amp;lt;count&amp;gt;]&lt;br /&gt;
  smoke_detect:&amp;lt;von_name&amp;gt;&lt;br /&gt;
  SDteam:[add_&amp;lt;name&amp;gt;|remove_&amp;lt;name&amp;gt;]&lt;br /&gt;
*&#039;&#039;&#039;von_name&#039;&#039;&#039; ist der Name des SD, der gemeldet hat. &lt;br /&gt;
*&#039;&#039;&#039;smoke_detect&#039;&#039;&#039; ist der aktuelle Alarm, während &#039;&#039;&#039;recentAlarm&#039;&#039;&#039; die letzte Alarmquelle anzeigt, auch wenn der Alarm schon behoben ist.&lt;br /&gt;
*&#039;&#039;&#039;SDteam&#039;&#039;&#039; kommt gelegentlich bei Konfigurationsereignissen zum Tragen.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
besondere Attribute&lt;br /&gt;
* &#039;&#039;&#039;msgRepeat&#039;&#039;&#039; sollte auf 1 stehen. SD ist ein burst device, wiederholen von Nachrichten belastet das HMLAN besonders. Die Team-kommandos sind hiervon nicht beeinflusst, also auch nicht das Auslösen eines Alarms. &lt;br /&gt;
* &#039;&#039;&#039;actCycle&#039;&#039;&#039; wird auf 99 Stunden gesetzt. Ein SD meldet sich alle 3 Tage bei der Zentrale, was der ActionDetector prüft.&lt;br /&gt;
* &#039;&#039;&#039;msgRepeat&#039;&#039;&#039;  1&lt;br /&gt;
Allgemein vorgeschlagen&lt;br /&gt;
 &#039;&#039;&#039;IODev&#039;&#039;&#039; [HMLAN/HMUSB/CUL]&lt;br /&gt;
 &#039;&#039;&#039;autoReadReg&#039;&#039;&#039; 5_readMissing&lt;br /&gt;
 &#039;&#039;&#039;event-on-change-reading&#039;&#039;&#039; .*&lt;br /&gt;
Optional, nur als Anregung zu verstehen&lt;br /&gt;
  &#039;&#039;&#039;devStateIcon off&#039;&#039;&#039; general_ok *:secur_alarm&lt;br /&gt;
  &#039;&#039;&#039;group&#039;&#039;&#039; smokeDetect&lt;br /&gt;
  &#039;&#039;&#039;icon&#039;&#039;&#039; secur_smoke_detector&lt;br /&gt;
&lt;br /&gt;
==Alarme==&lt;br /&gt;
Meldet ein SD einen Alarm wird dieser in dem SD und im TeamLead angezeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
Nutzt man HMIinfo wird ein Rauchalarm auch hier als &amp;quot;Error&amp;quot; gemeldet. In HMInfo wird dies für alle SD-teams im System gemacht.&lt;br /&gt;
&lt;br /&gt;
== Nützliche Notifies ==&lt;br /&gt;
Codefragmente, die man einsetzen kann. Ggf. muss man etwas anpassen, zumindest können sie als Anregung nützlich sein. &lt;br /&gt;
* Bei Alarm email schicken und Licht im Flur anschalten&lt;br /&gt;
  define sd.nf.report notify sdTeam:.*smoke-Alarm.* {\&lt;br /&gt;
    &amp;lt;Mail versenden&amp;gt;;;&lt;br /&gt;
    fhem(&amp;quot;set LichtTreppenhaus on&amp;quot;);;&lt;br /&gt;
  }\&lt;br /&gt;
&lt;br /&gt;
* Bei Alarm alle SDs des Team stumm schalten durch stumm Schalten eines einzelnen&lt;br /&gt;
  define sd.nf.quiet notify sdTeam:.*level:.199 set sdTeam alarmOff&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
Anleitung [http://www.eq-3.de/Downloads/eq3/pdf_produkte/83454_HM-Sec-SD_GE_V1.4_20131011.pdf] PDF&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Rauchmelder]]&lt;/div&gt;</summary>
		<author><name>Nielsiwilsi</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-SEC-SD_Rauchmelder&amp;diff=8875</id>
		<title>HM-SEC-SD Rauchmelder</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-SEC-SD_Rauchmelder&amp;diff=8875"/>
		<updated>2014-12-16T16:54:13Z</updated>

		<summary type="html">&lt;p&gt;Nielsiwilsi: /* virtueller TeamLead */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Features ==&lt;br /&gt;
Das Gerät ist ein VdS-zertifizierter Rauchmelder. Mehrere Rauchmelder können unabhängig von einer Zentrale zu einer Gruppe zusammengefasst werden. Auch ohne FHEM-Zentrale meldet ein Rauchmelder seinen Alarm immer an die anderen vernetzten Rauchmelder weiter.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Der HM-SEC-SD Rauchmelder beherrscht kein AES. Der Betrieb ist mit &amp;lt;u&amp;gt;[[HMLAN Konfigurator]]&amp;lt;/u&amp;gt; oder mit &amp;lt;u&amp;gt;[[CUL]]&amp;lt;/u&amp;gt; möglich.&lt;br /&gt;
Das Pairing sollte wie in &amp;lt;u&amp;gt;[[HomeMatic Devices pairen]]&amp;lt;/u&amp;gt; beschrieben durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
===Teams===&lt;br /&gt;
Rauchmelder können/sollen in Teams gruppiert werden. Jeder SD kann einem Team angehören - und das sollte man auch einrichten. Nutzt man nur einen SD sollte man diesen mit sich selbst Teamen.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
nutzt man einen SD und will diese nicht mit anderen in einem team haben peert man ihm mit sich selbst. Damit ist der SD sein eigener teamLead. &lt;br /&gt;
 &amp;lt;code&amp;gt;set Rauchmelder_Flur peerChan 0 Rauchmelder_Flur single set actor&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Hat man mehrere SDs, die in einem Team zusammenfassen will wird der teamLead festgelegt und alle SDs werden mit ihm gepeert. Das Team kann jederzeit erweitert werden. &lt;br /&gt;
 &amp;lt;code&amp;gt;set Rauchmelder_Flur peerChan 0 Rauchmelder_Flur single set actor&lt;br /&gt;
 set Rauchmelder_Flur peerChan 0 Rauchmelder_WZ single set actor&lt;br /&gt;
 set Rauchmelder_Flur peerChan 0 Rauchmelder_SZ single set actor&lt;br /&gt;
 set Rauchmelder_Flur peerChan 0 Rauchmelder_KZ single set actor&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Nutzt man einen virtuellen TeamLead - siehe Kapitel - werden alle realen SDs mit diesem gepeert&lt;br /&gt;
 &amp;lt;code&amp;gt;set Rauchmelder_Team peerChan 0 Rauchmelder_Flur single set actor&lt;br /&gt;
 set Rauchmelder_Team peerChan 0 Rauchmelder_WZ single set actor&lt;br /&gt;
 set Rauchmelder_Team peerChan 0 Rauchmelder_SZ single set actor&lt;br /&gt;
 set Rauchmelder_Team peerChan 0 Rauchmelder_KZ single set actor&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/code&amp;gt;.&lt;br /&gt;
entfernen eines SDs aus dem team geht mit unset. Um einen SD von einem Team in ein anderes zu transferieren muss man ihn erst mit unset aus dem Team entfernen, dann mit set in das neue Team eintragen. Einen physkalischen TeamLead kann man nur aus dem Team nehmen, indem man ihn aus allen team-mitgliedern entfernt. &lt;br /&gt;
&lt;br /&gt;
Die korrekte Gruppierung sollte nach der Konfiguration durch einen teamCall geprüft werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Der Betrieb mehrer Teams ist möglich, ein SD kann aber nur einem Team angehören. Will man einen SD von einem Team in ein anderes umhängen muss man ihn erste aus dem ersten Team entfernen (unset) und dann in das Neue aufnehmen.&lt;br /&gt;
&lt;br /&gt;
===TeamLead===&lt;br /&gt;
Für ein Team muss immer ein TeamLead festgelegt werden. Anders als der Name suggeriert gibt es hier keinen Master. Sinn und Zweck ist einzig, eine Team-Adresse (HMId) festzulegen, unter der man alle SDs eines Teams ansprechen kann. Diese muss, wie alle HMIds, einzig im System sein. Um dies zu erreichen verwendet HM beim Teamen ohne Zentrale die HMId eines der SDs. &lt;br /&gt;
Verwendet man eine Zentrale (FHEM) kann man dies auch entzerren und einen virtuelen SD als teamLead  nutzen. Siehe hierzu virtual TeamLead.&amp;lt;br&amp;gt;&lt;br /&gt;
Nutzt man nur einen einzelnen SD sollte man diesen mit sich selbst teamen.&lt;br /&gt;
===Kommandos===&lt;br /&gt;
Es gibt Team-Nachrichten die jeder SD senden kann und auf die jeder SD im Team reagiert. Jeder SD kann somit einen teamcall auslösen oder einen Alarm ausgeben. Die Kommandos werden &#039;&#039;&#039;nicht&#039;&#039;&#039; von einem SD zum anderen weitergereicht. Auch der TeamLead hat &#039;&#039;&#039;keine&#039;&#039;&#039; Sonderfunktion. Der einzelne SD sendet seine Nachricht an das Team und jeder im Team reagiert darauf. &amp;lt;br&amp;gt;&lt;br /&gt;
Es ist somit darauf zu achten, dass auch die entferntesten SDs sich gegenseitig erreichen können. &amp;lt;br&amp;gt;&lt;br /&gt;
Die Kommandos können von der Zentrale getriggert werden. Da sie unter der TeamId gesendet werden stehen sie nur bei der Komponente des Teamleads zu Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Dazu gehören teamCall, alarmOn und alarmOff. &amp;lt;br&amp;gt;&lt;br /&gt;
Sie stehen nur für die Entity des TeamLeads zu Verfügung.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt;set EurerTeamleader alarmOn&lt;br /&gt;
  set EurerTeamleader alarmOff&lt;br /&gt;
  set EurerTeamleader teamCall&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;teamCall&#039;&#039;&#039; testet die Zugehörigkeit und Erreichbarkeit aller SDs im Team. Alle SDs sollten 10 mal leise piepen.&lt;br /&gt;
&lt;br /&gt;
Einzelne SDs kann man mit &amp;quot;statusRequest&amp;quot; abfragen.&lt;br /&gt;
&lt;br /&gt;
==virtueller TeamLead==&lt;br /&gt;
Nutzt man einen SD kann/sollte man diesen mit sich selbst teamen (peerChan). In allen andere Fällen braucht man einen Teamlead um eine team-ID zu erhalten. Man kann hierzu einen der SDs nutzen. Wird dieser einmal ausgewechselt hat man allerdings seine team-ID verloren.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn man mit Zentrale (FHEM) arbeitet gibt es eigentlich keinen vernünftigen Grund (ausser 1-SD-Teams) einen der SDs als lead zu nutzen. Man kann genauso gut einen virtuellen Aktor bauen und diesen zum Lead machen. Das ergibt eine sauberere Struktur.&amp;lt;br&amp;gt;&lt;br /&gt;
Erzeugen eines virtuellen TeamLeads könnte so aussehen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;define TeamDev CUL_HM 111111 &lt;br /&gt;
 set TeamDev virtual 1&lt;br /&gt;
 rename TeamDev_Btn1 Rauchmelder_Team&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte beachten: &#039;&#039;&#039;die HMID muss für die gesamte Installation einmalig sein&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Anschließend muss man noch einen Homematic-Kanal für das Peering definieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Jeder Rauchmelder muss jetzt in das Team aufgenommen werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;set Rauchmelder_Team peerChan 0 Rauchmelder_Flur single set&lt;br /&gt;
 set Rauchmelder_Team peerChan 0 Rauchmelder_WZ single set&lt;br /&gt;
 ...&lt;br /&gt;
 save&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Hierbei ist &amp;quot;Rauchmelder_Team&amp;quot; der Name des virtuellen Teamleaders und &amp;quot;Rauchmelder_Flur&amp;quot; der Name des jeweiligen Rauchmelders. &amp;lt;br&amp;gt;&lt;br /&gt;
Das &amp;quot;save&amp;quot; ist notwendig um auch die Einstellungen des virtuellen SDs im Config file zu sichern. &amp;lt;br&amp;gt;&lt;br /&gt;
Bei jedem Rauchmelder sollte den Name des virtuellen Teamleaders in der peerList stehen und beim virtuellen Teamleader jeder Rauchmelder.&amp;lt;br&amp;gt;&lt;br /&gt;
Mit teamCall sollte man die korrekte Funktion des Teams prüfen, wer will auch mit alarmOn.&lt;br /&gt;
&lt;br /&gt;
==Variablen==&lt;br /&gt;
===Internals===&lt;br /&gt;
keine Spezifischen&lt;br /&gt;
===Readings===&lt;br /&gt;
Für &#039;&#039;&#039;jeden&#039;&#039;&#039; SD sind folgende Readings relevant:&lt;br /&gt;
  teamCall from &amp;lt;name&amp;gt;:&amp;lt;count&amp;gt;&lt;br /&gt;
  state:[off|smoke-Alarm_&amp;lt;count&amp;gt;]&lt;br /&gt;
  smoke_detect:&amp;lt;von_name&amp;gt;&lt;br /&gt;
  battery:[ok|low]&lt;br /&gt;
  level:&amp;lt;0..200&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;count&#039;&#039;&#039; ist ein Zähler, den das Gerät liefert um neue Alarme unterschieden zu können&lt;br /&gt;
*&#039;&#039;&#039;level&#039;&#039;&#039; ist ein Wert zwischen 0 und 200. 200 ist alarm, 199 bedeutet Alarm, aber die Sirene ist abgeschaltet.&lt;br /&gt;
&lt;br /&gt;
Beim &#039;&#039;&#039;Teamlead&#039;&#039;&#039; laufen alle Alarme auf&lt;br /&gt;
  teamCall: from &amp;lt;name&amp;gt;:&amp;lt;count&amp;gt;&lt;br /&gt;
  recentAlarm:&amp;lt;von_name&amp;gt;&lt;br /&gt;
  level:&amp;lt;0..200&amp;gt;&lt;br /&gt;
  eventNo:&amp;lt;count&amp;gt;&lt;br /&gt;
  state:[off|smoke-Alarm_&amp;lt;count&amp;gt;]&lt;br /&gt;
  smoke_detect:&amp;lt;von_name&amp;gt;&lt;br /&gt;
  SDteam:[add_&amp;lt;name&amp;gt;|remove_&amp;lt;name&amp;gt;]&lt;br /&gt;
*&#039;&#039;&#039;von_name&#039;&#039;&#039; ist der Name des SD, der gemeldet hat. &lt;br /&gt;
*&#039;&#039;&#039;smoke_detect&#039;&#039;&#039; ist der aktuelle Alarm, während &#039;&#039;&#039;recentAlarm&#039;&#039;&#039; die letzte Alarmquelle anzeigt, auch wenn der Alarm schon behoben ist.&lt;br /&gt;
*&#039;&#039;&#039;SDteam&#039;&#039;&#039; kommt gelegentlich bei Konfigurationsereignissen zum Tragen.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
besondere Attribute&lt;br /&gt;
* &#039;&#039;&#039;msgRepeat&#039;&#039;&#039; sollte auf 1 stehen. SD ist ein burst device, wiederholen von Nachrichten belastet das HMLAN besonders. Die Team-kommandos sind hiervon nicht beeinflusst, also auch nicht das Auslösen eines Alarms. &lt;br /&gt;
* &#039;&#039;&#039;actCycle&#039;&#039;&#039; wird auf 99 Stunden gesetzt. Ein SD meldet sich alle 3 Tage bei der Zentrale, was der ActionDetector prüft.&lt;br /&gt;
* &#039;&#039;&#039;msgRepeat&#039;&#039;&#039;  1&lt;br /&gt;
Allgemein vorgeschlagen&lt;br /&gt;
 &#039;&#039;&#039;IODev&#039;&#039;&#039; [HMLAN/HMUSB/CUL]&lt;br /&gt;
 &#039;&#039;&#039;autoReadReg&#039;&#039;&#039; 5_readMissing&lt;br /&gt;
 &#039;&#039;&#039;event-on-change-reading&#039;&#039;&#039; .*&lt;br /&gt;
Optional, nur als Anregung zu verstehen&lt;br /&gt;
  &#039;&#039;&#039;devStateIcon off&#039;&#039;&#039; general_ok *:secur_alarm&lt;br /&gt;
  &#039;&#039;&#039;group&#039;&#039;&#039; smokeDetect&lt;br /&gt;
  &#039;&#039;&#039;icon&#039;&#039;&#039; secur_smoke_detector&lt;br /&gt;
&lt;br /&gt;
==Alarme==&lt;br /&gt;
Meldet ein SD einen Alarm wird dieser in dem SD und im TeamLead angezeigt.&amp;lt;br&amp;gt;&lt;br /&gt;
Nutzt man HMIinfo wird ein Rauchalarm auch hier als &amp;quot;Error&amp;quot; gemeldet. In HMInfo wird dies für alle SD-teams im System gemacht.&lt;br /&gt;
&lt;br /&gt;
== Nützliche Notifies ==&lt;br /&gt;
Codefragmente, die man einsetzen kann. Ggf. muss man etwas anpassen, zumindest können sie als Anregung nützlich sein. &lt;br /&gt;
* Bei Alarm email schicken und Licht im Flur anschalten&lt;br /&gt;
  define sd.nf.report notify sdTeam:.*smoke-Alarm.* {\&lt;br /&gt;
    &amp;lt;Mail versenden&amp;gt;;;&lt;br /&gt;
    fhem(&amp;quot;set LichtTreppenhaus on&amp;quot;);;&lt;br /&gt;
  }\&lt;br /&gt;
&lt;br /&gt;
* Bei Alarm alle SDs des Team stumm schalten durch stumm Schalten eines einzelnen&lt;br /&gt;
  define sd.nf.quiet notify sdTeam:.*level:.199 set sdTeam alarmOff&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
Anleitung [http://www.eq-3.de/Downloads/eq3/pdf_produkte/83454_HM-Sec-SD_GE_V1.4_20131011.pdf] PDF&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Rauchmelder]]&lt;/div&gt;</summary>
		<author><name>Nielsiwilsi</name></author>
	</entry>
</feed>