<?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=Crissiloop</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=Crissiloop"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Crissiloop"/>
	<updated>2026-04-14T18:44:32Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Google-Kalender_zur_Steuerung_von_Dummies&amp;diff=15038</id>
		<title>Google-Kalender zur Steuerung von Dummies</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Google-Kalender_zur_Steuerung_von_Dummies&amp;diff=15038"/>
		<updated>2016-04-10T16:34:48Z</updated>

		<summary type="html">&lt;p&gt;Crissiloop: notify auf mode angepasst laut den Hinweisen zur aktuellen Version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mit dem Kalendermodul [http://fhem.de/commandref.html Calendar] ist es möglich, Ereignisse aus Kalendern im&lt;br /&gt;
ICal-Format abzufragen.&lt;br /&gt;
Dies und der Wiki-Eintrag [[Wochenende, Feiertage und Schulferien]] hat mich dazu veranlasst, dass ich durch&lt;br /&gt;
Kalendereinträge im Google-Kalender den Status meiner beiden [[dummy|Dummies]] &amp;quot;Urlaub&amp;quot; und &amp;quot;Besuch&amp;quot; steuere. Durch diese&lt;br /&gt;
beiden Dummies werden zum Beispiel die Rolläden im Schlafzimmer oder Gästezimmer bei Besuch oder Urlaub anders&lt;br /&gt;
gesteuert als ohne Besuch oder unter der Woche. Auch meine Zirkulationspumpe soll so bedarfsgerecht gesteuert werden.&lt;br /&gt;
Dass am Wochenende anders gesteuert wird, ist ja mit $we kein Problem.&lt;br /&gt;
Zuerst wird dafür der Kalender definiert:&lt;br /&gt;
&lt;br /&gt;
 define Kalender_Christian Calendar ical url &amp;lt;der richtige Kalenderlink&amp;gt; 14400&lt;br /&gt;
&lt;br /&gt;
Den Kalenderlink [https://support.google.com/calendar/answer/37103?hl=de] findet man wie beschrieben heraus.&lt;br /&gt;
Dann habe ich meine Dummies definiert:&lt;br /&gt;
&lt;br /&gt;
 define Urlaub_dummy dummy&lt;br /&gt;
 attr Urlaub_dummy room Kalender&lt;br /&gt;
 attr Urlaub_dummy setList ja nein&lt;br /&gt;
 attr Urlaub_dummy webCmd ja:nein&lt;br /&gt;
 define Gast_dummy dummy&lt;br /&gt;
 attr Gast_dummy room Kalender&lt;br /&gt;
 attr Gast_dummy setList ja nein&lt;br /&gt;
 attr Gast_dummy webCmd ja:nein&lt;br /&gt;
&lt;br /&gt;
Und nun mussten die Notifys definiert werden, um bei entsprechenden Einträgen im Google-Kalender den Status der&lt;br /&gt;
Dummies zu setzen.&lt;br /&gt;
&lt;br /&gt;
 define Kalender_Christian_Start notify Kalender_Christian:start:.*googlecom.* {\&lt;br /&gt;
 Kalenderstart(&amp;quot;$EVENT&amp;quot;);;\&lt;br /&gt;
 }&lt;br /&gt;
 define Kalender_Christian_Ende notify Kalender_Christian:end:.*googlecom.* {\&lt;br /&gt;
 Kalenderende(&amp;quot;$EVENT&amp;quot;);;\&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Um nicht für verschiedene Dummies immer einzelne Notifys zu bauen, wird hier bei mir je eine Funktion aus meiner [[99 myUtils anlegen|99_MyUtils.pm]] aufgerufen und das Event als Parameter übergeben. Die beiden zugehörigen&lt;br /&gt;
Funktionen für den Start und das Ende des Kalenderevents schauen so aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub&lt;br /&gt;
Kalenderstart ($)&lt;br /&gt;
{&lt;br /&gt;
	my ($Ereignis) = @_;&lt;br /&gt;
	my @Ereignisarray = split(/.*:\s/,$Ereignis);&lt;br /&gt;
	my $Ereignisteil1 = $Ereignisarray[1];&lt;br /&gt;
	my @uids = split(/;/,$Ereignisteil1);&lt;br /&gt;
	foreach my $uid (@uids) {&lt;br /&gt;
		my $Kalendertext = fhem(&amp;quot;get Kalender_Christian summary uid=$uid 1&amp;quot;);&lt;br /&gt;
		if ($Kalendertext =~ /Urlaub/) {&lt;br /&gt;
			fhem(&amp;quot;set Urlaub_dummy ja&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if ($Kalendertext =~ /Besuch/) {&lt;br /&gt;
			fhem(&amp;quot;set Gast_dummy ja&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
sub Kalenderende ($) {&lt;br /&gt;
	my ($Ereignis) = @_;&lt;br /&gt;
	my @Ereignisarray = split(/.*:\s/,$Ereignis);&lt;br /&gt;
	my $Ereignisteil1 = $Ereignisarray[1];&lt;br /&gt;
	my @uids = split(/;/,$Ereignisteil1);&lt;br /&gt;
	foreach my $uid (@uids) {&lt;br /&gt;
		my $Kalendertext = fhem(&amp;quot;get Kalender_Christian summary uid=$uid 1&amp;quot;);&lt;br /&gt;
		if ($Kalendertext =~ /Urlaub/) {&lt;br /&gt;
			fhem(&amp;quot;set Urlaub_dummy nein&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if ($Kalendertext =~ /Besuch/) {&lt;br /&gt;
			fhem(&amp;quot;set Gast_dummy nein&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Erläuterung: Als Ereignis wird z.B. &amp;quot;&#039;&#039;modeStarted: 9aas2amo7td47th4sf7mlocl48googlecom&#039;&#039;&amp;quot; oder bei 2 gleichzeitigen&lt;br /&gt;
Ereignissen: &amp;quot;&#039;&#039;modeStarted: arqpe2a2snu6qn64dt0men7nd0googlecom;j0pjiupfb1sk3m5s64hbeo6880googlecom&#039;&#039;&amp;quot;&lt;br /&gt;
übergeben. Da uns aber nur die eindeutige UID interessiert, wird das Ereignis beim Vorkommen der Zeichen &amp;quot;: Leerzeichen&amp;quot;&lt;br /&gt;
also nach modeStarted: geteilt (&amp;lt;code&amp;gt;split(/.*:\s/,$Ereignis)&amp;lt;/code&amp;gt;). Die beiden Teile werden in ein Array (&amp;lt;code&amp;gt;@Ereignisarray&amp;lt;/code&amp;gt;) gespeichert.&lt;br /&gt;
Und als 2. Element in dem Array ist nun die uns interessierende UID (&amp;lt;code&amp;gt;$Ereignisarray[1]&amp;lt;/code&amp;gt;) vorhanden, mit welcher wir weiter&lt;br /&gt;
arbeiten. Da auch mit dem Fall mehrerer gleichzeitiger Ereignisse umgegangen werden können soll, müssen wir bei mehreren&lt;br /&gt;
UIDs diese wieder splitten. Diesmal beim Vorkommen des Semikolons als Trennzeichen (&amp;lt;code&amp;gt;split(/;/,$Ereignisteil1)&amp;lt;/code&amp;gt;). Auch die&lt;br /&gt;
UIDs werden wieder in einem Array gespeichert und dann mittels der foreach-Schleife nacheinander abgearbeitet. Und&lt;br /&gt;
hierbei wird abhängig von der mittels UID abgerufenen Kalenderbeschreibung (&amp;lt;code&amp;gt;fhem(&amp;quot;get Kalender_Christian summary&lt;br /&gt;
uid=$uid 1&amp;quot;)&amp;lt;/code&amp;gt;) ein Vergleich auf die Werte &amp;quot;Besuch&amp;quot; oder &amp;quot;Urlaub&amp;quot; durchgeführt (&amp;lt;code&amp;gt;if ($Kalendertext =~ /Urlaub/)&amp;lt;/code&amp;gt;) und davon&lt;br /&gt;
abhängig der Dummy-Status gesetzt.&lt;br /&gt;
Abhängig von diesen Dummies reagiert dann meine Rollosteuerung.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Crissiloop</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Google-Kalender_zur_Steuerung_von_Dummies&amp;diff=15037</id>
		<title>Google-Kalender zur Steuerung von Dummies</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Google-Kalender_zur_Steuerung_von_Dummies&amp;diff=15037"/>
		<updated>2016-04-10T16:14:08Z</updated>

		<summary type="html">&lt;p&gt;Crissiloop: Änderung 15036 von Crissiloop (Diskussion) rückgängig gemacht.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mit dem Kalendermodul [http://fhem.de/commandref.html Calendar] ist es möglich, Ereignisse aus Kalendern im&lt;br /&gt;
ICal-Format abzufragen.&lt;br /&gt;
Dies und der Wiki-Eintrag [[Wochenende, Feiertage und Schulferien]] hat mich dazu veranlasst, dass ich durch&lt;br /&gt;
Kalendereinträge im Google-Kalender den Status meiner beiden [[dummy|Dummies]] &amp;quot;Urlaub&amp;quot; und &amp;quot;Besuch&amp;quot; steuere. Durch diese&lt;br /&gt;
beiden Dummies werden zum Beispiel die Rolläden im Schlafzimmer oder Gästezimmer bei Besuch oder Urlaub anders&lt;br /&gt;
gesteuert als ohne Besuch oder unter der Woche. Auch meine Zirkulationspumpe soll so bedarfsgerecht gesteuert werden.&lt;br /&gt;
Dass am Wochenende anders gesteuert wird, ist ja mit $we kein Problem.&lt;br /&gt;
Zuerst wird dafür der Kalender definiert:&lt;br /&gt;
&lt;br /&gt;
 define Kalender_Christian Calendar ical url &amp;lt;der richtige Kalenderlink&amp;gt; 14400&lt;br /&gt;
&lt;br /&gt;
Den Kalenderlink [https://support.google.com/calendar/answer/37103?hl=de] findet man wie beschrieben heraus.&lt;br /&gt;
Dann habe ich meine Dummies definiert:&lt;br /&gt;
&lt;br /&gt;
 define Urlaub_dummy dummy&lt;br /&gt;
 attr Urlaub_dummy room Kalender&lt;br /&gt;
 attr Urlaub_dummy setList ja nein&lt;br /&gt;
 attr Urlaub_dummy webCmd ja:nein&lt;br /&gt;
 define Gast_dummy dummy&lt;br /&gt;
 attr Gast_dummy room Kalender&lt;br /&gt;
 attr Gast_dummy setList ja nein&lt;br /&gt;
 attr Gast_dummy webCmd ja:nein&lt;br /&gt;
&lt;br /&gt;
Und nun mussten die Notifys definiert werden, um bei entsprechenden Einträgen im Google-Kalender den Status der&lt;br /&gt;
Dummies zu setzen.&lt;br /&gt;
&lt;br /&gt;
 define Kalender_Christian_Start notify Kalender_Christian:modeStarted.*googlecom.* {\&lt;br /&gt;
 Kalenderstart(&amp;quot;$EVENT&amp;quot;);;\&lt;br /&gt;
 }&lt;br /&gt;
 define Kalender_Christian_Ende notify Kalender_Christian:modeEnded.*googlecom.* {\&lt;br /&gt;
 Kalenderende(&amp;quot;$EVENT&amp;quot;);;\&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Um nicht für verschiedene Dummies immer einzelne Notifys zu bauen, wird hier bei mir je eine Funktion aus meiner [[99 myUtils anlegen|99_MyUtils.pm]] aufgerufen und das Event als Parameter übergeben. Die beiden zugehörigen&lt;br /&gt;
Funktionen für den Start und das Ende des Kalenderevents schauen so aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub&lt;br /&gt;
Kalenderstart ($)&lt;br /&gt;
{&lt;br /&gt;
	my ($Ereignis) = @_;&lt;br /&gt;
	my @Ereignisarray = split(/.*:\s/,$Ereignis);&lt;br /&gt;
	my $Ereignisteil1 = $Ereignisarray[1];&lt;br /&gt;
	my @uids = split(/;/,$Ereignisteil1);&lt;br /&gt;
	foreach my $uid (@uids) {&lt;br /&gt;
		my $Kalendertext = fhem(&amp;quot;get Kalender_Christian summary uid=$uid 1&amp;quot;);&lt;br /&gt;
		if ($Kalendertext =~ /Urlaub/) {&lt;br /&gt;
			fhem(&amp;quot;set Urlaub_dummy ja&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if ($Kalendertext =~ /Besuch/) {&lt;br /&gt;
			fhem(&amp;quot;set Gast_dummy ja&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
sub Kalenderende ($) {&lt;br /&gt;
	my ($Ereignis) = @_;&lt;br /&gt;
	my @Ereignisarray = split(/.*:\s/,$Ereignis);&lt;br /&gt;
	my $Ereignisteil1 = $Ereignisarray[1];&lt;br /&gt;
	my @uids = split(/;/,$Ereignisteil1);&lt;br /&gt;
	foreach my $uid (@uids) {&lt;br /&gt;
		my $Kalendertext = fhem(&amp;quot;get Kalender_Christian summary uid=$uid 1&amp;quot;);&lt;br /&gt;
		if ($Kalendertext =~ /Urlaub/) {&lt;br /&gt;
			fhem(&amp;quot;set Urlaub_dummy nein&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if ($Kalendertext =~ /Besuch/) {&lt;br /&gt;
			fhem(&amp;quot;set Gast_dummy nein&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Erläuterung: Als Ereignis wird z.B. &amp;quot;&#039;&#039;modeStarted: 9aas2amo7td47th4sf7mlocl48googlecom&#039;&#039;&amp;quot; oder bei 2 gleichzeitigen&lt;br /&gt;
Ereignissen: &amp;quot;&#039;&#039;modeStarted: arqpe2a2snu6qn64dt0men7nd0googlecom;j0pjiupfb1sk3m5s64hbeo6880googlecom&#039;&#039;&amp;quot;&lt;br /&gt;
übergeben. Da uns aber nur die eindeutige UID interessiert, wird das Ereignis beim Vorkommen der Zeichen &amp;quot;: Leerzeichen&amp;quot;&lt;br /&gt;
also nach modeStarted: geteilt (&amp;lt;code&amp;gt;split(/.*:\s/,$Ereignis)&amp;lt;/code&amp;gt;). Die beiden Teile werden in ein Array (&amp;lt;code&amp;gt;@Ereignisarray&amp;lt;/code&amp;gt;) gespeichert.&lt;br /&gt;
Und als 2. Element in dem Array ist nun die uns interessierende UID (&amp;lt;code&amp;gt;$Ereignisarray[1]&amp;lt;/code&amp;gt;) vorhanden, mit welcher wir weiter&lt;br /&gt;
arbeiten. Da auch mit dem Fall mehrerer gleichzeitiger Ereignisse umgegangen werden können soll, müssen wir bei mehreren&lt;br /&gt;
UIDs diese wieder splitten. Diesmal beim Vorkommen des Semikolons als Trennzeichen (&amp;lt;code&amp;gt;split(/;/,$Ereignisteil1)&amp;lt;/code&amp;gt;). Auch die&lt;br /&gt;
UIDs werden wieder in einem Array gespeichert und dann mittels der foreach-Schleife nacheinander abgearbeitet. Und&lt;br /&gt;
hierbei wird abhängig von der mittels UID abgerufenen Kalenderbeschreibung (&amp;lt;code&amp;gt;fhem(&amp;quot;get Kalender_Christian summary&lt;br /&gt;
uid=$uid 1&amp;quot;)&amp;lt;/code&amp;gt;) ein Vergleich auf die Werte &amp;quot;Besuch&amp;quot; oder &amp;quot;Urlaub&amp;quot; durchgeführt (&amp;lt;code&amp;gt;if ($Kalendertext =~ /Urlaub/)&amp;lt;/code&amp;gt;) und davon&lt;br /&gt;
abhängig der Dummy-Status gesetzt.&lt;br /&gt;
Abhängig von diesen Dummies reagiert dann meine Rollosteuerung.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Crissiloop</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Google-Kalender_zur_Steuerung_von_Dummies&amp;diff=15036</id>
		<title>Google-Kalender zur Steuerung von Dummies</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Google-Kalender_zur_Steuerung_von_Dummies&amp;diff=15036"/>
		<updated>2016-04-10T16:08:42Z</updated>

		<summary type="html">&lt;p&gt;Crissiloop: Anpassung an neue Version des Calendar-Moduls; Funktion getestet und funktioniert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mit dem Kalendermodul [http://fhem.de/commandref.html Calendar] ist es möglich, Ereignisse aus Kalendern im&lt;br /&gt;
ICal-Format abzufragen.&lt;br /&gt;
Dies und der Wiki-Eintrag [[Wochenende, Feiertage und Schulferien]] hat mich dazu veranlasst, dass ich durch&lt;br /&gt;
Kalendereinträge im Google-Kalender den Status meiner beiden [[dummy|Dummies]] &amp;quot;Urlaub&amp;quot; und &amp;quot;Besuch&amp;quot; steuere. Durch diese&lt;br /&gt;
beiden Dummies werden zum Beispiel die Rolläden im Schlafzimmer oder Gästezimmer bei Besuch oder Urlaub anders&lt;br /&gt;
gesteuert als ohne Besuch oder unter der Woche. Auch meine Zirkulationspumpe soll so bedarfsgerecht gesteuert werden.&lt;br /&gt;
Dass am Wochenende anders gesteuert wird, ist ja mit $we kein Problem.&lt;br /&gt;
Zuerst wird dafür der Kalender definiert:&lt;br /&gt;
&lt;br /&gt;
 define Kalender_Christian Calendar ical url &amp;lt;der richtige Kalenderlink&amp;gt; 14400&lt;br /&gt;
&lt;br /&gt;
Den Kalenderlink [https://support.google.com/calendar/answer/37103?hl=de] findet man wie beschrieben heraus.&lt;br /&gt;
Dann habe ich meine Dummies definiert:&lt;br /&gt;
&lt;br /&gt;
 define Urlaub_dummy dummy&lt;br /&gt;
 attr Urlaub_dummy room Kalender&lt;br /&gt;
 attr Urlaub_dummy setList ja nein&lt;br /&gt;
 attr Urlaub_dummy webCmd ja:nein&lt;br /&gt;
 define Gast_dummy dummy&lt;br /&gt;
 attr Gast_dummy room Kalender&lt;br /&gt;
 attr Gast_dummy setList ja nein&lt;br /&gt;
 attr Gast_dummy webCmd ja:nein&lt;br /&gt;
&lt;br /&gt;
Und nun mussten die Notifys definiert werden, um bei entsprechenden Einträgen im Google-Kalender den Status der&lt;br /&gt;
Dummies zu setzen.&lt;br /&gt;
&lt;br /&gt;
 define Kalender_Christian_Start notify Kalender_Christian:start:.*googlecom.* {\&lt;br /&gt;
 Kalenderstart(&amp;quot;$EVENT&amp;quot;);;\&lt;br /&gt;
 }&lt;br /&gt;
 define Kalender_Christian_Ende notify Kalender_Christian:end:.*googlecom.* {\&lt;br /&gt;
 Kalenderende(&amp;quot;$EVENT&amp;quot;);;\&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Um nicht für verschiedene Dummies immer einzelne Notifys zu bauen, wird hier bei mir je eine Funktion aus meiner [[99 myUtils anlegen|99_MyUtils.pm]] aufgerufen und das Event als Parameter übergeben. Die beiden zugehörigen&lt;br /&gt;
Funktionen für den Start und das Ende des Kalenderevents schauen so aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub&lt;br /&gt;
Kalenderstart ($)&lt;br /&gt;
{&lt;br /&gt;
	my ($Ereignis) = @_;&lt;br /&gt;
	my @Ereignisarray = split(/.*:\s/,$Ereignis);&lt;br /&gt;
	my $Ereignisteil1 = $Ereignisarray[1];&lt;br /&gt;
	my @uids = split(/;/,$Ereignisteil1);&lt;br /&gt;
	foreach my $uid (@uids) {&lt;br /&gt;
		my $Kalendertext = fhem(&amp;quot;get Kalender_Christian summary $uid&amp;quot;);&lt;br /&gt;
		if ($Kalendertext =~ /Urlaub/) {&lt;br /&gt;
			fhem(&amp;quot;set Urlaub_dummy ja&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if ($Kalendertext =~ /Besuch/) {&lt;br /&gt;
			fhem(&amp;quot;set Gast_dummy ja&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
sub Kalenderende ($) {&lt;br /&gt;
	my ($Ereignis) = @_;&lt;br /&gt;
	my @Ereignisarray = split(/.*:\s/,$Ereignis);&lt;br /&gt;
	my $Ereignisteil1 = $Ereignisarray[1];&lt;br /&gt;
	my @uids = split(/;/,$Ereignisteil1);&lt;br /&gt;
	foreach my $uid (@uids) {&lt;br /&gt;
		my $Kalendertext = fhem(&amp;quot;get Kalender_Christian summary $uid&amp;quot;);&lt;br /&gt;
		if ($Kalendertext =~ /Urlaub/) {&lt;br /&gt;
			fhem(&amp;quot;set Urlaub_dummy nein&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if ($Kalendertext =~ /Besuch/) {&lt;br /&gt;
			fhem(&amp;quot;set Gast_dummy nein&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Erläuterung: Als Ereignis wird z.B. &amp;quot;&#039;&#039;modeStarted: 9aas2amo7td47th4sf7mlocl48googlecom&#039;&#039;&amp;quot; oder bei 2 gleichzeitigen&lt;br /&gt;
Ereignissen: &amp;quot;&#039;&#039;modeStarted: arqpe2a2snu6qn64dt0men7nd0googlecom;j0pjiupfb1sk3m5s64hbeo6880googlecom&#039;&#039;&amp;quot;&lt;br /&gt;
übergeben. Da uns aber nur die eindeutige UID interessiert, wird das Ereignis beim Vorkommen der Zeichen &amp;quot;: Leerzeichen&amp;quot;&lt;br /&gt;
also nach modeStarted: geteilt (&amp;lt;code&amp;gt;split(/.*:\s/,$Ereignis)&amp;lt;/code&amp;gt;). Die beiden Teile werden in ein Array (&amp;lt;code&amp;gt;@Ereignisarray&amp;lt;/code&amp;gt;) gespeichert.&lt;br /&gt;
Und als 2. Element in dem Array ist nun die uns interessierende UID (&amp;lt;code&amp;gt;$Ereignisarray[1]&amp;lt;/code&amp;gt;) vorhanden, mit welcher wir weiter&lt;br /&gt;
arbeiten. Da auch mit dem Fall mehrerer gleichzeitiger Ereignisse umgegangen werden können soll, müssen wir bei mehreren&lt;br /&gt;
UIDs diese wieder splitten. Diesmal beim Vorkommen des Semikolons als Trennzeichen (&amp;lt;code&amp;gt;split(/;/,$Ereignisteil1)&amp;lt;/code&amp;gt;). Auch die&lt;br /&gt;
UIDs werden wieder in einem Array gespeichert und dann mittels der foreach-Schleife nacheinander abgearbeitet. Und&lt;br /&gt;
hierbei wird abhängig von der mittels UID abgerufenen Kalenderbeschreibung (&amp;lt;code&amp;gt;fhem(&amp;quot;get Kalender_Christian summary&lt;br /&gt;
uid=$uid 1&amp;quot;)&amp;lt;/code&amp;gt;) ein Vergleich auf die Werte &amp;quot;Besuch&amp;quot; oder &amp;quot;Urlaub&amp;quot; durchgeführt (&amp;lt;code&amp;gt;if ($Kalendertext =~ /Urlaub/)&amp;lt;/code&amp;gt;) und davon&lt;br /&gt;
abhängig der Dummy-Status gesetzt.&lt;br /&gt;
Abhängig von diesen Dummies reagiert dann meine Rollosteuerung.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Crissiloop</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-SEC-SD_Rauchmelder&amp;diff=4968</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=4968"/>
		<updated>2014-02-16T14:55:44Z</updated>

		<summary type="html">&lt;p&gt;Crissiloop: Variante mit virtuellen Teamlead hinzugefügt&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 die AES authentifizierte Kommunikation. Allerdings ist die Steuerung bei aktivierter [[AES Encryption]] nur zusammen mit dem [[HMLAN Konfigurator]] möglich. Der normale Betrieb, also das Melden von Rauchalarm, ist aber natürlich auch über [[CUL]] möglich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Druck auf die Prüftaste führt zu keiner Funkmeldung. &lt;br /&gt;
Ein Test des Alarms kann über den Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set EurerTeamlead alarmOn&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
am Teamlead erreicht werden und mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set EurerTeamlead alarmOff&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wieder deaktiviert werden.&lt;br /&gt;
Per&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set EurerTeamlead teamCall&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kann die Funkvernetzung der Rauchmelder getestet werden. Alle Rauchmelder sollten 10 mal leise piepen.&lt;br /&gt;
&lt;br /&gt;
An den einzelnen Rauchmelder kann als Befehl nur &amp;quot;statusRequest&amp;quot; ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Das Pairing sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden. Es gibt bei den Rauchmeldern 2 Varianten betreffend des Pairings und des Peerings:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Variante 1: einer der Rauchmelder fungiert als Teamlead ===&lt;br /&gt;
&lt;br /&gt;
Hier sind zunächst die Rauchmelder laut der Homematic-Anleitung untereinander zu vernetzen - ein Rauchmelder in der Gruppe (der erste, bei dem die Anlerntaste gedrückt wurde) fungiert dabei als &amp;quot;Teamlead&amp;quot; und wird in dem Attribut peerIDs gelistet. Achtung: Ein manuelles An- und Abschalten des Alarms ist immer nur für den Master möglich, dieser steuert dann seine Slaves an.&lt;br /&gt;
&lt;br /&gt;
Beispiel für die Konfiguration einer Dreiergruppe, bei welcher TH.SD0 der Master ist:&lt;br /&gt;
&lt;br /&gt;
ssssss, tttttt, uuuuuu -&amp;amp;gt; 6-stellige hexadezimale Seriennummern. (Siehe Logfile: CUL_HM Unknown device CUL_HM_SD_ssssss, please define it)&lt;br /&gt;
&lt;br /&gt;
xxxxxxx, yyyyyyy, zzzzzzz -&amp;amp;gt; 10-stellige Seriennummern (vom Aufkleber auf dem Gerät)&lt;br /&gt;
&lt;br /&gt;
 define TH.SD0 CUL_HM ssssss&lt;br /&gt;
 attr TH.SD0 .devInfo 000100&lt;br /&gt;
 attr TH.SD0 .stc CD&lt;br /&gt;
 attr TH.SD0 actCycle 028:00&lt;br /&gt;
 attr TH.SD0 actStatus unknown&lt;br /&gt;
 attr TH.SD0 autoReadReg 4_reqStatus&lt;br /&gt;
 attr TH.SD0 expert 2_full&lt;br /&gt;
 attr TH.SD0 firmware 1.0&lt;br /&gt;
 attr TH.SD0 model HM-SEC-SD&lt;br /&gt;
 attr TH.SD0 msgRepeat 1&lt;br /&gt;
 attr TH.SD0 peerIDs 00000000,ssssss,&lt;br /&gt;
 attr TH.SD0 room Alarm&lt;br /&gt;
 attr TH.SD0 serialNr xxxxxxxxxx&lt;br /&gt;
 attr TH.SD0 subType smokeDetector&lt;br /&gt;
 attr TH.SD0 webCmd test:alarmOn:alarmOff&lt;br /&gt;
&lt;br /&gt;
 define TH.SD1 CUL_HM tttttt&lt;br /&gt;
 attr TH.SD1 .devInfo 000100&lt;br /&gt;
 attr TH.SD1 .stc CD&lt;br /&gt;
 attr TH.SD1 actCycle 028:00&lt;br /&gt;
 attr TH.SD1 actStatus unknown&lt;br /&gt;
 attr TH.SD1 autoReadReg 4_reqStatus&lt;br /&gt;
 attr TH.SD1 expert 2_full&lt;br /&gt;
 attr TH.SD1 firmware 1.0&lt;br /&gt;
 attr TH.SD1 model HM-SEC-SD&lt;br /&gt;
 attr TH.SD1 msgRepeat 1&lt;br /&gt;
 attr TH.SD1 peerIDs 00000000,ssssss,&lt;br /&gt;
 attr TH.SD1 room Alarm&lt;br /&gt;
 attr TH.SD1 serialNr yyyyyyyyyy&lt;br /&gt;
 attr TH.SD1 subType smokeDetector&lt;br /&gt;
 attr TH.SD1 webCmd test&lt;br /&gt;
&lt;br /&gt;
 define TH.SD2 CUL_HM uuuuuu&lt;br /&gt;
 attr TH.SD2 .devInfo 000100&lt;br /&gt;
 attr TH.SD2 .stc CD&lt;br /&gt;
 attr TH.SD2 actCycle 028:00&lt;br /&gt;
 attr TH.SD2 actStatus unknown&lt;br /&gt;
 attr TH.SD2 autoReadReg 4_reqStatus&lt;br /&gt;
 attr TH.SD2 expert 2_full&lt;br /&gt;
 attr TH.SD2 firmware 1.0&lt;br /&gt;
 attr TH.SD2 model HM-SEC-SD&lt;br /&gt;
 attr TH.SD2 msgRepeat 1&lt;br /&gt;
 attr TH.SD2 peerIDs 00000000,ssssss,&lt;br /&gt;
 attr TH.SD2 room Alarm&lt;br /&gt;
 attr TH.SD2 serialNr zzzzzzzzzz&lt;br /&gt;
 attr TH.SD2 subType smokeDetector&lt;br /&gt;
 attr TH.SD2 webCmd test&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Variante 2: ein virtueller Aktor fungiert als Teamlead ===&lt;br /&gt;
&lt;br /&gt;
Von Martin (betreut den Homematic-Teil in FHEM) wird die Variante mit dem virtuellen Teamlead bevorzugt.&lt;br /&gt;
Die Rauchmelder sind im Werkszustand und werden nicht laut der HM-Anleitung aneinander angelernt. Es erfolg zuerst das Pairen der Rauchmelder mit FHEM durch z.B.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set HMLAN1 hmPairForSec 60&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und drücken der Anlerntaste am Rauchmelder.&lt;br /&gt;
&lt;br /&gt;
Dann definiert Ihr einen virtuellen Aktor mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define TeamDev CUL_HM 111111&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Achtung: die HMID muss einmalig sein in Eurer Installation!)&lt;br /&gt;
Keine Attribute wie model oder subtype für den virtuellen Aktor manuell erfassen!&lt;br /&gt;
Dann müsst Ihr noch einen Kanal definieren, da das Peering nur mit Kanälen möglich ist. Durch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set TeamDev virtual 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird 1 Kanal angelegt, wenn Autocreate aktiviert ist. Sonst kann man diesen auch manuell mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;define Rauchmelder_Team CUL_HM 11111101&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
definieren. (Gleiche HMID wie der Aktor, da ja der Kanal zum Aktor gehört und zusätzlich 2 Ziffern für den Kanal).&lt;br /&gt;
Wurde der Kanal per Autocreate angelegt, würde ich diesen umbenennen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rename TeamDev_Btn_1 Rauchmelder_Team&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann jeden Rauchmelder mit dem virtuellen Teamlead (Kanal des virtuellen Aktors) peeren mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set Rauchmelder_Team peerChan 0 Rauchmelder_Flur single set&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Hierbei ist &amp;quot;Rauchmelder_Team&amp;quot; der Name des virtuellen Teamleads und &amp;quot;Rauchmelder_Flur&amp;quot; der Name des jeweiligen Rauchmelders.&lt;br /&gt;
&lt;br /&gt;
Dadurch sollte in jedem Rauchmelder der Name des virtuellen Teamleads in der peerList stehen und beim virtuellen Teamlead jeder Rauchmelder.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Mit dem folgenden Codefragment wird eine Warnungsmeldung an ein FHEM-Display (1-Wire OWXLCD) abgesetzt, sobald ein Rauchalarm anspricht. &lt;br /&gt;
Ferner wird der Wert des SD.D dummy auf &amp;quot;alarm&amp;quot; gesetzt. Durch Drücken der Taste TH.3x (die in der Beispielinstallation normalerweise das Treppenhauslicht schaltet) wird bei aktiviertem Alarm der Alarm abgeschaltet.&lt;br /&gt;
&lt;br /&gt;
 define SD.N notify TH.SD0:smoke-Alarm {\&lt;br /&gt;
    OWXLCD_SetLine($defs{&#039;WZ.LCD&#039;},0,&amp;quot;Rauchalarm !!&amp;quot;);;\&lt;br /&gt;
    fhem(&amp;quot;set SD.D alarm&amp;quot;)}&lt;br /&gt;
 attr SD.N room Alarm&lt;br /&gt;
&lt;br /&gt;
 define SD.D dummy&lt;br /&gt;
 attr SD.D room Alarm&lt;br /&gt;
&lt;br /&gt;
 define SD.O notify TH.3x:.* {\&lt;br /&gt;
    if( $value{&#039;SD.D&#039;} eq &amp;quot;alarm&amp;quot;){\&lt;br /&gt;
    fhem(&amp;quot;set TH.SD0 alarmOff&amp;quot;);;\&lt;br /&gt;
    fhem(&amp;quot;set SD.D no alarm&amp;quot;);;\&lt;br /&gt;
    OWXLCD_SetLine($defs{&#039;WZ.LCD&#039;},0,&amp;quot;&amp;quot;)}}&lt;br /&gt;
 attr SD.O room Alarm&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
Anleitung [http://www.eq-3.de/tl_files/eq3/pdf_produkte/HM-Sec-Key_UM_GE_eQ-3_081218.pdf] PDF&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;/div&gt;</summary>
		<author><name>Crissiloop</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:HM-SEC-SD_Rauchmelder&amp;diff=4964</id>
		<title>Diskussion:HM-SEC-SD Rauchmelder</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Diskussion:HM-SEC-SD_Rauchmelder&amp;diff=4964"/>
		<updated>2014-02-16T12:47:33Z</updated>

		<summary type="html">&lt;p&gt;Crissiloop: Thema AES&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hallo Pahenning,&lt;br /&gt;
aber das mit dem AES stimmt eben so nicht, denn die Rauchmelder können definitiv auch ohne AES betrieben werden. Dies wird so ja auch von mehreren Usern im Forum geschrieben. Und meine 3 SD´s waren sogar per Default ohne AES konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Gruß&lt;br /&gt;
&lt;br /&gt;
anbei ein List des SD´s, woraus zu sehen ist, das nirgends ein Sign zu sehen ist. Und dies müsste bei aktiviertem AES der Fall sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Readings:&lt;br /&gt;
2014-02-15 22:13:32   Activity        alive&lt;br /&gt;
2014-01-03 15:20:11   CommandAccepted yes&lt;br /&gt;
2014-02-15 16:49:38   D-firmware      1.0&lt;br /&gt;
2014-02-15 16:49:38   D-serialNr      XXX&lt;br /&gt;
2014-01-07 17:40:28   PairedTo        XXX&lt;br /&gt;
2014-01-07 17:40:28   R-pairCentral   XXX&lt;br /&gt;
2014-01-07 17:40:28   RegL_00:        XXX&lt;br /&gt;
2014-02-15 22:13:44   battery         ok&lt;br /&gt;
2014-02-15 22:13:44   level           1&lt;br /&gt;
2014-02-15 22:13:32   peerList        Rauchmelder_Team,&lt;br /&gt;
2014-02-15 22:13:44   recentStateType info&lt;br /&gt;
2014-01-03 18:29:58   smoke_detect    -&lt;br /&gt;
2014-02-15 22:13:44   state           off&lt;br /&gt;
2014-01-04 22:24:00   teamCall        from TeamDev:3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Crissiloop</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-SEC-SD_Rauchmelder&amp;diff=4706</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=4706"/>
		<updated>2014-01-29T18:17:23Z</updated>

		<summary type="html">&lt;p&gt;Crissiloop: Thema AES korrigiert&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 die AES authentifizierte Kommunikation. Allerdings ist die Steuerung bei aktiviertem AES nur zusammen mit dem [[HMLAN Konfigurator]] möglich. Der normale Betrieb, also das Melden von Rauchalarm, ist aber natürlich auch über [[CUL]] möglich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Pairing sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden. Dabei sind zunächst die Rauchmelder untereinander zu vernetzen - ein Rauchmelder in der Gruppe (der erste, bei dem die Anlerntaste gedrückt wurde) fungiert dabei als &amp;quot;Master&amp;quot; und wird in dem Attribut peerIDs gelistet. Achtung: Ein manuelles An- und Abschalten des Alarms ist immer nur für den Master möglich, dieser steuert dann seine Slaves an. Werden die Rauchmelder einzeln (ohne vorhergehende Vernetzung untereinander) gepaired, meldet jeder einzeln seinen Alarm, aber andere Melder bleiben stumm.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ein Druck auf die Prüftaste führt zu keinerlei(!) Meldung in Richtung FHEM!&#039;&#039;&#039; Man muss also wirklich Rauch erzeugen, um mit FHEM zu testen.&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
Beispiel für die Konfiguration einer Dreiergruppe, bei welcher TH.SD0 der Master ist:&lt;br /&gt;
&lt;br /&gt;
ssssss, tttttt, uuuuuu -&amp;amp;gt; 6-stellige hexadezimale Seriennummern. (Siehe Logfile: CUL_HM Unknown device CUL_HM_SD_ssssss, please define it)&lt;br /&gt;
&lt;br /&gt;
xxxxxxx, yyyyyyy, zzzzzzz -&amp;amp;gt; 10-stellige Seriennummern (vom Aufkleber auf dem Gerät)&lt;br /&gt;
&lt;br /&gt;
 define TH.SD0 CUL_HM ssssss&lt;br /&gt;
 attr TH.SD0 .devInfo 000100&lt;br /&gt;
 attr TH.SD0 .stc CD&lt;br /&gt;
 attr TH.SD0 actCycle 028:00&lt;br /&gt;
 attr TH.SD0 actStatus unknown&lt;br /&gt;
 attr TH.SD0 autoReadReg 4_reqStatus&lt;br /&gt;
 attr TH.SD0 expert 2_full&lt;br /&gt;
 attr TH.SD0 firmware 1.0&lt;br /&gt;
 attr TH.SD0 model HM-SEC-SD&lt;br /&gt;
 attr TH.SD0 msgRepeat 1&lt;br /&gt;
 attr TH.SD0 peerIDs 00000000,ssssss,&lt;br /&gt;
 attr TH.SD0 room Alarm&lt;br /&gt;
 attr TH.SD0 serialNr xxxxxxxxxx&lt;br /&gt;
 attr TH.SD0 subType smokeDetector&lt;br /&gt;
 attr TH.SD0 webCmd test:alarmOn:alarmOff&lt;br /&gt;
&lt;br /&gt;
 define TH.SD1 CUL_HM tttttt&lt;br /&gt;
 attr TH.SD1 .devInfo 000100&lt;br /&gt;
 attr TH.SD1 .stc CD&lt;br /&gt;
 attr TH.SD1 actCycle 028:00&lt;br /&gt;
 attr TH.SD1 actStatus unknown&lt;br /&gt;
 attr TH.SD1 autoReadReg 4_reqStatus&lt;br /&gt;
 attr TH.SD1 expert 2_full&lt;br /&gt;
 attr TH.SD1 firmware 1.0&lt;br /&gt;
 attr TH.SD1 model HM-SEC-SD&lt;br /&gt;
 attr TH.SD1 msgRepeat 1&lt;br /&gt;
 attr TH.SD1 peerIDs 00000000,ssssss,&lt;br /&gt;
 attr TH.SD1 room Alarm&lt;br /&gt;
 attr TH.SD1 serialNr yyyyyyyyyy&lt;br /&gt;
 attr TH.SD1 subType smokeDetector&lt;br /&gt;
 attr TH.SD1 webCmd test&lt;br /&gt;
&lt;br /&gt;
 define TH.SD2 CUL_HM uuuuuu&lt;br /&gt;
 attr TH.SD2 .devInfo 000100&lt;br /&gt;
 attr TH.SD2 .stc CD&lt;br /&gt;
 attr TH.SD2 actCycle 028:00&lt;br /&gt;
 attr TH.SD2 actStatus unknown&lt;br /&gt;
 attr TH.SD2 autoReadReg 4_reqStatus&lt;br /&gt;
 attr TH.SD2 expert 2_full&lt;br /&gt;
 attr TH.SD2 firmware 1.0&lt;br /&gt;
 attr TH.SD2 model HM-SEC-SD&lt;br /&gt;
 attr TH.SD2 msgRepeat 1&lt;br /&gt;
 attr TH.SD2 peerIDs 00000000,ssssss,&lt;br /&gt;
 attr TH.SD2 room Alarm&lt;br /&gt;
 attr TH.SD2 serialNr zzzzzzzzzz&lt;br /&gt;
 attr TH.SD2 subType smokeDetector&lt;br /&gt;
 attr TH.SD2 webCmd test&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Mit dem folgenden Codefragment wird eine Warnungsmeldung an ein FHEM-Display (1-Wire OWXLCD) abgesetzt, sobald ein Rauchalarm anspricht. &lt;br /&gt;
Ferner wird der Wert des SD.D dummy auf &amp;quot;alarm&amp;quot; gesetzt. Durch Drücken der Taste TH.3x (die in der Beispielinstallation normalerweise das Treppenhauslicht schaltet) wird bei aktiviertem Alarm der Alarm abgeschaltet.&lt;br /&gt;
&lt;br /&gt;
 define SD.N notify TH.SD0:smoke-Alarm {\&lt;br /&gt;
    OWXLCD_SetLine($defs{&#039;WZ.LCD&#039;},0,&amp;quot;Rauchalarm !!&amp;quot;);;\&lt;br /&gt;
    fhem(&amp;quot;set SD.D alarm&amp;quot;)}&lt;br /&gt;
 attr SD.N room Alarm&lt;br /&gt;
&lt;br /&gt;
 define SD.D dummy&lt;br /&gt;
 attr SD.D room Alarm&lt;br /&gt;
&lt;br /&gt;
 define SD.O notify TH.3x:.* {\&lt;br /&gt;
    if( $value{&#039;SD.D&#039;} eq &amp;quot;alarm&amp;quot;){\&lt;br /&gt;
    fhem(&amp;quot;set TH.SD0 alarmOff&amp;quot;);;\&lt;br /&gt;
    fhem(&amp;quot;set SD.D no alarm&amp;quot;);;\&lt;br /&gt;
    OWXLCD_SetLine($defs{&#039;WZ.LCD&#039;},0,&amp;quot;&amp;quot;)}}&lt;br /&gt;
 attr SD.O room Alarm&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
Anleitung [http://www.eq-3.de/tl_files/eq3/pdf_produkte/HM-Sec-Key_UM_GE_eQ-3_081218.pdf] PDF&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;/div&gt;</summary>
		<author><name>Crissiloop</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Wochenende,_Feiertage_und_Schulferien&amp;diff=1956</id>
		<title>Wochenende, Feiertage und Schulferien</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Wochenende,_Feiertage_und_Schulferien&amp;diff=1956"/>
		<updated>2013-05-14T20:03:33Z</updated>

		<summary type="html">&lt;p&gt;Crissiloop: Link auf Artikel zur Steuerung über den Google-Kalender hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FHEM bietet mehrere Möglichkeiten, Komponenten in Abhängigkeit von Wochenenden, Feiertagen oder sogar Schulferien zu steuern.&lt;br /&gt;
&lt;br /&gt;
Eine simple Rollladensteuerung um 7 Uhr morgens sieht beispielsweise wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define RolloHoch at *07:00 set Rollo hoch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Um am Wochenende (Samstag und Sonntag) länger schlafen zu können, kann diese Steuerung durch Nutzung der Variable &#039;&#039;$we&#039;&#039;erweitert werden. Diese hat am Wochenende den Wert &#039;&#039;1&#039;&#039;, an sonstigen Tagen den Wert &#039;&#039;0&#039;&#039;. In if-Abfragen wird die 0 als &#039;&#039;false/falsch&#039;&#039;interpretiert, andere numerische Werte als &#039;&#039;true/wahr&#039;&#039;. Man kann mittels &#039;&#039;if ($we)&#039;&#039;also ganz einfach prüfen, ob Wochenende ist und entsprechend steuern (oder auch nicht). Das o.a. Beispiel kann entsprechend ergänzt werden, so dass am Wochenende nicht um 7 Uhr das Rollo nach oben gefahren wird:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define RolloHoch at *07:00 { if (!($we)) { fhem(&amp;amp;quot;set Rollo hoch&amp;amp;quot;);; } }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das &#039;&#039;!&#039;&#039;in der if-Abfrage negiert den dahinter folgenden Ausdruck in der Klammer, quasi ein &amp;quot;ist nicht Wochenende&amp;quot;. Der Inhalt der äußeren geschweiften Klammern stellt echten Perl-Code dar (welche hinter jeder Anweisung gerne ein Semikolon stehen hat, welches in FHEM durch ein weiteres Semikolon [http://de.wikipedia.org/wiki/Maskierungszeichen maskiert/escaped] werden muss). Aus dem Perl-Code kann man mittels des Befehls &#039;&#039;fhem()&#039;&#039;wiederum FHEM-Code ausführen (hier der Befehl, um das Rollo nach oben zu fahren). Das (Doppel-)Semikolon ist in diesem Beispiel nicht zwingend notwendig, da es sich nur um eine einzige (und somit letzte) Anweisung handelt - man sollte sich jedoch aneignen, jede Anweisung im Perl-Code mit einem (Doppel-)Semikolon abzuschließen (eine schließende geschweifte Klammer stellt auch das Ende eine Anweisung bzw. eines Anweisungsblocks dar).&lt;br /&gt;
&lt;br /&gt;
Samstags und Sonntags bleibt das Rollo nun unten und man kann länger schlafen. Um diesen Komfort auch an Feiertagen zu haben, können in FHEM mittels &#039;&#039;holiday&#039;&#039;-Dateien Feiertage definiert werden. Sinnvollerweise erstellt man sich für sein jeweiliges Bundesland eine eigene Datei, welche Definitionen für feste Feiertage (z.B. Weihnachten oder der Tag der Deutschen Einheit) und solche in Abhängigkeit zu Ostern (z.B. Ostermontag oder Pfingsten, im Rheinland auch der Karneval) beinhaltet. Eine gutes Beispiel mit Erklärung findet sich in der [http://fhem.de/Heimautomatisierung-mit-fhem.pdf FHEM-Übersicht für Anfänger].&lt;br /&gt;
Nachdem beispielsweise die &#039;&#039;NRW_Feiertag.holiday&#039;&#039;Datei im FHEM-Ordner erstellt/abgelegt wurde, kann diese in die Konfiguration eingebunden werden. Mittels &#039;&#039;holiday2we&#039;&#039;können die darin definierten Feiertage mit der Variable &#039;&#039;$we&#039;&#039;&amp;quot;verheiratet&amp;quot; werden. &#039;&#039;if ($we)&#039;&#039;ist danach immer wahr, sobald Wochenende oder ein Feiertag ist:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;attr global holiday2we NRW_Feiertag&lt;br /&gt;
define NRW_Feiertag holiday&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Theoretisch kann man in o.a. Datei auch seine persönlichen Urlaube oder die Schulferien definieren. Hier eignet sich jedoch die &#039;&#039;Calendar&#039;&#039;-Funktion wesentlich besser. V.a. die Schulferien der einzelnen Bundesländer sind im Internet (z.B. unter [http://www.schulferien.org schulferien.org]) als iCal-Datei verfügbar und können wie folgt in FHEM eingebunden werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define NRW_Ferien Calendar ical url http://www.schulferien.org/iCal/Ferien/icals/Ferien_Nordrhein_Westfalen_2013.ics 43200&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Intervall von 43200 Sekunden (entspricht 12 Stunden) für die Aktualisierung der Schulferien sollte im Normalbetrieb mehr als ausreichen. Wenn eigene Kalender (z.B. bei Google) für Urlaubstage genutzt werden, muss man individuell abwägen, wie oft dieser aktualisiert werden soll.&lt;br /&gt;
&lt;br /&gt;
Um nun diesen Kalender nun nutzen zu können, benötigt FHEM einen &#039;&#039;dummy&#039;&#039;, welcher entsprechend abgefragt werden kann:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define NRW_Ferientag dummy&lt;br /&gt;
define NRW_Ferien.notify notify NRW_Ferien { \&lt;br /&gt;
 fhem &amp;amp;quot;set NRW_Ferientag &amp;amp;quot; . (ReadingsVal(&amp;amp;quot;NRW_Ferien&amp;amp;quot;, &amp;amp;quot;modeStart&amp;amp;quot;, &amp;amp;quot;&amp;amp;quot;) =~ &amp;amp;quot;schulferien&amp;amp;quot;&amp;amp;#160;? 1: 0) }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Der &#039;&#039;NRW_Ferientag&#039;&#039;ist in diesem Beispiel der angesprochene &#039;&#039;dummy&#039;&#039;und kann mittels &#039;&#039;Value(&amp;quot;NRW_Ferientag&amp;quot;)&#039;&#039;abgefragt werden. Im &#039;&#039;notify&#039;&#039;wird der Wert gesetzt, sobald der Kalender aktualisiert wird: Eine &#039;&#039;1&#039;&#039;für einen Tag, an dem der Text &amp;quot;schulferien&amp;quot; in einem Ereignis vorkommt, welches sich im &#039;&#039;modeStart&#039;&#039;Modus (vgl. [http://www.fhem.de/commandref.html#Calendar CommandRef] - &#039;&#039;The start time has passed but the end time of the calendar event is not yet reached.&#039;&#039;) befindet, ansonsten &#039;&#039;0&#039;&#039;. Das Vorkommen des Textes ist in den Ereignissen der oben genutzten Quelle immer der Fall.&lt;br /&gt;
&lt;br /&gt;
Um ein Rollo nun weder am Wochenende, an Feiertagen, noch zu Schulferien morgens hochfahren zu lassen, lautet das Beispiel:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define RolloHoch at *07:00 { if (&amp;amp;#160;!($we) &amp;amp;amp;&amp;amp;amp;&amp;amp;#160;!(Value(&amp;amp;quot;NRW_Ferientag&amp;amp;quot;)) ) { fhem(&amp;amp;quot;set Rollo hoch&amp;amp;quot;);; } }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausgehend von diesem Artikel habe ich unter [[Google-Kalender zur Steuerung von Dummies]] meine Vorgehensweise zur&lt;br /&gt;
Steuerung von FHEM mit dem Google-Kalender veröffentlicht.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Crissiloop</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Google-Kalender_zur_Steuerung_von_Dummies&amp;diff=1955</id>
		<title>Google-Kalender zur Steuerung von Dummies</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Google-Kalender_zur_Steuerung_von_Dummies&amp;diff=1955"/>
		<updated>2013-05-14T20:02:14Z</updated>

		<summary type="html">&lt;p&gt;Crissiloop: Steuerung von Dummys mit Google-Kalender über das Calendar-Modul&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mit dem Kalendermodul [http://fhem.de/commandref.html Calendar] ist es möglich, Ereignisse aus Kalendern im&lt;br /&gt;
ICal-Format abzufragen.&lt;br /&gt;
Dies und der Wiki-Eintrag [[Wochenende, Feiertage und Schulferien]] hat mich dazu veranlasst, dass ich durch&lt;br /&gt;
Kalendereinträge im Google-Kalender den Status meiner beiden Dummies &amp;quot;Urlaub&amp;quot; und &amp;quot;Besuch&amp;quot; steuere. Durch diese&lt;br /&gt;
beiden Dummies werden zum Beispiel die Rolläden im Schlafzimmer oder Gästezimmer bei Besuch oder Urlaub anders&lt;br /&gt;
gesteuert als ohne Besuch oder unter der Woche. Auch meine Zirkulationspumpe soll so bedarfsgerecht gesteuert werden.&lt;br /&gt;
Dass am Wochenende anders gesteuert wird, ist ja mit $we kein Problem.&lt;br /&gt;
Zuerst wird dafür der Kalender definiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;define Kalender_Christian Calendar ical url der richtige Kalenderlink 14400&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Kalenderlink [https://support.google.com/calendar/answer/37103?hl=de] findet man wie beschrieben heraus.&lt;br /&gt;
Dann habe ich meine Dummies definiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;define Urlaub_dummy dummy&lt;br /&gt;
attr Urlaub_dummy room Kalender&lt;br /&gt;
attr Urlaub_dummy setList ja nein&lt;br /&gt;
attr Urlaub_dummy webCmd ja:nein&lt;br /&gt;
define Gast_dummy dummy&lt;br /&gt;
attr Gast_dummy room Kalender&lt;br /&gt;
attr Gast_dummy setList ja nein&lt;br /&gt;
attr Gast_dummy webCmd ja:nein&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und nun mussten die Notifys definiert werden, um bei entsprechenden Einträgen im Google-Kalender den Status der&lt;br /&gt;
Dummies zu setzen.&lt;br /&gt;
&amp;lt;pre&amp;gt;define Kalender_Christian_Start notify Kalender_Christian:modeStarted.*googlecom.* {\&lt;br /&gt;
Kalenderstart(&amp;quot;$EVENT&amp;quot;);;\&lt;br /&gt;
}&lt;br /&gt;
define Kalender_Christian_Ende notify Kalender_Christian:modeEnded.*googlecom.* { Kalenderende(&amp;quot;$EVENT&amp;quot;);;\&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um nicht für verschiedene Dummies immer einzelne Notifys zu bauen, wird hier bei mir je eine Funktion aus meiner&lt;br /&gt;
99_MyUtils.pm [[99 myUtils anlegen]] aufgerufen und das Event als Parameter übergeben. Die beiden zugehörigen&lt;br /&gt;
Funktionen für den Start und das Ende des Kalenderevents schauen so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;sub&lt;br /&gt;
Kalenderstart ($)&lt;br /&gt;
{&lt;br /&gt;
my ($Ereignis) = @_;&lt;br /&gt;
my @Ereignisarray = split(/.*:\s/,$Ereignis);&lt;br /&gt;
my $Ereignisteil1 = $Ereignisarray[1];&lt;br /&gt;
my @uids=split(/;/,$Ereignisteil1);&lt;br /&gt;
foreach my $uid (@uids) {&lt;br /&gt;
my $Kalendertext = fhem(&amp;quot;get Kalender_Christian summary $uid&amp;quot;);&lt;br /&gt;
if ($Kalendertext =~ /Urlaub/) {&lt;br /&gt;
fhem(&amp;quot;set Urlaub_dummy ja&amp;quot;);&lt;br /&gt;
};&lt;br /&gt;
if ($Kalendertext =~ /Besuch/) {&lt;br /&gt;
fhem(&amp;quot;set Gast_dummy ja&amp;quot;);&lt;br /&gt;
};&lt;br /&gt;
};&lt;br /&gt;
}&lt;br /&gt;
sub Kalenderende ($) {&lt;br /&gt;
my ($Ereignis) = @_;&lt;br /&gt;
my @Ereignisarray = split(/.*:\s/,$Ereignis);&lt;br /&gt;
my $Ereignisteil1 = $Ereignisarray[1];&lt;br /&gt;
my @uids=split(/;/,$Ereignisteil1);&lt;br /&gt;
foreach my $uid (@uids) {&lt;br /&gt;
my $Kalendertext = fhem(&amp;quot;get Kalender_Christian summary $uid&amp;quot;);&lt;br /&gt;
if ($Kalendertext =~ /Urlaub/) {&lt;br /&gt;
fhem(&amp;quot;set Urlaub_dummy nein&amp;quot;);&lt;br /&gt;
};&lt;br /&gt;
if ($Kalendertext =~ /Besuch/) {&lt;br /&gt;
fhem(&amp;quot;set Gast_dummy nein&amp;quot;);&lt;br /&gt;
};&lt;br /&gt;
};&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Erläuterung: Als Ereignis wird z.B. &amp;quot;&#039;&#039;modeStarted: 9aas2amo7td47th4sf7mlocl48googlecom&#039;&#039;&amp;quot; oder bei 2 gleichzeitigen&lt;br /&gt;
Ereignissen: &amp;quot;&#039;&#039;modeStarted: arqpe2a2snu6qn64dt0men7nd0googlecom;j0pjiupfb1sk3m5s64hbeo6880googlecom&#039;&#039;&amp;quot;&lt;br /&gt;
übergeben. Da uns aber nur die eindeutige UID interessiert, wird das Ergeinis beim Vorkommen der Zeichen &amp;quot;: Leerzeichen&amp;quot;&lt;br /&gt;
also nach modeStarted: geteilt (&#039;&#039;split(/.*:\s/,$Ereignis&#039;&#039;)). Die beiden Teile werden in ein Array (@Ereignisarray) gespeichert.&lt;br /&gt;
Und als 2. Element in dem Array ist nun die uns interessierende UID ($Ereignisarray[1]) vorhanden, mit welcher wir weiter&lt;br /&gt;
arbeiten. Da auch mit dem Fall mehrerer gleichzeitiger Ereignisse umgegangen werden können soll, müssen wir bei mehreren&lt;br /&gt;
UID´s diese wieder splitten. Diesmal beim Vorkommen des Semikolons als Trennzeichen (&#039;&#039;split(/;/,$Ereignisteil1&#039;&#039;)). Auch die&lt;br /&gt;
UID´s werden wieder in einem Array gespeichert und dann mittels der foreach-Schleife nacheinander abgearbeitet. Und&lt;br /&gt;
hierbei wird abhängig von der mittels UID abgerufenen Kalenderbeschreibung (&#039;&#039;fhem(&amp;quot;get Kalender_Christian summary&lt;br /&gt;
$uid&#039;&#039;&amp;quot;)) ein Vergleich auf die Werte &amp;quot;Besuch&amp;quot; oder &amp;quot;Urlaub&amp;quot; durchgeführt (&#039;&#039;if ($Kalendertext =~ /Urlaub/&#039;&#039;)) und davon&lt;br /&gt;
abhängig der Dummy-Status gesetzt.&lt;br /&gt;
Abhängig von diesen Dummies reagiert dann meine Rollosteuerung.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Crissiloop</name></author>
	</entry>
</feed>