<?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=Uli</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=Uli"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Uli"/>
	<updated>2026-04-30T15:37:57Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:Erste_Schritte_in_FHEM&amp;diff=20522</id>
		<title>Diskussion:Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Diskussion:Erste_Schritte_in_FHEM&amp;diff=20522"/>
		<updated>2017-03-04T13:18:39Z</updated>

		<summary type="html">&lt;p&gt;Uli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Die Sache mit dem doppelten Semikolon ==&lt;br /&gt;
&lt;br /&gt;
Gerade für den Anfänger an den sich dieses Dokument richtet, wäre es sehr wichtig zu verstehen, warum das Semikolon verdoppelt werden muss und was damit geschieht (&#039;&#039;es wird nur einfach in DEF gespeichert&#039;&#039;). Das wird hier nur anhand des daraus resultierenden Symptoms erklärt: &amp;quot;Sofort ausführen oder später&amp;quot;. Aber das warum wäre m.E. gerade hier für das Verständnis beim Einstieg wichtig. Ansonsten ist es auch schwer nachzuvollziehen, warum man den gleichen Befehl den &amp;lt;code&amp;gt;notify&amp;lt;/code&amp;gt; ausführen soll auf der Kommandozeile mit verdoppeltem Semikolon und beim editieren des Internals DEF dann wieder ohne Verdoppelung schreiben muss. Drei Überlegungen dazu:&lt;br /&gt;
# Könnte man das Beispiel mit der Verdoppelung noch um das Editieren des Internals DEF erweitern und dabei genau das erläutern. Ohne diese Erkenntnis ist die Tücke dieses Konstrukts schwer verständlich und der Anfänger wundert sich warum seine Lampe auf den Status &amp;lt;code&amp;gt;on; define a1 at +00:01 set myLampe1,myLampe2 off&amp;lt;/code&amp;gt; o.Ä. gesetzt wird.&lt;br /&gt;
# Gibt es überhaupt sinnvolle Fälle, in denen ein verdoppeltes Semikolon im DEF benötigt wird. Spätestens bei dem hier benötigten vierfach Semikolon sollte man wissen was damit wann geschieht.&lt;br /&gt;
# Gibt es sinnvolle Zustände die ein Semikolon enthalten? Wäre da eine Warnung möglich?&lt;br /&gt;
Viele Grüße --[[Benutzer:MGu|MGu]] ([[Benutzer Diskussion:MGu|Diskussion]]) 18:10, 17. Apr. 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Falsche und indirekte negative Darstellung von notify/at im Vergleich zu DOIF ==&lt;br /&gt;
&lt;br /&gt;
Hallo!&lt;br /&gt;
&lt;br /&gt;
Die bewertende Aussage &amp;quot;Bei der Kombination von Ereignis (Bewegungsmelder meldet eine Bewegung) und Zeitangaben werden die stärken des DOIF deutlich. Es ist nur eine Definition (Gerät) notwendig. Wollte man dies durch die Verwendung von at und notify lösen, wären mehrere Definitionen notwendig oder ausreichende Perl-Kenntnisse.&amp;quot; insbesondere im Zusammenhang mit dem Beispiel halte ich für falsch und bringt Einsteiger auf eine vollkommen falsche Spur/Sichtweise. &lt;br /&gt;
&lt;br /&gt;
Die nur zeitweise Ausführung eines notify bzw. at erreicht man durch Setzen des Attributes &amp;lt;code&amp;gt;disabledForIntervals&amp;lt;/code&amp;gt;. Damit muss man für die Umsetzung des Beispiels beim notify nur das passende Zeitintervall im genannten Attribut setzen. Es sind keine weiteren Definitionen notwendig.&lt;br /&gt;
&lt;br /&gt;
Wenn der DOIF-Abschnitt erhalten bleiben soll und meine Aussage richtig ist, dann bitte ich um kurzfristige Entfernung der Wertung und auch Darstellung der Lösung des erweiterten Beispiels mit einem notify und dem Attribut disabledForIntervals. Das Wiki sollte nach Möglichkeit eine neutrale Sichtweise vermitteln, wenn es nicht eindeutige Vor- oder Nachteile gibt, die ich hier nicht erkenne.&lt;br /&gt;
&lt;br /&gt;
Da es sich um einen wichtigen Artikel handelt, werde ich spätestens morgen selbst Änderungen vornehmen, um nicht Einsteigern falsche Sichtweisen zu vermitteln.&lt;br /&gt;
&lt;br /&gt;
Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 09:43, 12. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
:Bin auch für &amp;quot;rückgängig machen&amp;quot;, insbesondere auch, da diese Seite auf dem Einsteigerdokument von Uli Maass basiert und nur mit seinem Einverständnis ins Wiki übernommen wurde. Darüber hinaus ist die DOIF-Ergänzung sicherlich als redaktionelle Erweiterung anzusehen und allein aus diesem Gesichtspunkt schon mit Uli abzustimmen. --[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 09:20, 13. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
::Jep, war auch mein erster Gedanke --[[Benutzer:Drhirn|Drhirn]] ([[Benutzer Diskussion:Drhirn|Diskussion]]) 09:27, 13. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:::Habe die Änderungen komplett zurückgesetzt.&lt;br /&gt;
:::Begründung:&lt;br /&gt;
:::* die vergleichenden Aussagen sind falsch&lt;br /&gt;
:::* ein Einverständnis der redaktionellen Änderung liegt afaik nicht vor und die Änderung wurde hier nicht vorab diskutiert. (den Hinweis darauf im Vorspann des Artikels hatte ich zuvor übersehen)&lt;br /&gt;
:::Wiedereinbau ist nach Abstimmung mit Uli und mit korrekter Darstellung nach Review grundsätzlich möglich. Dazu Änderungsvorschläge hier auf der Diskussionsseite einstellen.&lt;br /&gt;
:::--[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 09:48, 13. Feb. 2017 (CET)&lt;br /&gt;
Ist der Abstimmungsvorbehalt nicht unzulässig? Oder gilt der Hinweis über dem Speichern-Button nicht für Alle Wiki-Benutzer &amp;quot;Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann klicke nicht auf „Seite speichern“.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Die vergleichenden Passagen werde ich ändern.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 12:10, 13. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:Hmm, diese Seite ist einfach ein Sonderfall. Uli Maas hat da ursprünglich ein PDF-Dokument erstellt, das lange als Einstiegslektüre zu FHEM gehandelt wurde. Ich habe nur damals nach Rücksprache mit ihm die Erlaubnis bekommen, das PDF ins Wiki zu übernehmen. Die &amp;quot;Rechte&amp;quot; liegen aber sozusagen immer noch bei Uli. Deswegen habe ich das extra in der Einleitung erwähnt. Sowie auch diesen Punkt: &amp;quot;Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&amp;quot;&lt;br /&gt;
:Wie gesagt, ein Sonderfall. Bitte nicht persönlich nehmen.&lt;br /&gt;
:--[[Benutzer:Drhirn|Drhirn]] ([[Benutzer Diskussion:Drhirn|Diskussion]]) 12:52, 13. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:&lt;br /&gt;
:Hallo!&lt;br /&gt;
:Abstimmungsvorbehalt liest sich hart :-) . Es ist eine Bitte, die Du wahrscheinlich übersehen hast, und die in diesem Fall (Artikel) ihre Begründung hat. Das ist ein wichtiger Grundlagenartikel der überall verlinkt wird und darum richtig und objektiv sein soll. Der Inhalt wurde zuvor von mehreren Personen reviewed. Änderungen sollten daher vorher abgesprochen und besprochen werden, damit sie auch richtig sind.&lt;br /&gt;
:Hätte ich den Artikel nicht auf der oberen Beobachtungsprioriät, wäre vielleicht falsches Wissen verbreitet worden und das ist für niemanden sinnvoll. Genau darum habe ich auch die schnelle Reaktion angekündigt und umgesetzt.&lt;br /&gt;
:Das Problem der Änderung durch jedermann ist auch ein Aspekt, warum das Einsteiger-PDF nicht im Wiki steht.&lt;br /&gt;
:Ich persönlich denke, dass man gewisse Bitten respektieren sollte. Genauso habe ich damals Damians Bitte respektiert, dass im Wiki die Anwendungsbeispiele zu [[DOIF]] entfernt werden und das umgesetzt. Er stand DOIF-Artikeln im Wiki insgesamt kritisch gegenüber. Deine Artikel zu DOIF wurden auch intern beratschlagt, ob sie im Sinne von Damian &amp;quot;zulässig&amp;quot; sind. Angesichts der sehr guten Qualität und auch Eurer engen Zusammenarbeit bei der Fortentwicklung von DOIF haben wir das als gegeben hingenommen.&lt;br /&gt;
:Insgesamt setzen wir im Wiki auf einen großzügiges Rechtesystem ohne Review vor Freigabe. Zudem darf jeder fast jede Seite ändern und anpassen. Bei Besonderheiten -wie hier- werden bisher entsprechende Bitten/Hinweise ausgesprochen, die man einhalten sollte.&lt;br /&gt;
:Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 13:49, 13. Feb. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
Hallo,&lt;br /&gt;
ich bin gerne bereit hier einen Entwurf zum Review einzustellen, damit die Qualität des Artikels gewährleistet bleibt.&lt;br /&gt;
DOIF gehört als grundlegendes Automatisierungselement in ein Einstiegsdokument, da stimmst Du mir sicherlich zu.&lt;br /&gt;
&lt;br /&gt;
Wenn Abweichungen zu den Wiki-Lizenzbedingungen mit einzelnen Autoren von euch vereinbart werden, solltet Ihr nicht deren Klärung, Abstimmung u. Einhaltung auf die Benutzer abwälzen, sondern nach dem Verursacherprinzip selbst durchführen. Zumal dem Benutzer nicht ohne Weiteres bekannt ist, unter welchem Avatar er den Autor findet.&lt;br /&gt;
&lt;br /&gt;
Diese Forderung: &amp;quot;und auch Darstellung der Lösung des erweiterten Beispiels mit einem notify und dem Attribut disabledForIntervals.&amp;quot; halte ich für pure Willkür, denn das gilt ja nur für mich, solange die anderen Beispiele nicht mit DOIF-Beispielen ergänzt werden. Sie ist sicherlich ähnlich entstanden, wie meine vergleichenden Textpassagen.&lt;br /&gt;
&lt;br /&gt;
Den Absimmungsvorbehalt habe ich so verstanden, als Vorbehalt und ich habe ihn nicht über sehen, sondern ignoriert. Aber nicht ohne auf die Seite von Uli zu schauen, wo Du seit 16:26, 2. Okt. 2015 auf eine Antwort wartest. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hier mein Vorschlag zum Review:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Zeit- und Eventsteuerung, DOIF vereint at und notify ==&lt;br /&gt;
&amp;lt;u&amp;gt;Aufgabenstellung&amp;lt;/u&amp;gt;: Ein Treppenhauslicht soll durch einen Bewegungsmelder eingeschaltet werden, aber nur zwischen 18 Uhr und 8 Uhr.&lt;br /&gt;
&lt;br /&gt;
Bei der Kombination von [[Event|Ereignis]] (Bewegungsmelder meldet eine Bewegung) und Zeitangaben werden die Stärken des [[DOIF]] deutlich.&lt;br /&gt;
&lt;br /&gt;
Zeitangaben erfolgen im [[DOIF]] in eckigen Klammern &amp;lt;code&amp;gt;[HH:MM]&amp;lt;/code&amp;gt; für einen Zeitpunkt und &amp;lt;code&amp;gt;[HH:MM-HH:MM]&amp;lt;/code&amp;gt; für eine Zeitspanne.&lt;br /&gt;
&lt;br /&gt;
Hier ist vorausgesetzt, dass der Bewegungsmelder als Gerät mit dem Namen &#039;&#039;BM&#039;&#039; definiert wurde und er ein [[Readings|Reading]] mit dem Namen &#039;&#039;motion&#039;&#039; besitzt. Das [[Readings|Reading]] &#039;&#039;motion&#039;&#039; nimmt bei erkannter Bewegung den Wert &#039;&#039;on&#039;&#039; an und nach Verschwinden der Bewegung den Wert &#039;&#039;off&#039;&#039;.&lt;br /&gt;
Auf die Statusänderung des Bewegungsmelders wird auch wieder über Angaben in eckigen Klammern &amp;lt;code&amp;gt;[gerätename:readingname]&amp;lt;/code&amp;gt; zugegriffen.&lt;br /&gt;
&lt;br /&gt;
Bei erkannter Bewegung soll geschaltet werden, also wenn der Status des BM auf &#039;&#039;on&#039;&#039; wechselt. Dies wird geprüft durch einen vergleichenden [https://de.wikipedia.org/wiki/Operator_(Mathematik) Operator] &#039;&#039;eq&#039;&#039; (equal). Die Zeitangaben und der Ereignisvergleich werden durch den logischen [https://de.wikipedia.org/wiki/Operator_(Mathematik) Operator] &#039;&#039;and&#039;&#039; verknüpft. Der set-Befehl wird ausgeführt, wenn die ganze Bedingung logisch wahr wird, das ist nur der Fall, wenn zwischen 18 Uhr und 8 Uhr eine Bewegung erkannt wird.&lt;br /&gt;
&lt;br /&gt;
Die Definition des [[DOIF]] ist einfach:&lt;br /&gt;
&amp;lt;pre&amp;gt;define treppenhaus_di DOIF ([18:00-08:00] and [BM:motion] eq &amp;quot;on&amp;quot;) (set th_Licht on-for-timer 60)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Es sind natürlich auch flexible Zeitangaben möglich, die sich auf den Sonnenauf u. -untergang beziehen.&lt;br /&gt;
&amp;lt;pre&amp;gt;define treppenhaus_di DOIF ([{sunset}-{sunrise}] and [BM:motion] eq &amp;quot;on&amp;quot;) (set th_Licht on-for-timer 60)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Es können auch Zeiten angegeben werden, die in [[Readings]] des DOIF-Gerätes selbst stehen und über das WEB-Frontend verändert werden können.&lt;br /&gt;
&amp;lt;pre&amp;gt;define treppenhaus_di DOIF ([[$SELF:Beginn]-[$SELF:Ende]] and [BM:motion] eq &amp;quot;on&amp;quot;) (set th_Licht on-for-timer [$SELF:Dauer])&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Datei:ErsteSchritte DOIF.png]]&lt;br /&gt;
&lt;br /&gt;
Weitere Ausführungen zum DOIF würden den Rahmen der &#039;&#039;ersten Schritte&#039;&#039; sprengen.&lt;br /&gt;
Wenn das Interesse an [[DOIF]] geweckt wurde, gibt es im [[DOIF/Labor_-_ausführbare,_praxisnahe_Beispiele_als_Problemlösung_zum_Experimentieren|DOIF Labor]] ausführbare Beispiele zum Importieren über [[Import_von_Code_Snippets|Raw definition]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;und die Ergänzung in: &#039;&#039;Sie haben nun kennengelernt:&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
* [[DOIF]]: Zusammenfassen von Ereignissteuerung ([[notify]]) und Zeitsteuerung ([[at]])&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 16:39, 13. Feb. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
Ich habe eine Selbstrevision durchgeführt und den obigen Text überarbeitet.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 18:30, 13. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:Hallo allerseits,&lt;br /&gt;
:vielen Dank für die rege Diskussion zu diesem Artikel.&lt;br /&gt;
:In der Tat wär&#039;s mir wie geschrieben lieb, wenn redaktionelle Änderungen vor dem Einfügen mit mir abgesprochen würden.&lt;br /&gt;
:Bezgl. DOIF: ich kenne das Modul aus Posts und Diskussionen im Forum, nutze es aber selbst nicht und konnte/kann deshalb auch nix dazu schreiben. Insofern vielen Dank für die Zulieferung eines neuen Abschnitts.&lt;br /&gt;
:Da diese Anleitung sich speziell an den Einsteiger wendet, der vielleicht das erste mal nen Blick auf FHEM wirft, hab ich mit dem Einbinden des DOIF-Beispiels 2 Sorten Bauchschmerzen:&lt;br /&gt;
:1. es zeigt dem Neuling gleich beim allerersten Kontakt mit FHEM mehrere Alternativen für denselben Sachverhalt auf, das hallte ich für verwirrend.&lt;br /&gt;
:2. DOIF verwendet eine proprietäre Syntax in regexp - auch diese hat zumindest in der Anfangszeit das Potential, den Neuling zu verwirren.&lt;br /&gt;
:Mein Ansatz ist &amp;quot;Einfachheit durch weglassen&amp;quot; - das würde möchte ich auch auf diese Diskussion und mithin DOIF anwenden.&lt;br /&gt;
:Vorschlag: aus diesem Artikel rauslassen, aber in die nächste Version des Einsteiger-pdf aufnehmen - das ist ja wesentlich umfangreicher und versucht, möglichst viele hilfreiche Module vorzustellen und z.T. auch zu erklären - dort wäre so ein DOIF-Artikel m.E. wesentlich besser aufgehoben.&lt;br /&gt;
:Wenn ich endlich mal zur besagten nächsten Version komme, melde ich mich wieder mit der Bitte um input.&lt;br /&gt;
: Gruß und schönen Tag allerseits, Uli&lt;br /&gt;
:--[[Benutzer:Uli|Uli]] ([[Benutzer Diskussion:Uli|Diskussion]]) 09:12, 19. Feb. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
::Hallo Uli,&lt;br /&gt;
::ich habe die Bedenken hinsichtlich einer Ergänzung des Einsteigerartikels in meiner Naivität unterschätzt.&lt;br /&gt;
::Gegen die Abstimmung einer Ergänzung habe ich selbstverständlich nichts einzuwenden.&lt;br /&gt;
::Ich stehe voll hinter Deinem Ansatz &amp;quot;Einfachheit durch weglassen&amp;quot;. Deshalb schlage ich vor, die Beispiele, die  at und notify verwenden durch DOIF zu ersetzen, dann wird dem Einsteiger nur ein Modul zugemutet. Das ist möglich, weil durch DOIF die Angabe generischer Auslöser vereinfacht und harmonisiert wurde. DOIF funktioniert ohne Kenntnis &amp;quot;regulärer Ausdrücke&amp;quot;.&lt;br /&gt;
::* Angabe eines Auslösers: &amp;lt;code&amp;gt;[&amp;lt;name&amp;gt;:&amp;lt;reading&amp;gt;] vs. &amp;lt;name&amp;gt;:&amp;lt;reading&amp;gt;.*&amp;lt;/code&amp;gt;, eine einfache Readingsangabe reicht im DOIF&lt;br /&gt;
::* Angabe eines Zeitpunktes: &amp;lt;code&amp;gt;[HH:MM:SS] vs. *HH:MM:SS&amp;lt;/code&amp;gt;, &lt;br /&gt;
::* und Angabe einer Zeitspanne, die einen Neustart überlebt: &amp;lt;code&amp;gt;[HH:MM:SS-HH:MM:SS] vs. *HH:MM:SS ...;;define at *HH:MM:SS ...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::Diese wegweisende, von Dir als properitär bezeichnete Syntax, hat den Set-Befehl beeinflusst, bekannt als &#039;&#039;set magic&#039;&#039; &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; [&amp;lt;gerät&amp;gt;:&amp;lt;reading&amp;gt;]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
::Wenn Du die Regexp-Syntax im DOIF als properitär bezeichnest, dann trifft das vielmehr auch auf die Syntax von at und notify zu, beim notify werden z.B. intern die Begrenzungszeichen ^ und $ gesetzt, ohne es in der Befehlereferenz zu erwähnen.&lt;br /&gt;
::&amp;lt;u&amp;gt;Beispiel&amp;lt;/u&amp;gt;&lt;br /&gt;
::Ausgehend von den Events&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2017-02-21 19:25:09 dummy du3 B: off&lt;br /&gt;
2017-02-21 19:25:10 dummy du3 B: on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
::würde ich eine exakte Regexp so formulieren &amp;lt;code&amp;gt;^du3$:^B: (on|off)$&amp;lt;/code&amp;gt;. Das funktioniert im notify nicht, im DOIF schon, also nur mal zum Thema &amp;quot;properitäre Syntax&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::Hier mein Gegenvorschlag: DOIF statt at und notify in die &amp;quot;ersten Schritte&amp;quot; aufnehmen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::Dieser Vorschlag folgt Deinem Ansatz  &amp;quot;Einfachheit durch weglassen&amp;quot; zielführend, daher bitte ich Dich diesen Vorschlag anzunehmen.&lt;br /&gt;
&lt;br /&gt;
::DOIF ins Einsteiger-pdf aufzunehmen ist eine gute Idee, aber das kann ja noch dauern, wie Du selbst andeutest.&lt;br /&gt;
&lt;br /&gt;
::LG Trelle&lt;br /&gt;
&lt;br /&gt;
::--[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 20:22, 21. Feb. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
Hallo an alle Beteiligten der Disskussion Erste Schritte,&lt;br /&gt;
&lt;br /&gt;
die Antwortzeiten sind hier ja recht lang, da hatte ich Gelegenheit meinen Vorschlag für die Erweiterung der &amp;quot;Ersten Schritte&amp;quot; noch einmal gründlich zu überarbeiten. Es sollte jetzt keine Formulierungen mehr geben, die den Verdacht aufkeimen lassen könnten, dass at und notify nicht gleichberechtigte Partner-Module zu DOIF sein könnten. Damit sind dann auch [[DOIF]], die Befehlsreferenz und dieser Vorschlag harmonisiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hier nun der überarbeitete Vorschlag:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Zeit- und Ereignissteuerung mit DOIF ==&lt;br /&gt;
&#039;&#039;&#039;[[DOIF]]&#039;&#039;&#039; (ausgeprochen: du if, übersetzt: tue wenn) ist ein universelles Modul, welches [[Event|ereignis-]] und zeitgesteuert in Abhängigkeit definierter Bedingungen Anweisungen ausführt.&lt;br /&gt;
&lt;br /&gt;
In einer Hausautomatisation geht es immer wieder um die Ausführung von Befehlen abhängig von einem [[Ereignis]]. Oft reicht aber eine einfache Abfrage der Art: &amp;quot;wenn [[Ereignis]] eintritt, dann Befehl ausführen&amp;quot; nicht aus. Ebenso häufig möchte man eine Aktion nicht nur von einem einzelnen [[Ereignis]] abhängig ausführen, sondern abhängig von mehreren Bedingungen, z. B. &amp;quot;schalte Außenlicht ein, wenn es dunkel wird, aber nicht vor 18:00 Uhr&amp;quot; oder &amp;quot;schalte die Warmwasserzirkulation ein, wenn die Rücklauftemperatur unter 38 Grad fällt und jemand zuhause ist&amp;quot;. In solchen Fällen muss man mehrere Bedingung logisch miteinander verknüpfen. Ebenso muss sowohl auf Ereignisse wie auch auf Zeittrigger gleichermaßen reagiert werden.&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle setzt das Modul [[DOIF]] an. Es stellt eine eigene Benutzer-Schnittstelle zur Verfügung ohne Programmierkenntnisse in [https://de.wikipedia.org/wiki/Perl_(Programmiersprache) Perl] unmittelbar vorauszusetzen. Mit diesem Modul ist es möglich, sowohl [[Ereignis]]- als auch Zeitsteuerung mit Hilfe logischer Abfragen miteinander zu kombinieren. Damit können komplexere Problemstellungen innerhalb eines [[DOIF]]-Moduls gelöst werden, ohne Perlcode in Kombination mit anderen Modulen programmieren zu müssen.&lt;br /&gt;
&lt;br /&gt;
Das [[DOIF]]-Modul bedient sich selbst des Perlinterpreters, damit sind beliebige logische Abfragen möglich. Logische Abfragen werden in DOIF/DOELSEIF-Bedingungen vornehmlich mit Hilfe von and/or-[https://wiki.selfhtml.org/wiki/Perl/Operatoren Operatoren] erstellt. Diese werden mit Angaben von Stati, [[Readings]], [[Internals]], [[Event|Events]] oder Zeiten kombiniert. Sie werden grundsätzlich in eckigen Klammern angegeben und führen zur Triggerung des Moduls und damit zur Auswertung der dazugehörigen Bedingung. Zusätzlich können in einer Bedingung Perl-Funktionen angegeben werden, die in [[FHEM]] definiert sind. Wenn eine Bedingung wahr wird, so werden die dazugehörigen Befehle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Die vollständige Dokumentation mit zahlreichen Beispielen ist in der [https://fhem.de/commandref_DE.html deutschsprachigen Befehlsreferenz zum DOIF] zu finden.&lt;br /&gt;
&lt;br /&gt;
Zusätzliche, ausführbare Beispiele zum [[Import von Code Snippets|Import]] in [[FHEM]], gibt es im [[DOIF/Labor - ausführbare, praxisnahe Beispiele als Problemlösung zum Experimentieren|DOIF Labor]]&lt;br /&gt;
=== Ereignissteuerung ===&lt;br /&gt;
{{Randnotiz|RNText=Hinweis: Verwendung von&lt;br /&gt;
* &amp;lt;code&amp;gt;[&amp;lt;Gerätename&amp;gt;:&amp;quot;&amp;lt;Ereignis&amp;gt;&amp;quot;]&amp;lt;/code&amp;gt; zur Abfrage eines Ereignisses von einem Gerät&lt;br /&gt;
* &#039;&#039;&#039;DOELSE&#039;&#039;&#039; das Schlüsselwort leitet einen Befehlszweig ohne explizite Bedingung ein. Dieser Zweig wird ausgeführt, wenn keine geprüfte Bedingung wahr ist.&lt;br /&gt;
* &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; zum direkten Ausführen eines Befehls im [[DOIF]] und zur Anzeige von Icons&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;u&amp;gt;Aufgabenstellung:&amp;lt;/u&amp;gt; Eine Fernbedienung soll einen Fernseher einschalten, der über eine Funkstekdose angeschlossen ist.&lt;br /&gt;
&lt;br /&gt;
Das Gerät &#039;&#039;&#039;Fernbedienung&#039;&#039;&#039; wird durch den Dummy &#039;&#039;&#039;remotecontrol&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition eines Empfängers für eine Infrarot-Fernbedienung sein.&lt;br /&gt;
&lt;br /&gt;
Das Gerät &#039;&#039;&#039;Funksteckdose TV&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;tv&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition einer Intertechno-Funkstekdose aus dem Baumarkt sein.&lt;br /&gt;
&lt;br /&gt;
Die Signale von &#039;&#039;&#039;remotecontrol&#039;&#039;&#039; werden über das DOIF &#039;&#039;&#039;di_rc_tv&#039;&#039;&#039; alias &#039;&#039;&#039;Steuerlogik&#039;&#039;&#039; in einen Befehl für die Funksteckdose &#039;&#039;&#039;tv&#039;&#039;&#039; umgesetzt.&lt;br /&gt;
&lt;br /&gt;
Das Signal ist als [[Ereignis]] im [[Event monitor|Event-Monitor]] sichtbar &amp;lt;code&amp;gt;2017-02-28 09:07:03 dummy tv on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das [[DOIF]] reagiert durch die Angabe von &amp;lt;code&amp;gt;[remotecontrol:&amp;quot;on&amp;quot;]&amp;lt;/code&amp;gt; in der Schaltbedingung. Weil &#039;&#039;&#039;on&#039;&#039;&#039; als Wert in dem Ereignis enthalten ist, wird die Bedingung wahr. Das bewirkt das Ausführen des Befehls &amp;lt;code&amp;gt;set tv on&amp;lt;/code&amp;gt;. Danach nimmt das [[DOIF]] den Status &#039;&#039;&#039;cmd_1&#039;&#039;&#039; an.&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;off&#039;&#039;&#039; im Ereignis enthalten ist wird die Bedingung nicht wahr, daher wird der Befehl &amp;lt;code&amp;gt;set tv off&amp;lt;/code&amp;gt; des DOELSE-Zweiges des [[DOIF]] ausgeführt und [[DOIF]] nimmt den Status &#039;&#039;&#039;cmd_2&#039;&#039;&#039; an.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Definition:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;define di_rc_tv DOIF ([remotecontol:&amp;quot;on&amp;quot;]) (set tv on) DOELSE (set tv off)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über das [[Attribute|Attribut]] &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; können die Befehle des [[DOIF]] direkt ausgeführt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;attr di_rc_tv devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das erste Tripel &amp;lt;code&amp;gt;cmd_1:general_an:cmd_2&amp;lt;/code&amp;gt; hat die Bedeutung &#039;&#039;aktueller Status&#039;&#039;&#039;&#039;&#039;:&#039;&#039;&#039;&#039;&#039;Icon-Name&#039;&#039;&#039;&#039;&#039;:&#039;&#039;&#039;&#039;&#039;Status nach Betätigung des Icons&#039;&#039;. Also, wenn der Status &#039;&#039;&#039;cmd_2&#039;&#039;&#039; ist, dann zeige das Icon &#039;&#039;&#039;general_an&#039;&#039;&#039; und wenn das Icon betätigt wird, dann führe den Befehl aus, der zu &#039;&#039;&#039;cmd_1&#039;&#039;&#039; gehört.&lt;br /&gt;
&lt;br /&gt;
Das zweite Tripel hat die gleiche Funktion, jedoch wird in diesem Fall das Icon &#039;&#039;&#039;general_aus&#039;&#039;&#039; angezeigt, wenn der Status des [[DOIF]] &#039;&#039;&#039;cmd_1&#039;&#039;&#039; ist oder &#039;&#039;&#039;initialized&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die nachstehende, komplette Definition für die Gruppe A) kann über &#039;&#039;&#039;[[Import von Code Snippets|Raw definition]]&#039;&#039;&#039; in [[FHEM]] importiert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod di_rc_tv DOIF ([remotecontrol:&amp;quot;on&amp;quot;]) (set tv on) DOELSE (set tv off)&lt;br /&gt;
attr di_rc_tv alias Steuerlogik&lt;br /&gt;
attr di_rc_tv devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&lt;br /&gt;
attr di_rc_tv group A) Fernbedienung (Ereignissteuerung)&lt;br /&gt;
attr di_rc_tv icon helper_doif&lt;br /&gt;
attr di_rc_tv room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod remotecontrol dummy&lt;br /&gt;
attr remotecontrol alias Fernbedienung&lt;br /&gt;
attr remotecontrol devStateIcon .*:noIcon&lt;br /&gt;
attr remotecontrol group A) Fernbedienung (Ereignissteuerung)&lt;br /&gt;
attr remotecontrol icon it_remote&lt;br /&gt;
attr remotecontrol room Schulungsraum&lt;br /&gt;
attr remotecontrol webCmd on:off&lt;br /&gt;
&lt;br /&gt;
defmod tv dummy&lt;br /&gt;
attr tv alias Funksteckdose TV&lt;br /&gt;
attr tv devStateIcon on:it_television@red off:it_television@blue&lt;br /&gt;
attr tv group A) Fernbedienung (Ereignissteuerung)&lt;br /&gt;
attr tv icon it_television&lt;br /&gt;
attr tv room Schulungsraum&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Zeitsteuerung ===&lt;br /&gt;
{{Randnotiz|RNText=Hinweis: Verwendung von&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;Zeitpunkt&amp;gt;|&amp;lt;Wochentagangabe&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; zur Angabe eines Zeitpunktes mit Wochentagbeschränkung (8 &amp;amp;#8793; werktags, 7 &amp;amp;#8793; Wochenende).&lt;br /&gt;
* &#039;&#039;&#039;DOELSEIF&#039;&#039;&#039; das Schlüsselwort leitet einen Bedingungszweig ein und muss eine Bedingung enthalten. Dieser Zweig wird ausgeführt, wenn eine Bedingung geprüft wird und sie wahr ist.&lt;br /&gt;
* &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; zum direkten Ausführen eines Befehls im [[DOIF]] und zur Anzeige von Icons&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;u&amp;gt;Aufgabenstellung:&amp;lt;/u&amp;gt; Ein Radio soll werktags und am Wochenende zu unterschiedlichen Zeiten ein- u. ausgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
Das Gerät &#039;&#039;&#039;Funksteckdose Radio&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;radio&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition einer Intertechno-Funkstekdose aus dem Baumarkt sein.&lt;br /&gt;
&lt;br /&gt;
Wenn die Uhrzeit mit einem Schaltzeitpunkt übereinstimmt, wird die Zeitpunktangabe wahr. Wird dann auch die gesamte Bedingung wahr, dann wird der zu diesem Bedingungszweig gehörende Befehl ausgeführt. Das [[DOIF]]  &#039;&#039;&#039;di_clock_radio&#039;&#039;&#039; alias &#039;&#039;&#039;Zeitschaltuhr&#039;&#039;&#039; setzt dann einen Befehl zum Schalten der Funksteckdose &#039;&#039;&#039;radio&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
Das Zeitereignis ist im [[Event monitor|Event-Monitor]] nicht sichtbar.&lt;br /&gt;
&lt;br /&gt;
Die Zeitpunkte eines Bedingungszweiges sind &#039;&#039;&#039;or&#039;&#039;&#039;(oder) verknüpft. Im ersten Bedingungszweig steht die Einschaltbedingung, im Zweiten (DOELSEIF) die Auschaltbedingung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Definition:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;define di_clock_radio DOIF ([06:30|8] or [08:30|7]) (set radio on) DOELSEIF ([08:00|8] or [09:30|7]) (set radio off)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über das [[Attribute|Attribut]] &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; können die Befehle des [[DOIF]] über das WEB-Frontend unabhängig von den Schaltzeitpunkten ausgeführt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;attr ddi_clock_radio devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die nachstehende, komplette Definition für die Gruppe B) kann über &#039;&#039;&#039;[[Import von Code Snippets|Raw definition]]&#039;&#039;&#039; in [[FHEM]] importiert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod di_clock_radio DOIF ([06:30|8] or [08:30|7]) (set radio on) DOELSEIF ([08:00|8] or [09:30|7]) (set radio off)&lt;br /&gt;
attr di_clock_radio alias Zeitschaltuhr&lt;br /&gt;
attr di_clock_radio devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&lt;br /&gt;
attr di_clock_radio group B) Zeitschaltuhr (Zeitsteuerung)&lt;br /&gt;
attr di_clock_radio icon helper_doif&lt;br /&gt;
attr di_clock_radio room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod radio dummy&lt;br /&gt;
attr radio alias Funksteckdose Radio&lt;br /&gt;
attr radio devStateIcon on:it_radio@red off:it_radio@blue&lt;br /&gt;
attr radio group B) Zeitschaltuhr (Zeitsteuerung)&lt;br /&gt;
attr radio icon it_radio&lt;br /&gt;
attr radio room Schulungsraum&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Ereignis- und Zeitsteuerung ===&lt;br /&gt;
{{Randnotiz|RNText=Hinweis: Verwendung von&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;Beginzeitpunkt&amp;gt;-&amp;lt;Endzeitpunkt&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; zur Angabe einer Zeitspanne.&lt;br /&gt;
* &amp;lt;code&amp;gt;[&amp;lt;Gerätename&amp;gt;:&amp;lt;Reading-Name&amp;gt;]&amp;lt;/code&amp;gt; zur Abfrage eines Reading-Inhaltes.&lt;br /&gt;
* &amp;lt;code&amp;gt; &amp;lt; &amp;lt;/code&amp;gt;, eines numerischen Vergleichsoperators und Vergleich mit einer Konstanten (40).&lt;br /&gt;
* &#039;&#039;&#039;DOELSE&#039;&#039;&#039; das Schlüsselwort leitet einen Befehlszweig ohne explizite Bedingung ein. Dieser Zweig wird ausgeführt, wenn keine geprüfte Bedingung wahr ist.&lt;br /&gt;
* &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; zum direkten Ausführen eines Befehls im [[DOIF]] und zur Anzeige von Icons&lt;br /&gt;
* &#039;&#039;&#039;readingList&#039;&#039;&#039;, &#039;&#039;&#039;setList&#039;&#039;&#039; und &#039;&#039;&#039;webCmd&#039;&#039;&#039; zur Erzeugung eines Eingabeelementes im Frontend&lt;br /&gt;
* &#039;&#039;&#039;stateFormat&#039;&#039;&#039; um einen benutzerdefinierten Status zu erzeugen.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;u&amp;gt;Aufgabenstellung:&amp;lt;/u&amp;gt; Eine Lampe soll in einer Zeispanne eingeschaltet werden, wenn die Helligkeit einen bestimmten Wert unterschreitet.&lt;br /&gt;
&lt;br /&gt;
Das Gerät &#039;&#039;&#039;Lampe&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;lamp&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition einer funkgesteuerten Lampenfassung sein.&lt;br /&gt;
&lt;br /&gt;
Das Gerät &#039;&#039;&#039;Helligkeitssensor&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;sensor&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition eines Homematic Funk-Lichtsensor sein oder ein selbstgebauter Helligkeitssensor mit TSL2561-Chip.&lt;br /&gt;
&lt;br /&gt;
Wenn die aktuelle Uhrzeit in der angegebenen Zeitspanne liegt, ist die Zeitspanne wahr. Wenn dann auch die Helligkeit unter 40 sinkt, wird die gesamte Bedingung wahr, weil Zeitspanne und Hellikeitsvergleich &#039;&#039;&#039;and&#039;&#039;&#039;(und) verknupft sind. Der zu diesem Bedingungszweig gehörende Befehl wird dann ausgeführt. Das [[DOIF]]  &#039;&#039;&#039;di_lamp&#039;&#039;&#039; alias &#039;&#039;&#039;Lampenlogik&#039;&#039;&#039; setzt dann einen Befehl zum Schalten der Lampe &#039;&#039;&#039;lamp&#039;&#039;&#039; ab.&lt;br /&gt;
Der DOELSE-Zweig wird ausgeführt, wenn die Bedingung im ersten Zweig unwahr wird.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Definition:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;define di_lamp DOIF ([06:00-19:00] and [sensor:brightness] &amp;lt; 40) (set lamp on) DOELSE (set lamp off)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über das [[Attribute|Attribut]] &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; können die Befehle des [[DOIF]] über das WEB-Frontend unabhängig von den Schaltzeitpunkten ausgeführt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;attr di_lamp devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das [[Attribute|Attribut]] &#039;&#039;&#039;setList&#039;&#039;&#039; zusammen mit &#039;&#039;&#039;readingList&#039;&#039;&#039; und &#039;&#039;&#039;webCmd&#039;&#039;&#039; realisiert im Gerät &#039;&#039;&#039;sensor&#039;&#039;&#039; für das Reading &#039;&#039;&#039;brightness&#039;&#039;&#039; einen Schieberegler, mit dem eine Helligkeit zwischen 0 und 100 in in Schritten von 1 simuliert werden kann und der im Frontend angezeigt wird.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr sensor readingList brightness&lt;br /&gt;
attr sensor setList brightness:slider,0,1,100&lt;br /&gt;
attr sensor webCmd brightness&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem [[Attribute|Attribut]] &#039;&#039;&#039;stateFormat&#039;&#039;&#039; wird im Gerät &#039;&#039;&#039;sensor&#039;&#039;&#039; das Reading &#039;&#039;&#039;brightness&#039;&#039;&#039; in den Status geschrieben. Damit wird der Helligkeitswert auch im Frontend sichtbar.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr sensor stateFormat brightness&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die nachstehende, komplette Definition für die Gruppe C) kann über &#039;&#039;&#039;[[Import von Code Snippets|Raw definition]]&#039;&#039;&#039; in [[FHEM]] importiert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod di_lamp DOIF ([06:00-19:00] and [sensor:brightness] &amp;lt; 40) (set lamp on) DOELSE (set lamp off)&lt;br /&gt;
attr di_lamp alias Lampenlogik&lt;br /&gt;
attr di_lamp devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&lt;br /&gt;
attr di_lamp group C) Kombinierte Ereignis- und Zeitsteuerung&lt;br /&gt;
attr di_lamp icon helper_doif&lt;br /&gt;
attr di_lamp room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod lamp dummy&lt;br /&gt;
attr lamp alias Lampe&lt;br /&gt;
attr lamp group C) Kombinierte Ereignis- und Zeitsteuerung&lt;br /&gt;
attr lamp icon light_light&lt;br /&gt;
attr lamp room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod sensor dummy&lt;br /&gt;
attr sensor alias Helligkeitssensor&lt;br /&gt;
attr sensor group C) Kombinierte Ereignis- und Zeitsteuerung&lt;br /&gt;
attr sensor icon message_light_intensity&lt;br /&gt;
attr sensor readingList brightness&lt;br /&gt;
attr sensor room Schulungsraum&lt;br /&gt;
attr sensor setList brightness:slider,0,1,100&lt;br /&gt;
attr sensor stateFormat brightness&lt;br /&gt;
attr sensor webCmd brightness&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ansicht der Gruppen A) bis C) im Frontend ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:erste_schritte_DOIF.png|670px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;und die Ergänzung in: Sie haben nun kennengelernt:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* DOIF: Ereignis-und Zeitsteuerung&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LG --[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 19:16, 1. Mär. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:Hi Trelle,&lt;br /&gt;
:die langen Antwortzeiten liegen im Wesentlichen daran, dass ich keine Mailbenachrichtigung kriege, wenn hier was geschrieben wird. (vielen Dank an Christian für den Hinweis)&lt;br /&gt;
:Mach doch aus der DOIF-Ausarbeitung eine separate Wiki-Seite. Am Ende der Erste-Schritte-Abschnitte zu notify und at können wir dann nen Hinweis einfügen à la: &amp;quot;Hinweis: Als Alternative zu den Befehlen &amp;lt;at|notify&amp;gt; gibt es auch das Modul DOIF, mit dem vor allem komplexere Bedingungen einfacher abzubilden sind.&amp;quot;&lt;br /&gt;
: Gruß und schönen Tag, Uli&lt;br /&gt;
:--[[Benutzer:Uli|Uli]] ([[Benutzer Diskussion:Uli|Diskussion]]) 09:12, 19. Feb. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Anker|neue_Antwort}} &lt;br /&gt;
::Hallo Uli,&lt;br /&gt;
&lt;br /&gt;
::Es geht nicht darum, dass im Wiki etwas über DOIF geschrieben wird, da gibt es schon eine Menge.&lt;br /&gt;
&lt;br /&gt;
::Es geht darum, Einsteigern beim Erstkontakt über die &amp;quot;Ersten Schritte ...&amp;quot; eine ernstzunehmende Möglichkeit der Zeit- und Eventverarbeitung nicht vorzuenthalten, sondern Sie auf Augenhöhe anzubieten.&lt;br /&gt;
&lt;br /&gt;
::Das Verschweigen dieser Möglichkeit lässt Einsteiger nicht Ihren besten Weg finden und kommt einer Bevormundung gleich.&lt;br /&gt;
&lt;br /&gt;
::Die Disskussion um at, notify und DOIF lässt 3 Gruppierungen erkennen at/notify bzw. DOIF Puristen und die Mischer. Es gibt keinen Grund anzunehmen, dass diese Vorlieben nicht auch bei Einsteigern angelegt sind.&lt;br /&gt;
&lt;br /&gt;
::Gerade als Marketing Verantwortlicher des Vereins solltest Du ein Interesse haben, allen Gruppen einen leichten Einstieg zu ermöglichen, auch mit Blick auf die sich ankündigende Verbreitungsoffensive (FHEM-Livesystem und Showcases, usw.)&lt;br /&gt;
&lt;br /&gt;
::Du kennst DOIF, nicht hast Du erwähnt, dass sollte Dich nicht abhalten es dennoch ernstzunehmen und von eigenen Vorlieben unabhängig zu betrachten, um den Mehrwert für FHEM erkennen zu können.&lt;br /&gt;
&lt;br /&gt;
::Zur Verkürzung der Antwortzeiten könnten wir die Disskussion auch ins Forum verlagern. Was hältst Du davon?&lt;br /&gt;
&lt;br /&gt;
::LG --[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 12:27, 4. Mär. 2017 (CET)&lt;br /&gt;
{{Anker|neue_Antwort}} &lt;br /&gt;
:::Hallo Trelle,&lt;br /&gt;
:::offengestanden hab ich gar keine Lust auf diese Diskussion.&lt;br /&gt;
:::Offenbar haben wir hier unterschiedliche Ansichten. Ich respektiere Deine, respektiere Du bitte meine.&lt;br /&gt;
:::Einen Link auf eine DOIF-Seite können wir wie oben vorgeschlagen gerne einbauen, mehr Veränderung möchte ich an diesem Artikel nicht vornehmen.&lt;br /&gt;
:::Gruß, Uli&lt;br /&gt;
:::PS: Mit meiner Rolle im Verein hat das nix zu tun, es geht ja nicht um ein Vereinsthema.&lt;br /&gt;
:::--[[Benutzer:Uli|Uli]] ([[Benutzer Diskussion:Uli|Diskussion]]) 09:12, 19. Feb. 2017 (CET)&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:Erste_Schritte_in_FHEM&amp;diff=20509</id>
		<title>Diskussion:Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Diskussion:Erste_Schritte_in_FHEM&amp;diff=20509"/>
		<updated>2017-03-04T09:58:55Z</updated>

		<summary type="html">&lt;p&gt;Uli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Die Sache mit dem doppelten Semikolon ==&lt;br /&gt;
&lt;br /&gt;
Gerade für den Anfänger an den sich dieses Dokument richtet, wäre es sehr wichtig zu verstehen, warum das Semikolon verdoppelt werden muss und was damit geschieht (&#039;&#039;es wird nur einfach in DEF gespeichert&#039;&#039;). Das wird hier nur anhand des daraus resultierenden Symptoms erklärt: &amp;quot;Sofort ausführen oder später&amp;quot;. Aber das warum wäre m.E. gerade hier für das Verständnis beim Einstieg wichtig. Ansonsten ist es auch schwer nachzuvollziehen, warum man den gleichen Befehl den &amp;lt;code&amp;gt;notify&amp;lt;/code&amp;gt; ausführen soll auf der Kommandozeile mit verdoppeltem Semikolon und beim editieren des Internals DEF dann wieder ohne Verdoppelung schreiben muss. Drei Überlegungen dazu:&lt;br /&gt;
# Könnte man das Beispiel mit der Verdoppelung noch um das Editieren des Internals DEF erweitern und dabei genau das erläutern. Ohne diese Erkenntnis ist die Tücke dieses Konstrukts schwer verständlich und der Anfänger wundert sich warum seine Lampe auf den Status &amp;lt;code&amp;gt;on; define a1 at +00:01 set myLampe1,myLampe2 off&amp;lt;/code&amp;gt; o.Ä. gesetzt wird.&lt;br /&gt;
# Gibt es überhaupt sinnvolle Fälle, in denen ein verdoppeltes Semikolon im DEF benötigt wird. Spätestens bei dem hier benötigten vierfach Semikolon sollte man wissen was damit wann geschieht.&lt;br /&gt;
# Gibt es sinnvolle Zustände die ein Semikolon enthalten? Wäre da eine Warnung möglich?&lt;br /&gt;
Viele Grüße --[[Benutzer:MGu|MGu]] ([[Benutzer Diskussion:MGu|Diskussion]]) 18:10, 17. Apr. 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Falsche und indirekte negative Darstellung von notify/at im Vergleich zu DOIF ==&lt;br /&gt;
&lt;br /&gt;
Hallo!&lt;br /&gt;
&lt;br /&gt;
Die bewertende Aussage &amp;quot;Bei der Kombination von Ereignis (Bewegungsmelder meldet eine Bewegung) und Zeitangaben werden die stärken des DOIF deutlich. Es ist nur eine Definition (Gerät) notwendig. Wollte man dies durch die Verwendung von at und notify lösen, wären mehrere Definitionen notwendig oder ausreichende Perl-Kenntnisse.&amp;quot; insbesondere im Zusammenhang mit dem Beispiel halte ich für falsch und bringt Einsteiger auf eine vollkommen falsche Spur/Sichtweise. &lt;br /&gt;
&lt;br /&gt;
Die nur zeitweise Ausführung eines notify bzw. at erreicht man durch Setzen des Attributes &amp;lt;code&amp;gt;disabledForIntervals&amp;lt;/code&amp;gt;. Damit muss man für die Umsetzung des Beispiels beim notify nur das passende Zeitintervall im genannten Attribut setzen. Es sind keine weiteren Definitionen notwendig.&lt;br /&gt;
&lt;br /&gt;
Wenn der DOIF-Abschnitt erhalten bleiben soll und meine Aussage richtig ist, dann bitte ich um kurzfristige Entfernung der Wertung und auch Darstellung der Lösung des erweiterten Beispiels mit einem notify und dem Attribut disabledForIntervals. Das Wiki sollte nach Möglichkeit eine neutrale Sichtweise vermitteln, wenn es nicht eindeutige Vor- oder Nachteile gibt, die ich hier nicht erkenne.&lt;br /&gt;
&lt;br /&gt;
Da es sich um einen wichtigen Artikel handelt, werde ich spätestens morgen selbst Änderungen vornehmen, um nicht Einsteigern falsche Sichtweisen zu vermitteln.&lt;br /&gt;
&lt;br /&gt;
Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 09:43, 12. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
:Bin auch für &amp;quot;rückgängig machen&amp;quot;, insbesondere auch, da diese Seite auf dem Einsteigerdokument von Uli Maass basiert und nur mit seinem Einverständnis ins Wiki übernommen wurde. Darüber hinaus ist die DOIF-Ergänzung sicherlich als redaktionelle Erweiterung anzusehen und allein aus diesem Gesichtspunkt schon mit Uli abzustimmen. --[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 09:20, 13. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
::Jep, war auch mein erster Gedanke --[[Benutzer:Drhirn|Drhirn]] ([[Benutzer Diskussion:Drhirn|Diskussion]]) 09:27, 13. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:::Habe die Änderungen komplett zurückgesetzt.&lt;br /&gt;
:::Begründung:&lt;br /&gt;
:::* die vergleichenden Aussagen sind falsch&lt;br /&gt;
:::* ein Einverständnis der redaktionellen Änderung liegt afaik nicht vor und die Änderung wurde hier nicht vorab diskutiert. (den Hinweis darauf im Vorspann des Artikels hatte ich zuvor übersehen)&lt;br /&gt;
:::Wiedereinbau ist nach Abstimmung mit Uli und mit korrekter Darstellung nach Review grundsätzlich möglich. Dazu Änderungsvorschläge hier auf der Diskussionsseite einstellen.&lt;br /&gt;
:::--[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 09:48, 13. Feb. 2017 (CET)&lt;br /&gt;
Ist der Abstimmungsvorbehalt nicht unzulässig? Oder gilt der Hinweis über dem Speichern-Button nicht für Alle Wiki-Benutzer &amp;quot;Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann klicke nicht auf „Seite speichern“.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Die vergleichenden Passagen werde ich ändern.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 12:10, 13. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:Hmm, diese Seite ist einfach ein Sonderfall. Uli Maas hat da ursprünglich ein PDF-Dokument erstellt, das lange als Einstiegslektüre zu FHEM gehandelt wurde. Ich habe nur damals nach Rücksprache mit ihm die Erlaubnis bekommen, das PDF ins Wiki zu übernehmen. Die &amp;quot;Rechte&amp;quot; liegen aber sozusagen immer noch bei Uli. Deswegen habe ich das extra in der Einleitung erwähnt. Sowie auch diesen Punkt: &amp;quot;Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&amp;quot;&lt;br /&gt;
:Wie gesagt, ein Sonderfall. Bitte nicht persönlich nehmen.&lt;br /&gt;
:--[[Benutzer:Drhirn|Drhirn]] ([[Benutzer Diskussion:Drhirn|Diskussion]]) 12:52, 13. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:&lt;br /&gt;
:Hallo!&lt;br /&gt;
:Abstimmungsvorbehalt liest sich hart :-) . Es ist eine Bitte, die Du wahrscheinlich übersehen hast, und die in diesem Fall (Artikel) ihre Begründung hat. Das ist ein wichtiger Grundlagenartikel der überall verlinkt wird und darum richtig und objektiv sein soll. Der Inhalt wurde zuvor von mehreren Personen reviewed. Änderungen sollten daher vorher abgesprochen und besprochen werden, damit sie auch richtig sind.&lt;br /&gt;
:Hätte ich den Artikel nicht auf der oberen Beobachtungsprioriät, wäre vielleicht falsches Wissen verbreitet worden und das ist für niemanden sinnvoll. Genau darum habe ich auch die schnelle Reaktion angekündigt und umgesetzt.&lt;br /&gt;
:Das Problem der Änderung durch jedermann ist auch ein Aspekt, warum das Einsteiger-PDF nicht im Wiki steht.&lt;br /&gt;
:Ich persönlich denke, dass man gewisse Bitten respektieren sollte. Genauso habe ich damals Damians Bitte respektiert, dass im Wiki die Anwendungsbeispiele zu [[DOIF]] entfernt werden und das umgesetzt. Er stand DOIF-Artikeln im Wiki insgesamt kritisch gegenüber. Deine Artikel zu DOIF wurden auch intern beratschlagt, ob sie im Sinne von Damian &amp;quot;zulässig&amp;quot; sind. Angesichts der sehr guten Qualität und auch Eurer engen Zusammenarbeit bei der Fortentwicklung von DOIF haben wir das als gegeben hingenommen.&lt;br /&gt;
:Insgesamt setzen wir im Wiki auf einen großzügiges Rechtesystem ohne Review vor Freigabe. Zudem darf jeder fast jede Seite ändern und anpassen. Bei Besonderheiten -wie hier- werden bisher entsprechende Bitten/Hinweise ausgesprochen, die man einhalten sollte.&lt;br /&gt;
:Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 13:49, 13. Feb. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
Hallo,&lt;br /&gt;
ich bin gerne bereit hier einen Entwurf zum Review einzustellen, damit die Qualität des Artikels gewährleistet bleibt.&lt;br /&gt;
DOIF gehört als grundlegendes Automatisierungselement in ein Einstiegsdokument, da stimmst Du mir sicherlich zu.&lt;br /&gt;
&lt;br /&gt;
Wenn Abweichungen zu den Wiki-Lizenzbedingungen mit einzelnen Autoren von euch vereinbart werden, solltet Ihr nicht deren Klärung, Abstimmung u. Einhaltung auf die Benutzer abwälzen, sondern nach dem Verursacherprinzip selbst durchführen. Zumal dem Benutzer nicht ohne Weiteres bekannt ist, unter welchem Avatar er den Autor findet.&lt;br /&gt;
&lt;br /&gt;
Diese Forderung: &amp;quot;und auch Darstellung der Lösung des erweiterten Beispiels mit einem notify und dem Attribut disabledForIntervals.&amp;quot; halte ich für pure Willkür, denn das gilt ja nur für mich, solange die anderen Beispiele nicht mit DOIF-Beispielen ergänzt werden. Sie ist sicherlich ähnlich entstanden, wie meine vergleichenden Textpassagen.&lt;br /&gt;
&lt;br /&gt;
Den Absimmungsvorbehalt habe ich so verstanden, als Vorbehalt und ich habe ihn nicht über sehen, sondern ignoriert. Aber nicht ohne auf die Seite von Uli zu schauen, wo Du seit 16:26, 2. Okt. 2015 auf eine Antwort wartest. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hier mein Vorschlag zum Review:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Zeit- und Eventsteuerung, DOIF vereint at und notify ==&lt;br /&gt;
&amp;lt;u&amp;gt;Aufgabenstellung&amp;lt;/u&amp;gt;: Ein Treppenhauslicht soll durch einen Bewegungsmelder eingeschaltet werden, aber nur zwischen 18 Uhr und 8 Uhr.&lt;br /&gt;
&lt;br /&gt;
Bei der Kombination von [[Event|Ereignis]] (Bewegungsmelder meldet eine Bewegung) und Zeitangaben werden die Stärken des [[DOIF]] deutlich.&lt;br /&gt;
&lt;br /&gt;
Zeitangaben erfolgen im [[DOIF]] in eckigen Klammern &amp;lt;code&amp;gt;[HH:MM]&amp;lt;/code&amp;gt; für einen Zeitpunkt und &amp;lt;code&amp;gt;[HH:MM-HH:MM]&amp;lt;/code&amp;gt; für eine Zeitspanne.&lt;br /&gt;
&lt;br /&gt;
Hier ist vorausgesetzt, dass der Bewegungsmelder als Gerät mit dem Namen &#039;&#039;BM&#039;&#039; definiert wurde und er ein [[Readings|Reading]] mit dem Namen &#039;&#039;motion&#039;&#039; besitzt. Das [[Readings|Reading]] &#039;&#039;motion&#039;&#039; nimmt bei erkannter Bewegung den Wert &#039;&#039;on&#039;&#039; an und nach Verschwinden der Bewegung den Wert &#039;&#039;off&#039;&#039;.&lt;br /&gt;
Auf die Statusänderung des Bewegungsmelders wird auch wieder über Angaben in eckigen Klammern &amp;lt;code&amp;gt;[gerätename:readingname]&amp;lt;/code&amp;gt; zugegriffen.&lt;br /&gt;
&lt;br /&gt;
Bei erkannter Bewegung soll geschaltet werden, also wenn der Status des BM auf &#039;&#039;on&#039;&#039; wechselt. Dies wird geprüft durch einen vergleichenden [https://de.wikipedia.org/wiki/Operator_(Mathematik) Operator] &#039;&#039;eq&#039;&#039; (equal). Die Zeitangaben und der Ereignisvergleich werden durch den logischen [https://de.wikipedia.org/wiki/Operator_(Mathematik) Operator] &#039;&#039;and&#039;&#039; verknüpft. Der set-Befehl wird ausgeführt, wenn die ganze Bedingung logisch wahr wird, das ist nur der Fall, wenn zwischen 18 Uhr und 8 Uhr eine Bewegung erkannt wird.&lt;br /&gt;
&lt;br /&gt;
Die Definition des [[DOIF]] ist einfach:&lt;br /&gt;
&amp;lt;pre&amp;gt;define treppenhaus_di DOIF ([18:00-08:00] and [BM:motion] eq &amp;quot;on&amp;quot;) (set th_Licht on-for-timer 60)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Es sind natürlich auch flexible Zeitangaben möglich, die sich auf den Sonnenauf u. -untergang beziehen.&lt;br /&gt;
&amp;lt;pre&amp;gt;define treppenhaus_di DOIF ([{sunset}-{sunrise}] and [BM:motion] eq &amp;quot;on&amp;quot;) (set th_Licht on-for-timer 60)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Es können auch Zeiten angegeben werden, die in [[Readings]] des DOIF-Gerätes selbst stehen und über das WEB-Frontend verändert werden können.&lt;br /&gt;
&amp;lt;pre&amp;gt;define treppenhaus_di DOIF ([[$SELF:Beginn]-[$SELF:Ende]] and [BM:motion] eq &amp;quot;on&amp;quot;) (set th_Licht on-for-timer [$SELF:Dauer])&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Datei:ErsteSchritte DOIF.png]]&lt;br /&gt;
&lt;br /&gt;
Weitere Ausführungen zum DOIF würden den Rahmen der &#039;&#039;ersten Schritte&#039;&#039; sprengen.&lt;br /&gt;
Wenn das Interesse an [[DOIF]] geweckt wurde, gibt es im [[DOIF/Labor_-_ausführbare,_praxisnahe_Beispiele_als_Problemlösung_zum_Experimentieren|DOIF Labor]] ausführbare Beispiele zum Importieren über [[Import_von_Code_Snippets|Raw definition]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;und die Ergänzung in: &#039;&#039;Sie haben nun kennengelernt:&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
* [[DOIF]]: Zusammenfassen von Ereignissteuerung ([[notify]]) und Zeitsteuerung ([[at]])&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 16:39, 13. Feb. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
Ich habe eine Selbstrevision durchgeführt und den obigen Text überarbeitet.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 18:30, 13. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:Hallo allerseits,&lt;br /&gt;
:vielen Dank für die rege Diskussion zu diesem Artikel.&lt;br /&gt;
:In der Tat wär&#039;s mir wie geschrieben lieb, wenn redaktionelle Änderungen vor dem Einfügen mit mir abgesprochen würden.&lt;br /&gt;
:Bezgl. DOIF: ich kenne das Modul aus Posts und Diskussionen im Forum, nutze es aber selbst nicht und konnte/kann deshalb auch nix dazu schreiben. Insofern vielen Dank für die Zulieferung eines neuen Abschnitts.&lt;br /&gt;
:Da diese Anleitung sich speziell an den Einsteiger wendet, der vielleicht das erste mal nen Blick auf FHEM wirft, hab ich mit dem Einbinden des DOIF-Beispiels 2 Sorten Bauchschmerzen:&lt;br /&gt;
:1. es zeigt dem Neuling gleich beim allerersten Kontakt mit FHEM mehrere Alternativen für denselben Sachverhalt auf, das hallte ich für verwirrend.&lt;br /&gt;
:2. DOIF verwendet eine proprietäre Syntax in regexp - auch diese hat zumindest in der Anfangszeit das Potential, den Neuling zu verwirren.&lt;br /&gt;
:Mein Ansatz ist &amp;quot;Einfachheit durch weglassen&amp;quot; - das würde möchte ich auch auf diese Diskussion und mithin DOIF anwenden.&lt;br /&gt;
:Vorschlag: aus diesem Artikel rauslassen, aber in die nächste Version des Einsteiger-pdf aufnehmen - das ist ja wesentlich umfangreicher und versucht, möglichst viele hilfreiche Module vorzustellen und z.T. auch zu erklären - dort wäre so ein DOIF-Artikel m.E. wesentlich besser aufgehoben.&lt;br /&gt;
:Wenn ich endlich mal zur besagten nächsten Version komme, melde ich mich wieder mit der Bitte um input.&lt;br /&gt;
: Gruß und schönen Tag allerseits, Uli&lt;br /&gt;
:--[[Benutzer:Uli|Uli]] ([[Benutzer Diskussion:Uli|Diskussion]]) 09:12, 19. Feb. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
::Hallo Uli,&lt;br /&gt;
::ich habe die Bedenken hinsichtlich einer Ergänzung des Einsteigerartikels in meiner Naivität unterschätzt.&lt;br /&gt;
::Gegen die Abstimmung einer Ergänzung habe ich selbstverständlich nichts einzuwenden.&lt;br /&gt;
::Ich stehe voll hinter Deinem Ansatz &amp;quot;Einfachheit durch weglassen&amp;quot;. Deshalb schlage ich vor, die Beispiele, die  at und notify verwenden durch DOIF zu ersetzen, dann wird dem Einsteiger nur ein Modul zugemutet. Das ist möglich, weil durch DOIF die Angabe generischer Auslöser vereinfacht und harmonisiert wurde. DOIF funktioniert ohne Kenntnis &amp;quot;regulärer Ausdrücke&amp;quot;.&lt;br /&gt;
::* Angabe eines Auslösers: &amp;lt;code&amp;gt;[&amp;lt;name&amp;gt;:&amp;lt;reading&amp;gt;] vs. &amp;lt;name&amp;gt;:&amp;lt;reading&amp;gt;.*&amp;lt;/code&amp;gt;, eine einfache Readingsangabe reicht im DOIF&lt;br /&gt;
::* Angabe eines Zeitpunktes: &amp;lt;code&amp;gt;[HH:MM:SS] vs. *HH:MM:SS&amp;lt;/code&amp;gt;, &lt;br /&gt;
::* und Angabe einer Zeitspanne, die einen Neustart überlebt: &amp;lt;code&amp;gt;[HH:MM:SS-HH:MM:SS] vs. *HH:MM:SS ...;;define at *HH:MM:SS ...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::Diese wegweisende, von Dir als properitär bezeichnete Syntax, hat den Set-Befehl beeinflusst, bekannt als &#039;&#039;set magic&#039;&#039; &amp;lt;code&amp;gt;set &amp;lt;name&amp;gt; [&amp;lt;gerät&amp;gt;:&amp;lt;reading&amp;gt;]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
::Wenn Du die Regexp-Syntax im DOIF als properitär bezeichnest, dann trifft das vielmehr auch auf die Syntax von at und notify zu, beim notify werden z.B. intern die Begrenzungszeichen ^ und $ gesetzt, ohne es in der Befehlereferenz zu erwähnen.&lt;br /&gt;
::&amp;lt;u&amp;gt;Beispiel&amp;lt;/u&amp;gt;&lt;br /&gt;
::Ausgehend von den Events&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2017-02-21 19:25:09 dummy du3 B: off&lt;br /&gt;
2017-02-21 19:25:10 dummy du3 B: on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
::würde ich eine exakte Regexp so formulieren &amp;lt;code&amp;gt;^du3$:^B: (on|off)$&amp;lt;/code&amp;gt;. Das funktioniert im notify nicht, im DOIF schon, also nur mal zum Thema &amp;quot;properitäre Syntax&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::Hier mein Gegenvorschlag: DOIF statt at und notify in die &amp;quot;ersten Schritte&amp;quot; aufnehmen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::Dieser Vorschlag folgt Deinem Ansatz  &amp;quot;Einfachheit durch weglassen&amp;quot; zielführend, daher bitte ich Dich diesen Vorschlag anzunehmen.&lt;br /&gt;
&lt;br /&gt;
::DOIF ins Einsteiger-pdf aufzunehmen ist eine gute Idee, aber das kann ja noch dauern, wie Du selbst andeutest.&lt;br /&gt;
&lt;br /&gt;
::LG Trelle&lt;br /&gt;
&lt;br /&gt;
::--[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 20:22, 21. Feb. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
Hallo an alle Beteiligten der Disskussion Erste Schritte,&lt;br /&gt;
&lt;br /&gt;
die Antwortzeiten sind hier ja recht lang, da hatte ich Gelegenheit meinen Vorschlag für die Erweiterung der &amp;quot;Ersten Schritte&amp;quot; noch einmal gründlich zu überarbeiten. Es sollte jetzt keine Formulierungen mehr geben, die den Verdacht aufkeimen lassen könnten, dass at und notify nicht gleichberechtigte Partner-Module zu DOIF sein könnten. Damit sind dann auch [[DOIF]], die Befehlsreferenz und dieser Vorschlag harmonisiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hier nun der überarbeitete Vorschlag:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Zeit- und Ereignissteuerung mit DOIF ==&lt;br /&gt;
&#039;&#039;&#039;[[DOIF]]&#039;&#039;&#039; (ausgeprochen: du if, übersetzt: tue wenn) ist ein universelles Modul, welches [[Event|ereignis-]] und zeitgesteuert in Abhängigkeit definierter Bedingungen Anweisungen ausführt.&lt;br /&gt;
&lt;br /&gt;
In einer Hausautomatisation geht es immer wieder um die Ausführung von Befehlen abhängig von einem [[Ereignis]]. Oft reicht aber eine einfache Abfrage der Art: &amp;quot;wenn [[Ereignis]] eintritt, dann Befehl ausführen&amp;quot; nicht aus. Ebenso häufig möchte man eine Aktion nicht nur von einem einzelnen [[Ereignis]] abhängig ausführen, sondern abhängig von mehreren Bedingungen, z. B. &amp;quot;schalte Außenlicht ein, wenn es dunkel wird, aber nicht vor 18:00 Uhr&amp;quot; oder &amp;quot;schalte die Warmwasserzirkulation ein, wenn die Rücklauftemperatur unter 38 Grad fällt und jemand zuhause ist&amp;quot;. In solchen Fällen muss man mehrere Bedingung logisch miteinander verknüpfen. Ebenso muss sowohl auf Ereignisse wie auch auf Zeittrigger gleichermaßen reagiert werden.&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle setzt das Modul [[DOIF]] an. Es stellt eine eigene Benutzer-Schnittstelle zur Verfügung ohne Programmierkenntnisse in [https://de.wikipedia.org/wiki/Perl_(Programmiersprache) Perl] unmittelbar vorauszusetzen. Mit diesem Modul ist es möglich, sowohl [[Ereignis]]- als auch Zeitsteuerung mit Hilfe logischer Abfragen miteinander zu kombinieren. Damit können komplexere Problemstellungen innerhalb eines [[DOIF]]-Moduls gelöst werden, ohne Perlcode in Kombination mit anderen Modulen programmieren zu müssen.&lt;br /&gt;
&lt;br /&gt;
Das [[DOIF]]-Modul bedient sich selbst des Perlinterpreters, damit sind beliebige logische Abfragen möglich. Logische Abfragen werden in DOIF/DOELSEIF-Bedingungen vornehmlich mit Hilfe von and/or-[https://wiki.selfhtml.org/wiki/Perl/Operatoren Operatoren] erstellt. Diese werden mit Angaben von Stati, [[Readings]], [[Internals]], [[Event|Events]] oder Zeiten kombiniert. Sie werden grundsätzlich in eckigen Klammern angegeben und führen zur Triggerung des Moduls und damit zur Auswertung der dazugehörigen Bedingung. Zusätzlich können in einer Bedingung Perl-Funktionen angegeben werden, die in [[FHEM]] definiert sind. Wenn eine Bedingung wahr wird, so werden die dazugehörigen Befehle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Die vollständige Dokumentation mit zahlreichen Beispielen ist in der [https://fhem.de/commandref_DE.html deutschsprachigen Befehlsreferenz zum DOIF] zu finden.&lt;br /&gt;
&lt;br /&gt;
Zusätzliche, ausführbare Beispiele zum [[Import von Code Snippets|Import]] in [[FHEM]], gibt es im [[DOIF/Labor - ausführbare, praxisnahe Beispiele als Problemlösung zum Experimentieren|DOIF Labor]]&lt;br /&gt;
=== Ereignissteuerung ===&lt;br /&gt;
{{Randnotiz|RNText=Hinweis: Verwendung von&lt;br /&gt;
* &amp;lt;code&amp;gt;[&amp;lt;Gerätename&amp;gt;:&amp;quot;&amp;lt;Ereignis&amp;gt;&amp;quot;]&amp;lt;/code&amp;gt; zur Abfrage eines Ereignisses von einem Gerät&lt;br /&gt;
* &#039;&#039;&#039;DOELSE&#039;&#039;&#039; das Schlüsselwort leitet einen Befehlszweig ohne explizite Bedingung ein. Dieser Zweig wird ausgeführt, wenn keine geprüfte Bedingung wahr ist.&lt;br /&gt;
* &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; zum direkten Ausführen eines Befehls im [[DOIF]] und zur Anzeige von Icons&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;u&amp;gt;Aufgabenstellung:&amp;lt;/u&amp;gt; Eine Fernbedienung soll einen Fernseher einschalten, der über eine Funkstekdose angeschlossen ist.&lt;br /&gt;
&lt;br /&gt;
Das Gerät &#039;&#039;&#039;Fernbedienung&#039;&#039;&#039; wird durch den Dummy &#039;&#039;&#039;remotecontrol&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition eines Empfängers für eine Infrarot-Fernbedienung sein.&lt;br /&gt;
&lt;br /&gt;
Das Gerät &#039;&#039;&#039;Funksteckdose TV&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;tv&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition einer Intertechno-Funkstekdose aus dem Baumarkt sein.&lt;br /&gt;
&lt;br /&gt;
Die Signale von &#039;&#039;&#039;remotecontrol&#039;&#039;&#039; werden über das DOIF &#039;&#039;&#039;di_rc_tv&#039;&#039;&#039; alias &#039;&#039;&#039;Steuerlogik&#039;&#039;&#039; in einen Befehl für die Funksteckdose &#039;&#039;&#039;tv&#039;&#039;&#039; umgesetzt.&lt;br /&gt;
&lt;br /&gt;
Das Signal ist als [[Ereignis]] im [[Event monitor|Event-Monitor]] sichtbar &amp;lt;code&amp;gt;2017-02-28 09:07:03 dummy tv on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das [[DOIF]] reagiert durch die Angabe von &amp;lt;code&amp;gt;[remotecontrol:&amp;quot;on&amp;quot;]&amp;lt;/code&amp;gt; in der Schaltbedingung. Weil &#039;&#039;&#039;on&#039;&#039;&#039; als Wert in dem Ereignis enthalten ist, wird die Bedingung wahr. Das bewirkt das Ausführen des Befehls &amp;lt;code&amp;gt;set tv on&amp;lt;/code&amp;gt;. Danach nimmt das [[DOIF]] den Status &#039;&#039;&#039;cmd_1&#039;&#039;&#039; an.&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;off&#039;&#039;&#039; im Ereignis enthalten ist wird die Bedingung nicht wahr, daher wird der Befehl &amp;lt;code&amp;gt;set tv off&amp;lt;/code&amp;gt; des DOELSE-Zweiges des [[DOIF]] ausgeführt und [[DOIF]] nimmt den Status &#039;&#039;&#039;cmd_2&#039;&#039;&#039; an.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Definition:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;define di_rc_tv DOIF ([remotecontol:&amp;quot;on&amp;quot;]) (set tv on) DOELSE (set tv off)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über das [[Attribute|Attribut]] &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; können die Befehle des [[DOIF]] direkt ausgeführt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;attr di_rc_tv devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das erste Tripel &amp;lt;code&amp;gt;cmd_1:general_an:cmd_2&amp;lt;/code&amp;gt; hat die Bedeutung &#039;&#039;aktueller Status&#039;&#039;&#039;&#039;&#039;:&#039;&#039;&#039;&#039;&#039;Icon-Name&#039;&#039;&#039;&#039;&#039;:&#039;&#039;&#039;&#039;&#039;Status nach Betätigung des Icons&#039;&#039;. Also, wenn der Status &#039;&#039;&#039;cmd_2&#039;&#039;&#039; ist, dann zeige das Icon &#039;&#039;&#039;general_an&#039;&#039;&#039; und wenn das Icon betätigt wird, dann führe den Befehl aus, der zu &#039;&#039;&#039;cmd_1&#039;&#039;&#039; gehört.&lt;br /&gt;
&lt;br /&gt;
Das zweite Tripel hat die gleiche Funktion, jedoch wird in diesem Fall das Icon &#039;&#039;&#039;general_aus&#039;&#039;&#039; angezeigt, wenn der Status des [[DOIF]] &#039;&#039;&#039;cmd_1&#039;&#039;&#039; ist oder &#039;&#039;&#039;initialized&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die nachstehende, komplette Definition für die Gruppe A) kann über &#039;&#039;&#039;[[Import von Code Snippets|Raw definition]]&#039;&#039;&#039; in [[FHEM]] importiert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod di_rc_tv DOIF ([remotecontrol:&amp;quot;on&amp;quot;]) (set tv on) DOELSE (set tv off)&lt;br /&gt;
attr di_rc_tv alias Steuerlogik&lt;br /&gt;
attr di_rc_tv devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&lt;br /&gt;
attr di_rc_tv group A) Fernbedienung (Ereignissteuerung)&lt;br /&gt;
attr di_rc_tv icon helper_doif&lt;br /&gt;
attr di_rc_tv room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod remotecontrol dummy&lt;br /&gt;
attr remotecontrol alias Fernbedienung&lt;br /&gt;
attr remotecontrol devStateIcon .*:noIcon&lt;br /&gt;
attr remotecontrol group A) Fernbedienung (Ereignissteuerung)&lt;br /&gt;
attr remotecontrol icon it_remote&lt;br /&gt;
attr remotecontrol room Schulungsraum&lt;br /&gt;
attr remotecontrol webCmd on:off&lt;br /&gt;
&lt;br /&gt;
defmod tv dummy&lt;br /&gt;
attr tv alias Funksteckdose TV&lt;br /&gt;
attr tv devStateIcon on:it_television@red off:it_television@blue&lt;br /&gt;
attr tv group A) Fernbedienung (Ereignissteuerung)&lt;br /&gt;
attr tv icon it_television&lt;br /&gt;
attr tv room Schulungsraum&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Zeitsteuerung ===&lt;br /&gt;
{{Randnotiz|RNText=Hinweis: Verwendung von&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;Zeitpunkt&amp;gt;|&amp;lt;Wochentagangabe&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; zur Angabe eines Zeitpunktes mit Wochentagbeschränkung (8 &amp;amp;#8793; werktags, 7 &amp;amp;#8793; Wochenende).&lt;br /&gt;
* &#039;&#039;&#039;DOELSEIF&#039;&#039;&#039; das Schlüsselwort leitet einen Bedingungszweig ein und muss eine Bedingung enthalten. Dieser Zweig wird ausgeführt, wenn eine Bedingung geprüft wird und sie wahr ist.&lt;br /&gt;
* &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; zum direkten Ausführen eines Befehls im [[DOIF]] und zur Anzeige von Icons&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;u&amp;gt;Aufgabenstellung:&amp;lt;/u&amp;gt; Ein Radio soll werktags und am Wochenende zu unterschiedlichen Zeiten ein- u. ausgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
Das Gerät &#039;&#039;&#039;Funksteckdose Radio&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;radio&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition einer Intertechno-Funkstekdose aus dem Baumarkt sein.&lt;br /&gt;
&lt;br /&gt;
Wenn die Uhrzeit mit einem Schaltzeitpunkt übereinstimmt, wird die Zeitpunktangabe wahr. Wird dann auch die gesamte Bedingung wahr, dann wird der zu diesem Bedingungszweig gehörende Befehl ausgeführt. Das [[DOIF]]  &#039;&#039;&#039;di_clock_radio&#039;&#039;&#039; alias &#039;&#039;&#039;Zeitschaltuhr&#039;&#039;&#039; setzt dann einen Befehl zum Schalten der Funksteckdose &#039;&#039;&#039;radio&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
Das Zeitereignis ist im [[Event monitor|Event-Monitor]] nicht sichtbar.&lt;br /&gt;
&lt;br /&gt;
Die Zeitpunkte eines Bedingungszweiges sind &#039;&#039;&#039;or&#039;&#039;&#039;(oder) verknüpft. Im ersten Bedingungszweig steht die Einschaltbedingung, im Zweiten (DOELSEIF) die Auschaltbedingung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Definition:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;define di_clock_radio DOIF ([06:30|8] or [08:30|7]) (set radio on) DOELSEIF ([08:00|8] or [09:30|7]) (set radio off)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über das [[Attribute|Attribut]] &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; können die Befehle des [[DOIF]] über das WEB-Frontend unabhängig von den Schaltzeitpunkten ausgeführt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;attr ddi_clock_radio devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die nachstehende, komplette Definition für die Gruppe B) kann über &#039;&#039;&#039;[[Import von Code Snippets|Raw definition]]&#039;&#039;&#039; in [[FHEM]] importiert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod di_clock_radio DOIF ([06:30|8] or [08:30|7]) (set radio on) DOELSEIF ([08:00|8] or [09:30|7]) (set radio off)&lt;br /&gt;
attr di_clock_radio alias Zeitschaltuhr&lt;br /&gt;
attr di_clock_radio devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&lt;br /&gt;
attr di_clock_radio group B) Zeitschaltuhr (Zeitsteuerung)&lt;br /&gt;
attr di_clock_radio icon helper_doif&lt;br /&gt;
attr di_clock_radio room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod radio dummy&lt;br /&gt;
attr radio alias Funksteckdose Radio&lt;br /&gt;
attr radio devStateIcon on:it_radio@red off:it_radio@blue&lt;br /&gt;
attr radio group B) Zeitschaltuhr (Zeitsteuerung)&lt;br /&gt;
attr radio icon it_radio&lt;br /&gt;
attr radio room Schulungsraum&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Ereignis- und Zeitsteuerung ===&lt;br /&gt;
{{Randnotiz|RNText=Hinweis: Verwendung von&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;Beginzeitpunkt&amp;gt;-&amp;lt;Endzeitpunkt&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; zur Angabe einer Zeitspanne.&lt;br /&gt;
* &amp;lt;code&amp;gt;[&amp;lt;Gerätename&amp;gt;:&amp;lt;Reading-Name&amp;gt;]&amp;lt;/code&amp;gt; zur Abfrage eines Reading-Inhaltes.&lt;br /&gt;
* &amp;lt;code&amp;gt; &amp;lt; &amp;lt;/code&amp;gt;, eines numerischen Vergleichsoperators und Vergleich mit einer Konstanten (40).&lt;br /&gt;
* &#039;&#039;&#039;DOELSE&#039;&#039;&#039; das Schlüsselwort leitet einen Befehlszweig ohne explizite Bedingung ein. Dieser Zweig wird ausgeführt, wenn keine geprüfte Bedingung wahr ist.&lt;br /&gt;
* &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; zum direkten Ausführen eines Befehls im [[DOIF]] und zur Anzeige von Icons&lt;br /&gt;
* &#039;&#039;&#039;readingList&#039;&#039;&#039;, &#039;&#039;&#039;setList&#039;&#039;&#039; und &#039;&#039;&#039;webCmd&#039;&#039;&#039; zur Erzeugung eines Eingabeelementes im Frontend&lt;br /&gt;
* &#039;&#039;&#039;stateFormat&#039;&#039;&#039; um einen benutzerdefinierten Status zu erzeugen.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;u&amp;gt;Aufgabenstellung:&amp;lt;/u&amp;gt; Eine Lampe soll in einer Zeispanne eingeschaltet werden, wenn die Helligkeit einen bestimmten Wert unterschreitet.&lt;br /&gt;
&lt;br /&gt;
Das Gerät &#039;&#039;&#039;Lampe&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;lamp&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition einer funkgesteuerten Lampenfassung sein.&lt;br /&gt;
&lt;br /&gt;
Das Gerät &#039;&#039;&#039;Helligkeitssensor&#039;&#039;&#039;  wird durch den Dummy &#039;&#039;&#039;sensor&#039;&#039;&#039; dargestellt. In der Realität könnte es die Definition eines Homematic Funk-Lichtsensor sein oder ein selbstgebauter Helligkeitssensor mit TSL2561-Chip.&lt;br /&gt;
&lt;br /&gt;
Wenn die aktuelle Uhrzeit in der angegebenen Zeitspanne liegt, ist die Zeitspanne wahr. Wenn dann auch die Helligkeit unter 40 sinkt, wird die gesamte Bedingung wahr, weil Zeitspanne und Hellikeitsvergleich &#039;&#039;&#039;and&#039;&#039;&#039;(und) verknupft sind. Der zu diesem Bedingungszweig gehörende Befehl wird dann ausgeführt. Das [[DOIF]]  &#039;&#039;&#039;di_lamp&#039;&#039;&#039; alias &#039;&#039;&#039;Lampenlogik&#039;&#039;&#039; setzt dann einen Befehl zum Schalten der Lampe &#039;&#039;&#039;lamp&#039;&#039;&#039; ab.&lt;br /&gt;
Der DOELSE-Zweig wird ausgeführt, wenn die Bedingung im ersten Zweig unwahr wird.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Definition:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;define di_lamp DOIF ([06:00-19:00] and [sensor:brightness] &amp;lt; 40) (set lamp on) DOELSE (set lamp off)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über das [[Attribute|Attribut]] &#039;&#039;&#039;devStateIcon&#039;&#039;&#039; können die Befehle des [[DOIF]] über das WEB-Frontend unabhängig von den Schaltzeitpunkten ausgeführt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;attr di_lamp devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das [[Attribute|Attribut]] &#039;&#039;&#039;setList&#039;&#039;&#039; zusammen mit &#039;&#039;&#039;readingList&#039;&#039;&#039; und &#039;&#039;&#039;webCmd&#039;&#039;&#039; realisiert im Gerät &#039;&#039;&#039;sensor&#039;&#039;&#039; für das Reading &#039;&#039;&#039;brightness&#039;&#039;&#039; einen Schieberegler, mit dem eine Helligkeit zwischen 0 und 100 in in Schritten von 1 simuliert werden kann und der im Frontend angezeigt wird.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr sensor readingList brightness&lt;br /&gt;
attr sensor setList brightness:slider,0,1,100&lt;br /&gt;
attr sensor webCmd brightness&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem [[Attribute|Attribut]] &#039;&#039;&#039;stateFormat&#039;&#039;&#039; wird im Gerät &#039;&#039;&#039;sensor&#039;&#039;&#039; das Reading &#039;&#039;&#039;brightness&#039;&#039;&#039; in den Status geschrieben. Damit wird der Helligkeitswert auch im Frontend sichtbar.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr sensor stateFormat brightness&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die nachstehende, komplette Definition für die Gruppe C) kann über &#039;&#039;&#039;[[Import von Code Snippets|Raw definition]]&#039;&#039;&#039; in [[FHEM]] importiert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod di_lamp DOIF ([06:00-19:00] and [sensor:brightness] &amp;lt; 40) (set lamp on) DOELSE (set lamp off)&lt;br /&gt;
attr di_lamp alias Lampenlogik&lt;br /&gt;
attr di_lamp devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1&lt;br /&gt;
attr di_lamp group C) Kombinierte Ereignis- und Zeitsteuerung&lt;br /&gt;
attr di_lamp icon helper_doif&lt;br /&gt;
attr di_lamp room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod lamp dummy&lt;br /&gt;
attr lamp alias Lampe&lt;br /&gt;
attr lamp group C) Kombinierte Ereignis- und Zeitsteuerung&lt;br /&gt;
attr lamp icon light_light&lt;br /&gt;
attr lamp room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
defmod sensor dummy&lt;br /&gt;
attr sensor alias Helligkeitssensor&lt;br /&gt;
attr sensor group C) Kombinierte Ereignis- und Zeitsteuerung&lt;br /&gt;
attr sensor icon message_light_intensity&lt;br /&gt;
attr sensor readingList brightness&lt;br /&gt;
attr sensor room Schulungsraum&lt;br /&gt;
attr sensor setList brightness:slider,0,1,100&lt;br /&gt;
attr sensor stateFormat brightness&lt;br /&gt;
attr sensor webCmd brightness&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ansicht der Gruppen A) bis C) im Frontend ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:erste_schritte_DOIF.png|670px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;und die Ergänzung in: Sie haben nun kennengelernt:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* DOIF: Ereignis-und Zeitsteuerung&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LG --[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 19:16, 1. Mär. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:Hi Trelle,&lt;br /&gt;
:die langen Antwortzeiten liegen im Wesentlichen daran, dass ich keine Mailbenachrichtigung kriege, wenn hier was geschrieben wird. (vielen Dank an Christian für den Hinweis)&lt;br /&gt;
:Mach doch aus der DOIF-Ausarbeitung eine separate Wiki-Seite. Am Ende der Erste-Schritte-Abschnitte zu notify und at können wir dann nen Hinweis einfügen à la: &amp;quot;Hinweis: Als Alternative zu den Befehlen &amp;lt;at|notify&amp;gt; gibt es auch das Modul DOIF, mit dem vor allem komplexere Bedingungen einfacher abzubilden sind.&amp;quot;&lt;br /&gt;
: Gruß und schönen Tag, Uli&lt;br /&gt;
:--[[Benutzer:Uli|Uli]] ([[Benutzer Diskussion:Uli|Diskussion]]) 09:12, 19. Feb. 2017 (CET)&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:Erste_Schritte_in_FHEM&amp;diff=20086</id>
		<title>Diskussion:Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Diskussion:Erste_Schritte_in_FHEM&amp;diff=20086"/>
		<updated>2017-02-19T08:15:46Z</updated>

		<summary type="html">&lt;p&gt;Uli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Die Sache mit dem doppelten Semikolon ==&lt;br /&gt;
&lt;br /&gt;
Gerade für den Anfänger an den sich dieses Dokument richtet, wäre es sehr wichtig zu verstehen, warum das Semikolon verdoppelt werden muss und was damit geschieht (&#039;&#039;es wird nur einfach in DEF gespeichert&#039;&#039;). Das wird hier nur anhand des daraus resultierenden Symptoms erklärt: &amp;quot;Sofort ausführen oder später&amp;quot;. Aber das warum wäre m.E. gerade hier für das Verständnis beim Einstieg wichtig. Ansonsten ist es auch schwer nachzuvollziehen, warum man den gleichen Befehl den &amp;lt;code&amp;gt;notify&amp;lt;/code&amp;gt; ausführen soll auf der Kommandozeile mit verdoppeltem Semikolon und beim editieren des Internals DEF dann wieder ohne Verdoppelung schreiben muss. Drei Überlegungen dazu:&lt;br /&gt;
# Könnte man das Beispiel mit der Verdoppelung noch um das Editieren des Internals DEF erweitern und dabei genau das erläutern. Ohne diese Erkenntnis ist die Tücke dieses Konstrukts schwer verständlich und der Anfänger wundert sich warum seine Lampe auf den Status &amp;lt;code&amp;gt;on; define a1 at +00:01 set myLampe1,myLampe2 off&amp;lt;/code&amp;gt; o.Ä. gesetzt wird.&lt;br /&gt;
# Gibt es überhaupt sinnvolle Fälle, in denen ein verdoppeltes Semikolon im DEF benötigt wird. Spätestens bei dem hier benötigten vierfach Semikolon sollte man wissen was damit wann geschieht.&lt;br /&gt;
# Gibt es sinnvolle Zustände die ein Semikolon enthalten? Wäre da eine Warnung möglich?&lt;br /&gt;
Viele Grüße --[[Benutzer:MGu|MGu]] ([[Benutzer Diskussion:MGu|Diskussion]]) 18:10, 17. Apr. 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Falsche und indirekte negative Darstellung von notify/at im Vergleich zu DOIF ==&lt;br /&gt;
&lt;br /&gt;
Hallo!&lt;br /&gt;
&lt;br /&gt;
Die bewertende Aussage &amp;quot;Bei der Kombination von Ereignis (Bewegungsmelder meldet eine Bewegung) und Zeitangaben werden die stärken des DOIF deutlich. Es ist nur eine Definition (Gerät) notwendig. Wollte man dies durch die Verwendung von at und notify lösen, wären mehrere Definitionen notwendig oder ausreichende Perl-Kenntnisse.&amp;quot; insbesondere im Zusammenhang mit dem Beispiel halte ich für falsch und bringt Einsteiger auf eine vollkommen falsche Spur/Sichtweise. &lt;br /&gt;
&lt;br /&gt;
Die nur zeitweise Ausführung eines notify bzw. at erreicht man durch Setzen des Attributes &amp;lt;code&amp;gt;disabledForIntervals&amp;lt;/code&amp;gt;. Damit muss man für die Umsetzung des Beispiels beim notify nur das passende Zeitintervall im genannten Attribut setzen. Es sind keine weiteren Definitionen notwendig.&lt;br /&gt;
&lt;br /&gt;
Wenn der DOIF-Abschnitt erhalten bleiben soll und meine Aussage richtig ist, dann bitte ich um kurzfristige Entfernung der Wertung und auch Darstellung der Lösung des erweiterten Beispiels mit einem notify und dem Attribut disabledForIntervals. Das Wiki sollte nach Möglichkeit eine neutrale Sichtweise vermitteln, wenn es nicht eindeutige Vor- oder Nachteile gibt, die ich hier nicht erkenne.&lt;br /&gt;
&lt;br /&gt;
Da es sich um einen wichtigen Artikel handelt, werde ich spätestens morgen selbst Änderungen vornehmen, um nicht Einsteigern falsche Sichtweisen zu vermitteln.&lt;br /&gt;
&lt;br /&gt;
Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 09:43, 12. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
:Bin auch für &amp;quot;rückgängig machen&amp;quot;, insbesondere auch, da diese Seite auf dem Einsteigerdokument von Uli Maass basiert und nur mit seinem Einverständnis ins Wiki übernommen wurde. Darüber hinaus ist die DOIF-Ergänzung sicherlich als redaktionelle Erweiterung anzusehen und allein aus diesem Gesichtspunkt schon mit Uli abzustimmen. --[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 09:20, 13. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
::Jep, war auch mein erster Gedanke --[[Benutzer:Drhirn|Drhirn]] ([[Benutzer Diskussion:Drhirn|Diskussion]]) 09:27, 13. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:::Habe die Änderungen komplett zurückgesetzt.&lt;br /&gt;
:::Begründung:&lt;br /&gt;
:::* die vergleichenden Aussagen sind falsch&lt;br /&gt;
:::* ein Einverständnis der redaktionellen Änderung liegt afaik nicht vor und die Änderung wurde hier nicht vorab diskutiert. (den Hinweis darauf im Vorspann des Artikels hatte ich zuvor übersehen)&lt;br /&gt;
:::Wiedereinbau ist nach Abstimmung mit Uli und mit korrekter Darstellung nach Review grundsätzlich möglich. Dazu Änderungsvorschläge hier auf der Diskussionsseite einstellen.&lt;br /&gt;
:::--[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 09:48, 13. Feb. 2017 (CET)&lt;br /&gt;
Ist der Abstimmungsvorbehalt nicht unzulässig? Oder gilt der Hinweis über dem Speichern-Button nicht für Alle Wiki-Benutzer &amp;quot;Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann klicke nicht auf „Seite speichern“.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Die vergleichenden Passagen werde ich ändern.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 12:10, 13. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:Hmm, diese Seite ist einfach ein Sonderfall. Uli Maas hat da ursprünglich ein PDF-Dokument erstellt, das lange als Einstiegslektüre zu FHEM gehandelt wurde. Ich habe nur damals nach Rücksprache mit ihm die Erlaubnis bekommen, das PDF ins Wiki zu übernehmen. Die &amp;quot;Rechte&amp;quot; liegen aber sozusagen immer noch bei Uli. Deswegen habe ich das extra in der Einleitung erwähnt. Sowie auch diesen Punkt: &amp;quot;Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&amp;quot;&lt;br /&gt;
:Wie gesagt, ein Sonderfall. Bitte nicht persönlich nehmen.&lt;br /&gt;
:--[[Benutzer:Drhirn|Drhirn]] ([[Benutzer Diskussion:Drhirn|Diskussion]]) 12:52, 13. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:&lt;br /&gt;
:Hallo!&lt;br /&gt;
:Abstimmungsvorbehalt liest sich hart :-) . Es ist eine Bitte, die Du wahrscheinlich übersehen hast, und die in diesem Fall (Artikel) ihre Begründung hat. Das ist ein wichtiger Grundlagenartikel der überall verlinkt wird und darum richtig und objektiv sein soll. Der Inhalt wurde zuvor von mehreren Personen reviewed. Änderungen sollten daher vorher abgesprochen und besprochen werden, damit sie auch richtig sind.&lt;br /&gt;
:Hätte ich den Artikel nicht auf der oberen Beobachtungsprioriät, wäre vielleicht falsches Wissen verbreitet worden und das ist für niemanden sinnvoll. Genau darum habe ich auch die schnelle Reaktion angekündigt und umgesetzt.&lt;br /&gt;
:Das Problem der Änderung durch jedermann ist auch ein Aspekt, warum das Einsteiger-PDF nicht im Wiki steht.&lt;br /&gt;
:Ich persönlich denke, dass man gewisse Bitten respektieren sollte. Genauso habe ich damals Damians Bitte respektiert, dass im Wiki die Anwendungsbeispiele zu [[DOIF]] entfernt werden und das umgesetzt. Er stand DOIF-Artikeln im Wiki insgesamt kritisch gegenüber. Deine Artikel zu DOIF wurden auch intern beratschlagt, ob sie im Sinne von Damian &amp;quot;zulässig&amp;quot; sind. Angesichts der sehr guten Qualität und auch Eurer engen Zusammenarbeit bei der Fortentwicklung von DOIF haben wir das als gegeben hingenommen.&lt;br /&gt;
:Insgesamt setzen wir im Wiki auf einen großzügiges Rechtesystem ohne Review vor Freigabe. Zudem darf jeder fast jede Seite ändern und anpassen. Bei Besonderheiten -wie hier- werden bisher entsprechende Bitten/Hinweise ausgesprochen, die man einhalten sollte.&lt;br /&gt;
:Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 13:49, 13. Feb. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
Hallo,&lt;br /&gt;
ich bin gerne bereit hier einen Entwurf zum Review einzustellen, damit die Qualität des Artikels gewährleistet bleibt.&lt;br /&gt;
DOIF gehört als grundlegendes Automatisierungselement in ein Einstiegsdokument, da stimmst Du mir sicherlich zu.&lt;br /&gt;
&lt;br /&gt;
Wenn Abweichungen zu den Wiki-Lizenzbedingungen mit einzelnen Autoren von euch vereinbart werden, solltet Ihr nicht deren Klärung, Abstimmung u. Einhaltung auf die Benutzer abwälzen, sondern nach dem Verursacherprinzip selbst durchführen. Zumal dem Benutzer nicht ohne Weiteres bekannt ist, unter welchem Avatar er den Autor findet.&lt;br /&gt;
&lt;br /&gt;
Diese Forderung: &amp;quot;und auch Darstellung der Lösung des erweiterten Beispiels mit einem notify und dem Attribut disabledForIntervals.&amp;quot; halte ich für pure Willkür, denn das gilt ja nur für mich, solange die anderen Beispiele nicht mit DOIF-Beispielen ergänzt werden. Sie ist sicherlich ähnlich entstanden, wie meine vergleichenden Textpassagen.&lt;br /&gt;
&lt;br /&gt;
Den Absimmungsvorbehalt habe ich so verstanden, als Vorbehalt und ich habe ihn nicht über sehen, sondern ignoriert. Aber nicht ohne auf die Seite von Uli zu schauen, wo Du seit 16:26, 2. Okt. 2015 auf eine Antwort wartest. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hier mein Vorschlag zum Review:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Zeit- und Eventsteuerung, DOIF vereint at und notify ==&lt;br /&gt;
&amp;lt;u&amp;gt;Aufgabenstellung&amp;lt;/u&amp;gt;: Ein Treppenhauslicht soll durch einen Bewegungsmelder eingeschaltet werden, aber nur zwischen 18 Uhr und 8 Uhr.&lt;br /&gt;
&lt;br /&gt;
Bei der Kombination von [[Event|Ereignis]] (Bewegungsmelder meldet eine Bewegung) und Zeitangaben werden die Stärken des [[DOIF]] deutlich.&lt;br /&gt;
&lt;br /&gt;
Zeitangaben erfolgen im [[DOIF]] in eckigen Klammern &amp;lt;code&amp;gt;[HH:MM]&amp;lt;/code&amp;gt; für einen Zeitpunkt und &amp;lt;code&amp;gt;[HH:MM-HH:MM]&amp;lt;/code&amp;gt; für eine Zeitspanne.&lt;br /&gt;
&lt;br /&gt;
Hier ist vorausgesetzt, dass der Bewegungsmelder als Gerät mit dem Namen &#039;&#039;BM&#039;&#039; definiert wurde und er ein [[Readings|Reading]] mit dem Namen &#039;&#039;motion&#039;&#039; besitzt. Das [[Readings|Reading]] &#039;&#039;motion&#039;&#039; nimmt bei erkannter Bewegung den Wert &#039;&#039;on&#039;&#039; an und nach Verschwinden der Bewegung den Wert &#039;&#039;off&#039;&#039;.&lt;br /&gt;
Auf die Statusänderung des Bewegungsmelders wird auch wieder über Angaben in eckigen Klammern &amp;lt;code&amp;gt;[gerätename:readingname]&amp;lt;/code&amp;gt; zugegriffen.&lt;br /&gt;
&lt;br /&gt;
Bei erkannter Bewegung soll geschaltet werden, also wenn der Status des BM auf &#039;&#039;on&#039;&#039; wechselt. Dies wird geprüft durch einen vergleichenden [https://de.wikipedia.org/wiki/Operator_(Mathematik) Operator] &#039;&#039;eq&#039;&#039; (equal). Die Zeitangaben und der Ereignisvergleich werden durch den logischen [https://de.wikipedia.org/wiki/Operator_(Mathematik) Operator] &#039;&#039;and&#039;&#039; verknüpft. Der set-Befehl wird ausgeführt, wenn die ganze Bedingung logisch wahr wird, das ist nur der Fall, wenn zwischen 18 Uhr und 8 Uhr eine Bewegung erkannt wird.&lt;br /&gt;
&lt;br /&gt;
Die Definition des [[DOIF]] ist einfach:&lt;br /&gt;
&amp;lt;pre&amp;gt;define treppenhaus_di DOIF ([18:00-08:00] and [BM:motion] eq &amp;quot;on&amp;quot;) (set th_Licht on-for-timer 60)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Es sind natürlich auch flexible Zeitangaben möglich, die sich auf den Sonnenauf u. -untergang beziehen.&lt;br /&gt;
&amp;lt;pre&amp;gt;define treppenhaus_di DOIF ([{sunset}-{sunrise}] and [BM:motion] eq &amp;quot;on&amp;quot;) (set th_Licht on-for-timer 60)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Es können auch Zeiten angegeben werden, die in [[Readings]] des DOIF-Gerätes selbst stehen und über das WEB-Frontend verändert werden können.&lt;br /&gt;
&amp;lt;pre&amp;gt;define treppenhaus_di DOIF ([[$SELF:Beginn]-[$SELF:Ende]] and [BM:motion] eq &amp;quot;on&amp;quot;) (set th_Licht on-for-timer [$SELF:Dauer])&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Datei:ErsteSchritte DOIF.png]]&lt;br /&gt;
&lt;br /&gt;
Weitere Ausführungen zum DOIF würden den Rahmen der &#039;&#039;ersten Schritte&#039;&#039; sprengen.&lt;br /&gt;
Wenn das Interesse an [[DOIF]] geweckt wurde, gibt es im [[DOIF/Labor_-_ausführbare,_praxisnahe_Beispiele_als_Problemlösung_zum_Experimentieren|DOIF Labor]] ausführbare Beispiele zum Importieren über [[Import_von_Code_Snippets|Raw definition]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;und die Ergänzung in: &#039;&#039;Sie haben nun kennengelernt:&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
* [[DOIF]]: Zusammenfassen von Ereignissteuerung ([[notify]]) und Zeitsteuerung ([[at]])&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 16:39, 13. Feb. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
Ich habe eine Selbstrevision durchgeführt und den obigen Text überarbeitet.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 18:30, 13. Feb. 2017 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:Hallo allerseits,&lt;br /&gt;
:vielen Dank für die rege Diskussion zu diesem Artikel.&lt;br /&gt;
:In der Tat wär&#039;s mir wie geschrieben lieb, wenn redaktionelle Änderungen vor dem Einfügen mit mir abgesprochen würden.&lt;br /&gt;
:Bezgl. DOIF: ich kenne das Modul aus Posts und Diskussionen im Forum, nutze es aber selbst nicht und konnte/kann deshalb auch nix dazu schreiben. Insofern vielen Dank für die Zulieferung eines neuen Abschnitts.&lt;br /&gt;
:Da diese Anleitung sich speziell an den Einsteiger wendet, der vielleicht das erste mal nen Blick auf FHEM wirft, hab ich mit dem Einbinden des DOIF-Beispiels 2 Sorten Bauchschmerzen:&lt;br /&gt;
:1. es zeigt dem Neuling gleich beim allerersten Kontakt mit FHEM mehrere Alternativen für denselben Sachverhalt auf, das hallte ich für verwirrend.&lt;br /&gt;
:2. DOIF verwendet eine proprietäre Syntax in regexp - auch diese hat zumindest in der Anfangszeit das Potential, den Neuling zu verwirren.&lt;br /&gt;
:Mein Ansatz ist &amp;quot;Einfachheit durch weglassen&amp;quot; - das würde möchte ich auch auf diese Diskussion und mithin DOIF anwenden.&lt;br /&gt;
:Vorschlag: aus diesem Artikel rauslassen, aber in die nächste Version des Einsteiger-pdf aufnehmen - das ist ja wesentlich umfangreicher und versucht, möglichst viele hilfreiche Module vorzustellen und z.T. auch zu erklären - dort wäre so ein DOIF-Artikel m.E. wesentlich besser aufgehoben.&lt;br /&gt;
:Wenn ich endlich mal zur besagten nächsten Version komme, melde ich mich wieder mit der Bitte um input.&lt;br /&gt;
: Gruß und schönen Tag allerseits, Uli&lt;br /&gt;
:--[[Benutzer:Uli|Uli]] ([[Benutzer Diskussion:Uli|Diskussion]]) 09:12, 19. Feb. 2017 (CET)&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-RC-4-2_Funkfernbedienung_4_Tasten&amp;diff=13917</id>
		<title>HM-RC-4-2 Funkfernbedienung 4 Tasten</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-RC-4-2_Funkfernbedienung_4_Tasten&amp;diff=13917"/>
		<updated>2016-01-29T14:00:35Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Hinweis zum Anlegen der Channles bei der baugleichen ROTO_ZEL-STG-RM-HS-4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HomeMatic Fernbedienung mit 4 Tasten in Form eines Schlüsselanhängers&lt;br /&gt;
==Features==&lt;br /&gt;
HomeMatic Fernbedienung mit 4 Tasten in Form eines Schlüsselanhängers, mitStatus-LED, die in den Farben Grün, Rot und Orange leuchten bzw. blinken kann.&lt;br /&gt;
Robuster Aufbau, Batterie ist eine normale Microzelle (AAA), Nachkauf daher günstiger als bei Sendern mit Knopfzellen, allerdings bedingt die Microzelle auch eine grösseres Gehäuse.&lt;br /&gt;
&lt;br /&gt;
==Hinweise zum Betrieb mit FHEM==&lt;br /&gt;
&lt;br /&gt;
=== Anbindung der Fernbedienung an fhem ===&lt;br /&gt;
Wie alle HomeMatic-Komponenten wird die Fernbedienung durch das Modul CUL_HM angebunden. Die Funkverbindung ist mittels einer HomeMatic-CCU, eines [[HMLAN Konfigurator]] oder eines CUL/CUNx/COC etc. im HM-Mode möglich.&lt;br /&gt;
&lt;br /&gt;
=== Anlernen der Fernbedienung an fhem ===&lt;br /&gt;
wie unter [[HomeMatic_Devices_pairen]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreichem Pairen sollte in etwa folgendes in der cfg stehen:&lt;br /&gt;
&lt;br /&gt;
 define CUL_HM_HM_RC_4_2_227C77 CUL_HM 227C77&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C23 .devInfo 040000&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77 .stc 40&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77 firmware 1.1&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77 model HM-RC-4-2&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77 room CUL_HM&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77 serialNr KEQ0456756&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77 subType remote&lt;br /&gt;
 define CUL_HM_HM_RC_4_2_227C77_Btn_01 CUL_HM 227C7701&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_01 model HM-RC-4-2&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_01 peerIDs &lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_01 room CUL_HM&lt;br /&gt;
 define CUL_HM_HM_RC_4_2_227C77_Btn_02 CUL_HM 227C7702&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_02 model HM-RC-4-2&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_02 room CUL_HM&lt;br /&gt;
 define CUL_HM_HM_RC_4_2_227C77_Btn_03 CUL_HM 227C7703&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_03 model HM-RC-4-2&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_03 room CUL_HM&lt;br /&gt;
 define CUL_HM_HM_RC_4_2_227C77_Btn_04 CUL_HM 227C7704&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_04 model HM-RC-4-2&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_04 room CUL_HM&lt;br /&gt;
&lt;br /&gt;
=== Auswertung===&lt;br /&gt;
Das Betätigen des Senders löst in der Regel zwei Events aus, da auch der Batteriestatus bei jeder Tastenbetätigung mit übermittelt wird.&lt;br /&gt;
&lt;br /&gt;
Eine unspezifische Abfrage der Art:&lt;br /&gt;
&lt;br /&gt;
 define act_on_Taste4 notify CUL_HM_HM_RC_4_2_227C77_Btn_04 set Aktor1 on&lt;br /&gt;
&lt;br /&gt;
wird also den Befehl &amp;quot;set Aktor1 on&amp;quot; 2x senden. Es ist daher in der Regel sinnvoll, das Button-Event explizit abzufragen, z.b. so:&lt;br /&gt;
&lt;br /&gt;
 define act_on_Taste4 notify CUL_HM_HM_RC_4_2_227C77_Btn_04:Short.* set Aktor1 on&lt;br /&gt;
&lt;br /&gt;
(Fängt kurze Tastendrücke ab, die Events der Form Short_100 generieren. 100 hiesse, dass die Taste 100 ms gedrückt wurde.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hinweis zum Anlegen der Channels bei der baugleichen ROTO_ZEL-STG-RM-HS-4 ===&lt;br /&gt;
Bei der baugleichen ROTO_ZEL-STG-RM-HS-4 wird mit Stand Januar 2016 von autocreate zwar das device selbst automatisch angelegt, jedoch nicht die 4 Kanäle für die 4 Tasten.&lt;br /&gt;
Die Kanäle müssen manuell angelegt werden. Startpunkt ist die HMID des device, z.B.&lt;br /&gt;
 1907C9&lt;br /&gt;
Die Kanäle werden dann angelegt mit der HMID, an die die Kanalnummer 01...04 angehängt werden, also&lt;br /&gt;
 1907C901&lt;br /&gt;
 1907C902&lt;br /&gt;
 1907C903&lt;br /&gt;
 1907C904&lt;br /&gt;
&lt;br /&gt;
Verwendet wird der reguläre define-Befehl, also&lt;br /&gt;
 define &amp;lt;Kanalname&amp;gt; CUL_HM 1907C901&lt;br /&gt;
usw.&lt;br /&gt;
Die Channels werden danach regulär unter dem device angezeigt und können bei Bedarf regulär ge&#039;&#039;&#039;peer&#039;&#039;&#039;t werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Sender)]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-RC-4-2_Funkfernbedienung_4_Tasten&amp;diff=13916</id>
		<title>HM-RC-4-2 Funkfernbedienung 4 Tasten</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-RC-4-2_Funkfernbedienung_4_Tasten&amp;diff=13916"/>
		<updated>2016-01-29T13:58:31Z</updated>

		<summary type="html">&lt;p&gt;Uli: HM: Anleitung zum Anlegen der Channels für ROTO_ZEL-STG-RM-HS-4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HomeMatic Fernbedienung mit 4 Tasten in Form eines Schlüsselanhängers&lt;br /&gt;
==Features==&lt;br /&gt;
HomeMatic Fernbedienung mit 4 Tasten in Form eines Schlüsselanhängers, mitStatus-LED, die in den Farben Grün, Rot und Orange leuchten bzw. blinken kann.&lt;br /&gt;
Robuster Aufbau, Batterie ist eine normale Microzelle (AAA), Nachkauf daher günstiger als bei Sendern mit Knopfzellen, allerdings bedingt die Microzelle auch eine grösseres Gehäuse.&lt;br /&gt;
&lt;br /&gt;
==Hinweise zum Betrieb mit FHEM==&lt;br /&gt;
&lt;br /&gt;
=== Anbindung der Fernbedienung an fhem ===&lt;br /&gt;
Wie alle HomeMatic-Komponenten wird die Fernbedienung durch das Modul CUL_HM angebunden. Die Funkverbindung ist mittels einer HomeMatic-CCU, eines [[HMLAN Konfigurator]] oder eines CUL/CUNx/COC etc. im HM-Mode möglich.&lt;br /&gt;
&lt;br /&gt;
=== Anlernen der Fernbedienung an fhem ===&lt;br /&gt;
wie unter [[HomeMatic_Devices_pairen]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreichem Pairen sollte in etwa folgendes in der cfg stehen:&lt;br /&gt;
&lt;br /&gt;
 define CUL_HM_HM_RC_4_2_227C77 CUL_HM 227C77&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C23 .devInfo 040000&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77 .stc 40&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77 firmware 1.1&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77 model HM-RC-4-2&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77 room CUL_HM&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77 serialNr KEQ0456756&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77 subType remote&lt;br /&gt;
 define CUL_HM_HM_RC_4_2_227C77_Btn_01 CUL_HM 227C7701&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_01 model HM-RC-4-2&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_01 peerIDs &lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_01 room CUL_HM&lt;br /&gt;
 define CUL_HM_HM_RC_4_2_227C77_Btn_02 CUL_HM 227C7702&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_02 model HM-RC-4-2&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_02 room CUL_HM&lt;br /&gt;
 define CUL_HM_HM_RC_4_2_227C77_Btn_03 CUL_HM 227C7703&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_03 model HM-RC-4-2&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_03 room CUL_HM&lt;br /&gt;
 define CUL_HM_HM_RC_4_2_227C77_Btn_04 CUL_HM 227C7704&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_04 model HM-RC-4-2&lt;br /&gt;
 attr CUL_HM_HM_RC_4_2_227C77_Btn_04 room CUL_HM&lt;br /&gt;
&lt;br /&gt;
=== Auswertung===&lt;br /&gt;
Das Betätigen des Senders löst in der Regel zwei Events aus, da auch der Batteriestatus bei jeder Tastenbetätigung mit übermittelt wird.&lt;br /&gt;
&lt;br /&gt;
Eine unspezifische Abfrage der Art:&lt;br /&gt;
&lt;br /&gt;
 define act_on_Taste4 notify CUL_HM_HM_RC_4_2_227C77_Btn_04 set Aktor1 on&lt;br /&gt;
&lt;br /&gt;
wird also den Befehl &amp;quot;set Aktor1 on&amp;quot; 2x senden. Es ist daher in der Regel sinnvoll, das Button-Event explizit abzufragen, z.b. so:&lt;br /&gt;
&lt;br /&gt;
 define act_on_Taste4 notify CUL_HM_HM_RC_4_2_227C77_Btn_04:Short.* set Aktor1 on&lt;br /&gt;
&lt;br /&gt;
(Fängt kurze Tastendrücke ab, die Events der Form Short_100 generieren. 100 hiesse, dass die Taste 100 ms gedrückt wurde.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hinweis zum Anlegen der Channles bei der baugleichen ROTO_ZEL-STG-RM-HS-4 ===&lt;br /&gt;
Bei der baugleichen ROTO_ZEL-STG-RM-HS-4 wird von autocreate zwar das device selbst, jedoch nicht die 4 Kanäle für die 4 Tasten automatisch angelegt.&lt;br /&gt;
Die Kanäle müssen manuell angelegt werden. Startpunkt ist die HMID des device, z.B.&lt;br /&gt;
 1907C9&lt;br /&gt;
Die Kanäle werden dann angelegt mit der HMID, an die die Kanalnummer 01...04 angehängt werden, also&lt;br /&gt;
 1907C901&lt;br /&gt;
 1907C902&lt;br /&gt;
 1907C903&lt;br /&gt;
 1907C904&lt;br /&gt;
&lt;br /&gt;
Verwendet wird der reguläre define-Befehl, also&lt;br /&gt;
 define &amp;lt;Kanalname&amp;gt; CULHM 1907C901&lt;br /&gt;
usw.&lt;br /&gt;
Die Channels werden danach regulär unter dem device angezeigt und können bei Bedarf regulär ge&#039;&#039;&#039;peer&#039;&#039;&#039;t werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Sender)]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Raspberry_Pi&amp;diff=12945</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Raspberry_Pi&amp;diff=12945"/>
		<updated>2015-11-19T17:25:54Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Nützliche Zusatzpakete */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beim &#039;&#039;&#039;Raspberry Pi&#039;&#039;&#039; handelt es sich um einen postkartengroßen Einplatinen-Computer, der von der Raspberry Pi Foundation entwickelt wird. Die Hardware basiert auf dem BCM 283x SoC (System-on-Chip) von Broadcom, einem ARM-Prozessor. Zu Hardwaredetails und den verschiedenen Modellen sowie Produktentwicklungen siehe [http://de.wikipedia.org/wiki/Raspberry_Pi#Hardware Wikipedia].&lt;br /&gt;
Dank der kleinen Abmessungen, dem recht geringen Energieverbrauch (bis ca. 4 Watt) sowie der günstigen Anschaffungskosten (ca. 30€) ist der Raspberry Pi eine attraktive Hardware für die Heimautomatisierung mit Fhem. Er ist dank dem Linux-Betriebssystem vollständig kompatibel zur aktuell vorhandenen und von FHEM unterstützen Hardware. Das derzeit empfohlene Standard-Image zum Betrieb des Raspberry Pi ist die auf Debian 7.0 Wheezy basierende Raspbian Distribution.&lt;br /&gt;
&lt;br /&gt;
== Installation / Setup ==&lt;br /&gt;
=== Betriebssystem ===&lt;br /&gt;
Das Betriebssystem sollte direkt bei Raspberry unter dem Link [http://www.raspberrypi.org/downloads http://www.raspberrypi.org/downloads] ([http://downloads.raspberrypi.org/raspbian_latest Raspbian]) geholt werden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Herunterladen des entsprechenden Archivs muss das Image entpackt und auf die Speicherkarte (SD-Karte bis Modell B / MicroSD ab Modell B+) geschrieben werden. Detaillierte englische Anleitungen zum Vorgehen für verschiedene Betriebssysteme stellt Raspberry [http://www.raspberrypi.org/documentation/installation/installing-images/README.md hier] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Unter &#039;&#039;&#039;Unix/Linux&#039;&#039;&#039; erfolgt dies via dd-Befehl. Zum Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo dd bs=1M if=2012-08-16-wheezy-raspbian.img of=/dev/sdz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Bei Angabe eines falschen Device hinter of= kann der Anfang der eigenen Festplatte überschrieben werden. (Datenverlust!)&lt;br /&gt;
&lt;br /&gt;
Je nach System/Distribution und vorhandenen Festplatten variiert das Device, z.B. /dev/mmcblk0 (Ubuntu), /dev/sdb, /dev/sdc oder /dev/rdisk1 (OSX). Folgende Möglichkeiten können helfen, das richtige Device zu ermitteln:&lt;br /&gt;
* Mit dem Befehl &amp;lt;code&amp;gt;df&amp;lt;/code&amp;gt; erhält kann eine Übersicht aller angeschlossenen und gemounteten(!) Speichermedien. &lt;br /&gt;
* Beim Einstecken der Speicherkarte in den PC wird in die Log-Datei &amp;lt;code&amp;gt;/var/log/messages&amp;lt;/code&amp;gt; ein Eintrag gemacht. Beispiel: &amp;lt;code&amp;gt;kernel: [2077612.776470] sd 14:0:0:0: [&#039;&#039;&#039;sdb&#039;&#039;&#039;] 7954432 512-byte logical blocks: (&#039;&#039;&#039;4.07 GB&#039;&#039;&#039;/3.79 GiB)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Mit dem Befehl fdisk kann die Größe eines bestimmten Devices geprüft werden: &amp;lt;code&amp;gt;fdisk -l /dev/sdb&amp;lt;/code&amp;gt; Beispielausgabe: &amp;lt;code&amp;gt;Platte /dev/sdb: 4072 MByte, 4072669184 Byte&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter &#039;&#039;&#039;Windows&#039;&#039;&#039; kann das Tool [https://launchpad.net/win32-image-writer Win32DiskImager] genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation des Images sollte der Raspberry Pi von der Speicherkarte booten.&lt;br /&gt;
&lt;br /&gt;
Um eventuell eine größere Speicherkarte komplett zu nutzen, kann dies per folgendem Menu erledigt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo raspi-config&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stand 08/14 grundsätzlich nicht mehr notwendig: Es kann erforderlich sein, einen KernelUpdate einzuspielen, um einen USB-Bug zu beheben. Dieses Update ist zu finden auf [https://github.com/Hexxeh/rpi-update github].&lt;br /&gt;
&lt;br /&gt;
=== Fhem ===&lt;br /&gt;
Die Installation auf dem Raspberry Pi kann nach der Installation des Betriebssystems über das Debian-Repository von Fhem, automatisiert per Skript oder auch manuell vorgenommen werden.&lt;br /&gt;
&lt;br /&gt;
==== Debian-Repository ====&lt;br /&gt;
Seit Oktober 2014 ({{Link2Forum|Topic=27679}}) kann Fhem auf Debian-basierten Systemen, wozu auch Raspian OS zählt, aus einem Debian-Repository installiert werden. Dabei werden neben Fhem selbst alle für den Betrieb von Fhem unabdingbaren Pakete automatisch mit installiert und eine Reihe weiterer Pakete für die Installation vorgeschlagen. Details zur Vorgehensweise finden sich direkt auf [https://debian.fhem.de https://debian.fhem.de]. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Bei manchen Distributionen ist es erforderlich die apt-Methode HTTPS nachzuinstallieren. Der folgende Befehl installiert die Methode:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install apt-transport-https&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Skript-basiert ====&lt;br /&gt;
Durch Ausführung des in diesem {{Link2Forum|Topic=15848|Message=103268}} dargestellten Skriptes nach Installation eines &amp;quot;nackten&amp;quot; Raspian OS wird automatisiert ein funktionsfähiges Fhem (inkl. korrekter Rechtevergabe) auf dem Raspberry Pi installiert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Bei dieser Installationsweise erfolgt kein automatischer Start von fhem. Um das zu erreichen, verwenden Sie die folgende &amp;quot;manuelle&amp;quot; Methode.&lt;br /&gt;
&lt;br /&gt;
==== Manuell ====&lt;br /&gt;
Die Installation von FHEM auf dem Raspberry Pi kann mit dem fertigen debian-package erledigt werden. Lediglich das Perl-Modul &amp;quot;Serialport&amp;quot; wird benötigt - Perl ist in der Regel bereits installiert, kann aber sicherheitshalber einfach mit dem apt-get-Befehl zugefügt werden:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install perl libdevice-serialport-perl&lt;br /&gt;
 sudo apt-get install libio-socket-ssl-perl&lt;br /&gt;
 # fhem-X.Y.deb bitte mit der [http://fhem.de/fhem.html#Download aktuellsten, stabilen Version] ersetzen&lt;br /&gt;
 wget  [http://fhem.de/fhem-X.Y.deb http://fhem.de/fhem-X.Y.deb]&lt;br /&gt;
 sudo dpkg -i fhem-X.Y.deb&lt;br /&gt;
&lt;br /&gt;
Möglicherweise ist es noch nötig, fehlende Abhängigkeiten aufzulösen. Das kann mit folgendem Befehl erledigt werden:&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas ausführlichere Anleitung gibt es auch [http://www.fhemwiki.de/wiki/FHEM_auf_Raspberry_PI_mit_COC_betreiben#FHEM_Installieren hier]&lt;br /&gt;
&lt;br /&gt;
=== Nützliche Zusatzpakete ===&lt;br /&gt;
Nachdem der Rpi eingerichtet ist, können weitere Pakete installiert werden. Keines davon ist zwingend erforderlich, um fhem grundsätzlich betreiben zu können. Einige Pakete erhöhen aber den Bedienungskomfort oder sind zur Nutzung bestimmter fhem-Module erforderlich. Hier eine Übersicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:10%&amp;quot; | Beschreibung&lt;br /&gt;
! style=&amp;quot;width:10%&amp;quot; | Paketname&lt;br /&gt;
! style=&amp;quot;width:50%&amp;quot; | Kontext&lt;br /&gt;
! style=&amp;quot;width:30%&amp;quot; | Installieren&lt;br /&gt;
|-&lt;br /&gt;
|fhem&lt;br /&gt;
|fhem&lt;br /&gt;
|Installiert eine komplett lauffähige fhem-Installation.&lt;br /&gt;
Details siehe auf [https://debian.fhem.de/ Stable build using aptitude], für Optionen siehe diesen [http://forum.fhem.de/index.php/topic,27679.0.html Forumsartikel]&lt;br /&gt;
Achtung: In der Befehlsliste rechts erstreckt sich der erste Befehl über 2 Zeilen!&lt;br /&gt;
| &amp;lt;code&amp;gt;sudo wget -qO - https://debian.fhem.de/archive.key &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; apt-key add -&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo deb https://debian.fhem.de/stable ./&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install fhem&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Zeitserver&lt;br /&gt;
|ntpdate&lt;br /&gt;
|Setzt die Systemzeit bei Start des RPi. Wird für fhem benötigt, da es sonst nicht startet.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install ntpdate&lt;br /&gt;
sudo ntpdate -u de.pool.ntp.org&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Perl JSON&lt;br /&gt;
|JSON&lt;br /&gt;
|Wird von einigen Modulen benötigt, z.B. harmony, iTunes&lt;br /&gt;
|&amp;lt;code&amp;gt;apt-get install libjson-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Samba-Server&lt;br /&gt;
|samba&lt;br /&gt;
|Mittels Samba kann man z.B. den Ordner /opt/fhem als Share freigeben. Dieser Share kann z.B. im Windows-Explorer als Laufwerk verbunden werden, so dass die Bearbeitung von config- und Programmdateien bequem möglich ist. Hier eine hilfreiche [https://chirale.wordpress.com/2012/08/31/turn-raspberry-into-a-small-nas-with-samba/ Kurzanleitung] aus der (wenn man auf einen speziellen user verzichtet) nur die Einträge für smb.conf gesetzt werden müssen.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install samba cifs-utils&amp;lt;/code&amp;gt;&lt;br /&gt;
Danach muss der share definiert werden mittels&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo nano /etc/samba/smb.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Mailversand&lt;br /&gt;
|sendEmail&lt;br /&gt;
|Wird benötigt, um Mails versenden zu können, bspw. für Alarm-Benachrichtigungen.&lt;br /&gt;
Nach Installation des Paketes benötigt man noch eine Routine in fhem gemäß [http://www.fhemwiki.de/wiki/E-Mail_senden#Raspberry_Pi diesem Forumsartikel]&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install sendEmail&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Wake-on-LAN&lt;br /&gt;
|etherwake&lt;br /&gt;
|Wird z.B. für das Modul WOL benötigt.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install etherwake&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Perl Telnet&lt;br /&gt;
|telnet&lt;br /&gt;
|Wird z.B. für das Modul FRITZBOX benötigt, da es eine im Netzwerk vorhandene Fritzbox über deren Telnet-Port anspricht.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Socat&lt;br /&gt;
|socat&lt;br /&gt;
|Kann verwendet werden, um auf anderen Rechnern im Netzwerk Linux-Befehle oder Skripts auszuführen. Auch können auf Slave-fhem-Installationen Befehl ausgeführt werden, z.B. mit &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;system(&amp;quot;echo &#039;set lampe on&#039; | /usr/bin/socat - TCP:1.2.3.4:7072&amp;quot;);&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1.2.3.4 muss natürlich durch die IP-Adresse des Zielrechners ersetzt werden.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install socat&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Libcrypt&lt;br /&gt;
|Libcrypt&lt;br /&gt;
|Perl libcrypt, erforderlich falls Homematic-devices mit AES verwendet werden sollen.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libcrypt-rijndael-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|libdatetime&lt;br /&gt;
|libdatetime&lt;br /&gt;
|Perl libdatetime, erforderlich für das Weather-Modul.&lt;br /&gt;
|&amp;lt;code&amp;gt;sudo apt-get install libdatetime-format-strptime-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== Netzteil ===&lt;br /&gt;
Der RPi verwendet ein USB Netzteil als Spannungsversorgung. Gemessen kann der RPi allein bereits um die 900mA Strom fordern. Das bringt kleine Netzteile, besonders wenn noch CULs oder WLAN Sticks an USB hängen schnell an die Grenze. Die Fehler die daraus resultieren sind Abstürze, Netzwerkprobleme uvm. Daher bitte ein ausreichend starkes Netzteil mit mind. 2000mA oder einen aktiven USB-HUB für die Periperie verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Echtzeituhr ===&lt;br /&gt;
Der RPi hat keine [http://de.wikipedia.org/wiki/Echtzeituhr Real-Time-Clock] (RTC), das heißt, dass er nach einem Neustart keine gültige (im Sinne von aktuell) Systemzeit hat, sondern ein Datum in der Vergangenheit. Dieses Problem wird sinnvollerweise mit einer [http://de.wikipedia.org/wiki/Network_Time_Protocol NTP-Konfiguration] umgangen.&lt;br /&gt;
&lt;br /&gt;
Dabei muss Sorge getragen werden, dass der [http://wiki.debian.org/NTP ntpd] schon einen Datums-/Zeitabgleich gemacht hat, bevor FHEM gestartet wird. Geschieht der Abgleich nicht vorher, sondern erst nachdem FHEM schon läuft, stellt FHEM die Logs zwar auf das nun aktuelle Datum um (die &amp;quot;alten&amp;quot; Logs mit dem eigentlich ungültigen Datum werden natürlich behalten), aber irgendetwas scheint FHEM dabei so zu belasten, dass es eine Last von über 0.8 bis 0.9 erzeugt. Diese Last besteht auf Dauer und verschwindet erst, wenn man das Ganze sauber durchkonfiguriert und FHEM neu gestartet hat. Die hohe Systemauslastung zeigt sich auch in einem sehr trägen Laden der FHEM-Webseiten in einem beliebigen Browser.&lt;br /&gt;
&lt;br /&gt;
=== Last durch Backup (während update) ===&lt;br /&gt;
Bei einen Update von FHEM durch den Befehl &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; kann ein Backup durchgeführt werden. Die (ggf. großen) Log-Dateien werden dabei ebenfalls archiviert. Während der Archivierung ist FHEM blockiert. Durch die beschränkte Leistungsfähigkeit des Raspberry Pi kann das Backup lange dauern. Durch Setzen des Attributs &amp;quot;&amp;lt;code&amp;gt;attr global backup_before_update 1&amp;lt;/code&amp;gt;&amp;quot; wird beim Update ein Backup erstellt. Dies war bis 18.08.2014 die Standardeinstellung, seitdem ist es standardmäßig ausgeschaltet und es gibt weitere Neuerungen (siehe [[FHEM_Command_Beispiele#update_...|update]]). Durch ein &amp;quot;&amp;lt;code&amp;gt;attr global updateInBackground 1&amp;lt;/code&amp;gt;&amp;quot; wird ein Backup im Hintergrund ausgeführt (Quelle: {{Link2Forum|Topic=15729}}). &lt;br /&gt;
&lt;br /&gt;
Alternative Möglichkeiten: &lt;br /&gt;
* Backup ausschalten und manuell durchführen &lt;br /&gt;
* Backup-Befehl anpassen und so große Dateien bzw. Verzeichnisse (log/) nicht archivieren&lt;br /&gt;
&lt;br /&gt;
== Watchdog einrichten ==&lt;br /&gt;
Vor allem wenn das Netzteil nicht stark genug ist, schmiert fhem gelegentlich ab (siehe oben - Netzteil). Man kann den RPi alle halbe Stunde prüfen lassen, ob fhem noch läuft, und ggf. einen Neustart durchführen lassen.&lt;br /&gt;
Wie man das einrichtet steht hier: [http://forum.fhem.de/index.php/topic,20553.0.html Einrichten eines Watchdog]&lt;br /&gt;
&lt;br /&gt;
== Interne Links ==&lt;br /&gt;
* Erste Schritte: [[FHEM auf Raspberry PI mit COC betreiben]]&lt;br /&gt;
* [[CUL am Raspberry Pi flashen]]&lt;br /&gt;
* [[Raspberry Pi und 1-Wire]]&lt;br /&gt;
&lt;br /&gt;
== Externe Links ==&lt;br /&gt;
* {{Link2Forum|Topic=33460|Message=264679}} zum Umzug von Raspberry B auf Raspberry Pi 2&lt;br /&gt;
* [http://www.raspberrypi.org/ Offizielle Webseite der Raspberry Pi Foundation]&lt;br /&gt;
* [http://www.raspberrypi.org/downloads Offizielle Downloads der Raspberry Pi Foundation]&lt;br /&gt;
* Blog mit dem Thema [http://www.meintechblog.de/2013/05/fhem-server-auf-dem-raspberry-pi-in-einer-stunde-einrichten/ FHEM-Server auf RaspBerry Pi in einer Stunde einrichten]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FHTTK:_Benachrichtigung_bei_offenem_Fenster&amp;diff=12887</id>
		<title>FHTTK: Benachrichtigung bei offenem Fenster</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FHTTK:_Benachrichtigung_bei_offenem_Fenster&amp;diff=12887"/>
		<updated>2015-11-15T17:29:58Z</updated>

		<summary type="html">&lt;p&gt;Uli: Beispiel-confi-Auszug umgestellt von @/% auf $NAME/$EVENT&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wer wird nicht gerne per Mail benachrichtigt, wenn ein Fenster auf- oder zugemacht wird? Richtig komfortabel ist es, wenn man dann auch noch gleich eine Liste aller FHTTK-devices mitgeliefert bekommt, die den Status &amp;quot;Window: Open&amp;quot; haben:&lt;br /&gt;
&lt;br /&gt;
in 99_marte.pm&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sub FHTTK_status {&lt;br /&gt;
 my @fhttks = devspec2array(&amp;amp;quot;TYPE=CUL_FHTTK&amp;amp;quot;);&lt;br /&gt;
 my @wopen = ();&lt;br /&gt;
 foreach(@fhttks) {&lt;br /&gt;
  my $fhttk_window = ReadingsVal($_, &amp;amp;quot;Window&amp;amp;quot;, &amp;amp;quot;nA&amp;amp;quot;);&lt;br /&gt;
  push (@wopen,$_) if ($fhttk_window eq &amp;amp;quot;Open&amp;amp;quot; );&lt;br /&gt;
 }&lt;br /&gt;
 my $num_wopen = @wopen;&lt;br /&gt;
 my $resultstring=&#039;&#039;;&lt;br /&gt;
 if ( $num_wopen gt 0 ) {&lt;br /&gt;
  $resultstring=&amp;amp;quot;folgende Fenster sind noch offen:\n\n&amp;amp;quot;;&lt;br /&gt;
  foreach(@wopen) {&lt;br /&gt;
   $resultstring.=&amp;amp;quot;- &amp;amp;quot;.$_.&amp;amp;quot;\n&amp;amp;quot;;&lt;br /&gt;
   Log 4, &amp;amp;quot;FHTTK_status: &amp;amp;quot;. $_. &amp;amp;quot;noch offen&amp;amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
 } else {&lt;br /&gt;
  $resultstring=&amp;amp;quot;alle Fenster sind derzeit geschlossen.&amp;amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 return $resultstring;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
in die Config &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define n_Fenster notify .*:Window.*(Open|Closed) { \&lt;br /&gt;
 my $window_state=ReadingsVal(&amp;amp;quot;$NAME&amp;amp;quot;, &amp;amp;quot;Window&amp;amp;quot;, &amp;amp;quot;nA&amp;amp;quot;);;\&lt;br /&gt;
 my $deftype=$defs{$NAME}{TYPE};;\&lt;br /&gt;
 return if ( $deftype ne &amp;amp;quot;CUL_FHTTK&amp;amp;quot; );;\&lt;br /&gt;
 if ( $defs{$NAME}{PREVSTATE} ne $window_state ) { \&lt;br /&gt;
  my $fhttk_status=FHTTK_status;;\&lt;br /&gt;
  my $subject=&amp;amp;quot;FHEM: Fenster $NAME &amp;amp;quot;.$window_state;; \&lt;br /&gt;
  fb_mail(&#039;xxx@@xxx.de&#039;,$subject,$fhttk_status);;\&lt;br /&gt;
  Log 3, &amp;amp;quot;$NAME: Window &amp;amp;quot;.$window_state;;\&lt;br /&gt;
 }\&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Achtung: Hier wird fb_mail als Mailer benutzt (siehe auch [[E-Mail senden]]) - je nach *nix-Version muss u.U. der Pfad angepasst sowie die entsprechenden Codezeilen in die .pm-Datei übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Randbemerkung zum Config-Code: Ein &amp;quot;notify &amp;amp;lt;sensor&amp;amp;gt;:Open&amp;quot; alleine reicht nicht. Da der Sensor in alle 2 Minuten seinen Status sendet, muss zudem der vorherige Status abgefragt werden, um nur bei Statusänderungen zu reagieren.&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Wakeuplight&amp;diff=12590</id>
		<title>Wakeuplight</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Wakeuplight&amp;diff=12590"/>
		<updated>2015-10-18T13:37:10Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Set up a wakeup light which will slowly dim-up a lamp, e.g. at your bedside, and will switch it off again after a certain time.&lt;br /&gt;
The solution requires a dimmer hardware device, e.g. FS20-di. In the example below the dimmer is named Lamp1.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
For FS20:&lt;br /&gt;
 define wakeup at *07:00:00 {\&lt;br /&gt;
  if (!$we) {\&lt;br /&gt;
   fhem &amp;quot;set Lamp1 dim100% 1280&amp;quot;;;\&lt;br /&gt;
   fhem &amp;quot;define wakeupOff at +00:40:00 set Lamp1 off&amp;quot;;;\&lt;br /&gt;
  }\&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
For Homematic:&lt;br /&gt;
 define wakeup at *07:00:00 {\&lt;br /&gt;
  if (!$we) {\&lt;br /&gt;
   fhem &amp;quot;set Lamp1 95 3600 1200&amp;quot;;;\&lt;br /&gt;
  }\&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
&lt;br /&gt;
The time indicated for wakeup (here: 7am) is the starting-time of the dim-procedure. The asterisk indicates this procedure shall be executed every day.&lt;br /&gt;
&lt;br /&gt;
The program uses the variable $we (weekend), so your wakeuplight will only turn on on weekdays. If you implement [http://fhem.de/commandref.html#holiday2we holiday2we], the wakeuplight will also remain off on holidays.&lt;br /&gt;
&lt;br /&gt;
For FS20, the set-command &#039;&#039;set sz_Nachtischlampe dim100% 1280&#039;&#039; will dim the lamp to 100% over a timespan of 1280 seconds, i.e. 21 minutes. Finally, the off-command is scheduled for 40 minutes from wakeuptime.&lt;br /&gt;
&lt;br /&gt;
For Homematic &#039;&#039;set Lamp1 95 3600 1200&#039;&#039; will dim the lamp slowly up to 95% over a timespan if 1200sec (20 min) and switch it off after 3600sec (1h).&lt;br /&gt;
&lt;br /&gt;
== Change of wakeuptime ==&lt;br /&gt;
To change the wakeuptime to e.g. 8am, type the following into the input-field on the fhem-frontend:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;modify wakeup *08:00:00&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Change of wakeuptime using sliders ==&lt;br /&gt;
Setting the wakeuptime using the &amp;quot;modify wakeup&amp;quot; command is inconvenient. Especially forgetting to set the asterisk (*) is a pain, as the wakeup-definition will disappear after next execution.&lt;br /&gt;
To avoid this pitfall, there is an option to add an additional pseudo-device which offers sliders to set the wakeup time:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define wakeupChange dummy&lt;br /&gt;
attr wakeupChange setList state:time&lt;br /&gt;
attr wakeupChange webCmd state&lt;br /&gt;
define n_wakeupChange notify wakeupChange {fhem(&amp;amp;quot;modify wakeup *%&amp;amp;quot;);;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation: A dummy device wakeupChange is defined. It carries sliders to select the wakeuptime. Subsequently, a notify is defined, which gets triggered whenever a time is selected using the sliders. This chosen time is then used to execute the &#039;modify wakeup&#039;-command for the actual wakeup-device.&lt;br /&gt;
&lt;br /&gt;
== Save the time even after a restart or rereadcfg ==&lt;br /&gt;
Because you don&#039;t want (to remember) to adjust the modified time after even restart or rereadcfg it is also possible to reread it from the ReadingsVal:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define n_wakeupChange notify (wakeupChange|global:INITIALIZED|global:REREADCFG).* \&lt;br /&gt;
   modify wakeup *{ReadingsVal(&amp;amp;quot;wakeupChange&amp;amp;quot;,&amp;amp;quot;state&amp;amp;quot;,&amp;amp;quot;05:30&amp;amp;quot;)}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation: We modify the previousley created dummy device wakeupChange so the notify is not just triggered when calling wakeupChange but also when we restart (global:INITIALIZED) or reread the configuration (global:REREADCFG). At last you should enter a fallback value in the modify, in case the given value isn&#039;t valid.&lt;br /&gt;
&lt;br /&gt;
== A small enhancement ==&lt;br /&gt;
Sometimes it happen, that you don&#039;t want to use your WakeUp-Function every day. So you can add a button to use it eg just on weekdays or on weekend. For that, we have to add a dummy:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define wakeUpStatus dummy&lt;br /&gt;
attr wakeUpStatus alias WeckerStatus&lt;br /&gt;
attr wakeUpStatus setList state:off,oneTime,daily,weekdays,weekend&lt;br /&gt;
attr wakeUpStatus webCmd state&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that we have to change the defined wakeUp-at with:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define wakeUp at *{ReadingsVal(&amp;quot;wakeUpChange&amp;quot;,&amp;quot;state&amp;quot;,&amp;quot;05:30&amp;quot;)} { \&lt;br /&gt;
  if ( ( Value(&amp;quot;wakeUpStatus&amp;quot;) eq &amp;quot;weekdays&amp;quot; &amp;amp;&amp;amp; !$we ) || ( Value(&amp;quot;wakeUpStatus&amp;quot;) eq &amp;quot;weekend&amp;quot; &amp;amp;&amp;amp; $we ) || \&lt;br /&gt;
  ( Value(&amp;quot;wakeUpStatus&amp;quot;) eq &amp;quot;daily&amp;quot; ) || ( Value(&amp;quot;wakeUpStatus&amp;quot;) eq &amp;quot;oneTime&amp;quot; ) ) { \&lt;br /&gt;
    { fhem (&amp;quot;set Lamp1 dim100% 1280&amp;quot;) } \&lt;br /&gt;
    { fhem (&amp;quot;define wakeupOff at +00:40:00 set Lamp1 off&amp;quot;) } \&lt;br /&gt;
    if ( Value(&amp;quot;wakeUpStatus&amp;quot;) eq &amp;quot;oneTime&amp;quot; ) { fhem (&amp;quot;set wakeUpStatus off&amp;quot;) } \&lt;br /&gt;
  } \&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From now on you can choose between daily, weekdays, weekend, one time and off.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-Sec-MDIR_Funk-Bewegungsmelder_innen&amp;diff=12506</id>
		<title>HM-Sec-MDIR Funk-Bewegungsmelder innen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-Sec-MDIR_Funk-Bewegungsmelder_innen&amp;diff=12506"/>
		<updated>2015-10-14T19:04:42Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Timer hinterlegen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homematic Bewegungsmelder für Innen&lt;br /&gt;
== Features ==&lt;br /&gt;
Infrarotbewegungsmelder für den Innenbereich im drehbaren Gehäuse, Betrieb mit 4 Mignon Zellen, sendet neben Auslösung auch Helligkeitswerte, Batteriezustand und Zustand des Gehäuses (Cover closed or open). Programmierung über Register per Funk.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Das Pairing sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden. Der Sensor muss hierfür geöffnet und die Anlerntastebetätigt werden. Hierbei gibt es zwei Konfigurationsmöglichkeiten:&lt;br /&gt;
&lt;br /&gt;
* Anlerntaste kurz betätigen, um den Bewegungsmelder ohne Helligkeitsschwelle anzulernen&lt;br /&gt;
* Anlernen mit Helligkeitsschwelle. Siehe Bedienungsanleitung S. 14f.&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der fhem.cfg:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define EG_Bewegungsmelder CUL_HM 19xxxx&lt;br /&gt;
attr EG_Bewegungsmelder .devInfo 810100&lt;br /&gt;
attr EG_Bewegungsmelder .stc 81&lt;br /&gt;
attr EG_Bewegungsmelder actCycle 000:10&lt;br /&gt;
attr EG_Bewegungsmelder actStatus alive&lt;br /&gt;
attr EG_Bewegungsmelder expert 2_full&lt;br /&gt;
attr EG_Bewegungsmelder firmware 1.0&lt;br /&gt;
attr EG_Bewegungsmelder model HM-SEC-MDIR&lt;br /&gt;
attr EG_Bewegungsmelder peerIDs &lt;br /&gt;
attr EG_Bewegungsmelder room Z_Alarm&lt;br /&gt;
attr EG_Bewegungsmelder serialNr JEQ00xxxxx&lt;br /&gt;
attr EG_Bewegungsmelder subType motionDetector&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=== Konfiguration über Register ===&lt;br /&gt;
==== Anzeige aller dekodierten Register ====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;name&amp;amp;gt; regList&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zeigt alle moeglichen &#039;dekodierten&#039; Register an. Fuer mdir sind dies alle, sollte also komplett sein. Hier findet man sowohl den Wertebereich alsauch eine (sehr) kleine Beschreibung.&lt;br /&gt;
Ausgabe:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
list:         register | range              | peer     |exp| description&lt;br /&gt;
   0: intKeyVisib      |   - to -           |          |exp| visibility of internal channel options:visib,invisib&lt;br /&gt;
   0: pairCentral      |   0 to 16777215    |          |   | pairing to central&lt;br /&gt;
   0: sabotageMsg      |   - to -           |          |   | enable sabotage message options:on,off&lt;br /&gt;
   1: brightFilter     |   0 to 7           |          |   | brightness filter - ignore light at night&lt;br /&gt;
   1: captInInterval   |   - to -           |          |   | capture within interval options:on,off&lt;br /&gt;
   1: evtFltrNum       |   1 to 15          |          |   | sensitivity - read sach n-th puls&lt;br /&gt;
   1: evtFltrPeriod    | 0.5 to 7.5s        |          |   | event filter period&lt;br /&gt;
   1: ledOnTime        |   0 to 1.275s      |          |exp| LED ontime&lt;br /&gt;
   1: minInterval      |   - to -           |          |   | minimum interval in sec options:240,60,120,30,15&lt;br /&gt;
   4: peerNeedsBurst   |   - to -           | required |   | peer expects burst options:on,off&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
==== Auslesen der register aus dem device ====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;set &amp;amp;lt;name&amp;amp;gt; getConfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Einige Register werden direkt in den Readings angezeigt, das sind die Wichtigsten. Bei Anwendung auf ein &amp;quot;device&amp;quot; werden auch die Kanaele ausgelesen, bei Kanal nur der Kanal.&lt;br /&gt;
Die Anzeige der Register in den Readings ist R-&amp;amp;lt;regname&amp;amp;gt;. Der &amp;quot;R-&amp;quot; prefix dient zur Sortierung und auch zur einfacheren Identifizierung, dass es ein Register ist.&lt;br /&gt;
&lt;br /&gt;
==== Editieren von Registerwerten ====&lt;br /&gt;
&lt;br /&gt;
Um z.B. das Meldeintervall von standardmäßig 240sek. auf 60sek. herabzusetzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;get EG_Bewegungsmelder regList&lt;br /&gt;
set EG_Bewegungsmelder getConfig&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anlernen drücken&lt;br /&gt;
&amp;lt;pre&amp;gt;get EG_Bewegungsmelder reg all&lt;br /&gt;
set EG_Bewegungsmelder regSet minInterval 60&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann wieder kurz anlernen drücken um die Daten auf den Sensor zu übertragen und mit &lt;br /&gt;
&amp;lt;pre&amp;gt;set EG_Bewegungsmelder getConfig&amp;lt;/pre&amp;gt;&lt;br /&gt;
Daten wieder auslesen, ob alles geklappt hat und mit &lt;br /&gt;
&amp;lt;pre&amp;gt;get EG_Bewegungsmelder reg all&amp;lt;/pre&amp;gt;&lt;br /&gt;
anzeigen lassen. Wenn  noch vor den Werten ein set_ steht, z.B. set_60 wurde der Befehl noch nicht übertragen. Erstmal eine Minute abwarten, dann einfach nochmal kurz anlernen drücken und die letzten beiden Schritte wiederholen.&lt;br /&gt;
Die Einstellungen können mit &lt;br /&gt;
&amp;lt;pre&amp;gt;get EG_Bewegungsmelder saveConfig EG_Bewegungsmelder.bak&amp;lt;/pre&amp;gt;&lt;br /&gt;
gespeichert werden. Dann wird eine Datei namens EG_Bewegungsmelder.bak in eurem fhem-root Verzeichnis mit den Einstellungen abgelegt.&lt;br /&gt;
&lt;br /&gt;
== Mögliche Zustände ==&lt;br /&gt;
=== Log-Auszug ===&lt;br /&gt;
In FHEM sind folgende Zustände des HM-Sec-MDIR im Log zu sehen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2012-05-30_16:17:26 EG_Bewegungsmelder motion&lt;br /&gt;
2012-05-30_16:17:26 EG_Bewegungsmelder motion: on (to broadcast)&lt;br /&gt;
2012-05-30_16:18:34 EG_Bewegungsmelder brightness: 43&lt;br /&gt;
2012-05-30_16:18:34 EG_Bewegungsmelder alive&lt;br /&gt;
2012-05-30_16:18:34 EG_Bewegungsmelder cover: closed&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spezielle Konfigurationen ==&lt;br /&gt;
=== Timer hinterlegen ===&lt;br /&gt;
Hier ein kommentiertes Beispiel aus dem Forum, um eine Lampe durch einen Bewegungsmelder einschalten zu lassen - allerdings nicht dauerhaft, sondern für einen konfigurierbaren Zeitraum:&lt;br /&gt;
 set Kueche_Bewegungsmelder peerChan 0 Kueche_Lampe single&lt;br /&gt;
 #Peeren der Geräte Bewegungsmelder und Steckdose &lt;br /&gt;
 &lt;br /&gt;
 set Kueche_Bewegungsmelder regSet minInterval 120&lt;br /&gt;
 # Bewegungsmelder so einstellen, dass er frühstens nach 120 Sec einen neuen Motion Befehl sendet&lt;br /&gt;
 &lt;br /&gt;
 set Kueche_Lampe regSet shOnTime 180 Kueche_Bewegungsmelder&lt;br /&gt;
 # Setzt den on-for-Timer auf 180 Sec&lt;br /&gt;
 &lt;br /&gt;
 set Kueche_Lampe regSet shSwJtOn on Kueche_Bewegungsmelder&lt;br /&gt;
 # sorgt dafür, dass der Aktor nicht beim zweiten Impuls des Bewegungsmelders wieder aus-, sondern immer wieder eingeschaltet wird (Zeitverlängerung)&lt;br /&gt;
 &lt;br /&gt;
 set Kueche_Lampe regSet shCtValLo 0 Kueche_Bewegungsmelder&lt;br /&gt;
 # Legt fest, ab welcher &amp;quot;Dunkelheit&amp;quot; der Schaltaktor schalten soll&lt;br /&gt;
&lt;br /&gt;
Mit shCtValHi kann man dann ab einer gewissen Helligkeit das Schalten verhindern (z.B. am Tag)&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Im Gegensatz zu identisch aussehenden FS20 Bewegungsmeldern leuchtet die LED bei Bewegung im Auslieferungszustand nicht auf. Dies ist aber kein Defekt, sondern im Register so eingestellt. Im Auslieferungszustand ist &lt;br /&gt;
 ledOnTime        :0 s&lt;br /&gt;
Dies ist (auf Kosten der Batterielebensdauer) wie oben unter &#039;&#039;&#039;Konfiguration über Register&#039;&#039;&#039; beschrieben änderbar.&lt;br /&gt;
&lt;br /&gt;
Wie bei allen Bewegungsmelder ist Vorsicht angebracht, wenn die Meldeintervalle verkürzt werden. Standard ist alle 240 sek. Bei kürzeren Intervallen wird das Sendekontingent schneller aufgebraucht. Zwar ist bei HM die Datenaussendung wegen der hohen Übertragungsrate recht kurz, sodass keine unmittelbare Gefahr besteht, wenn jedoch über dem HM Bewegungsmelder mittels FHEM SlowRF Komponenten (FS20, FHT) gesteuert werden, kann es je nach Auslegung der Konfiguration zu häufigen Auslösungen und schnellem Kontingentverbrauch kommen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
Anleitung [http://www.elv-downloads.de/service/manuals/76675_HM_Sec_MDIR_GE_V1_0.pdf] PDF&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Bewegungs- und Anwesenheitsmelder]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-Sec-MDIR_Funk-Bewegungsmelder_innen&amp;diff=12505</id>
		<title>HM-Sec-MDIR Funk-Bewegungsmelder innen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-Sec-MDIR_Funk-Bewegungsmelder_innen&amp;diff=12505"/>
		<updated>2015-10-14T19:03:28Z</updated>

		<summary type="html">&lt;p&gt;Uli: Beispielkonfiguration für Timer hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homematic Bewegungsmelder für Innen&lt;br /&gt;
== Features ==&lt;br /&gt;
Infrarotbewegungsmelder für den Innenbereich im drehbaren Gehäuse, Betrieb mit 4 Mignon Zellen, sendet neben Auslösung auch Helligkeitswerte, Batteriezustand und Zustand des Gehäuses (Cover closed or open). Programmierung über Register per Funk.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
Das Pairing sollte wie in [[HomeMatic Devices pairen]] beschrieben durchgeführt werden. Der Sensor muss hierfür geöffnet und die Anlerntastebetätigt werden. Hierbei gibt es zwei Konfigurationsmöglichkeiten:&lt;br /&gt;
&lt;br /&gt;
* Anlerntaste kurz betätigen, um den Bewegungsmelder ohne Helligkeitsschwelle anzulernen&lt;br /&gt;
* Anlernen mit Helligkeitsschwelle. Siehe Bedienungsanleitung S. 14f.&lt;br /&gt;
&lt;br /&gt;
=== FHEM Config-Auszug ===&lt;br /&gt;
Ein exemplarischer Auszug aus der fhem.cfg:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define EG_Bewegungsmelder CUL_HM 19xxxx&lt;br /&gt;
attr EG_Bewegungsmelder .devInfo 810100&lt;br /&gt;
attr EG_Bewegungsmelder .stc 81&lt;br /&gt;
attr EG_Bewegungsmelder actCycle 000:10&lt;br /&gt;
attr EG_Bewegungsmelder actStatus alive&lt;br /&gt;
attr EG_Bewegungsmelder expert 2_full&lt;br /&gt;
attr EG_Bewegungsmelder firmware 1.0&lt;br /&gt;
attr EG_Bewegungsmelder model HM-SEC-MDIR&lt;br /&gt;
attr EG_Bewegungsmelder peerIDs &lt;br /&gt;
attr EG_Bewegungsmelder room Z_Alarm&lt;br /&gt;
attr EG_Bewegungsmelder serialNr JEQ00xxxxx&lt;br /&gt;
attr EG_Bewegungsmelder subType motionDetector&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=== Konfiguration über Register ===&lt;br /&gt;
==== Anzeige aller dekodierten Register ====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;get &amp;amp;lt;name&amp;amp;gt; regList&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
zeigt alle moeglichen &#039;dekodierten&#039; Register an. Fuer mdir sind dies alle, sollte also komplett sein. Hier findet man sowohl den Wertebereich alsauch eine (sehr) kleine Beschreibung.&lt;br /&gt;
Ausgabe:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
list:         register | range              | peer     |exp| description&lt;br /&gt;
   0: intKeyVisib      |   - to -           |          |exp| visibility of internal channel options:visib,invisib&lt;br /&gt;
   0: pairCentral      |   0 to 16777215    |          |   | pairing to central&lt;br /&gt;
   0: sabotageMsg      |   - to -           |          |   | enable sabotage message options:on,off&lt;br /&gt;
   1: brightFilter     |   0 to 7           |          |   | brightness filter - ignore light at night&lt;br /&gt;
   1: captInInterval   |   - to -           |          |   | capture within interval options:on,off&lt;br /&gt;
   1: evtFltrNum       |   1 to 15          |          |   | sensitivity - read sach n-th puls&lt;br /&gt;
   1: evtFltrPeriod    | 0.5 to 7.5s        |          |   | event filter period&lt;br /&gt;
   1: ledOnTime        |   0 to 1.275s      |          |exp| LED ontime&lt;br /&gt;
   1: minInterval      |   - to -           |          |   | minimum interval in sec options:240,60,120,30,15&lt;br /&gt;
   4: peerNeedsBurst   |   - to -           | required |   | peer expects burst options:on,off&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
==== Auslesen der register aus dem device ====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;set &amp;amp;lt;name&amp;amp;gt; getConfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Einige Register werden direkt in den Readings angezeigt, das sind die Wichtigsten. Bei Anwendung auf ein &amp;quot;device&amp;quot; werden auch die Kanaele ausgelesen, bei Kanal nur der Kanal.&lt;br /&gt;
Die Anzeige der Register in den Readings ist R-&amp;amp;lt;regname&amp;amp;gt;. Der &amp;quot;R-&amp;quot; prefix dient zur Sortierung und auch zur einfacheren Identifizierung, dass es ein Register ist.&lt;br /&gt;
&lt;br /&gt;
==== Editieren von Registerwerten ====&lt;br /&gt;
&lt;br /&gt;
Um z.B. das Meldeintervall von standardmäßig 240sek. auf 60sek. herabzusetzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;get EG_Bewegungsmelder regList&lt;br /&gt;
set EG_Bewegungsmelder getConfig&amp;lt;/pre&amp;gt;&lt;br /&gt;
Anlernen drücken&lt;br /&gt;
&amp;lt;pre&amp;gt;get EG_Bewegungsmelder reg all&lt;br /&gt;
set EG_Bewegungsmelder regSet minInterval 60&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann wieder kurz anlernen drücken um die Daten auf den Sensor zu übertragen und mit &lt;br /&gt;
&amp;lt;pre&amp;gt;set EG_Bewegungsmelder getConfig&amp;lt;/pre&amp;gt;&lt;br /&gt;
Daten wieder auslesen, ob alles geklappt hat und mit &lt;br /&gt;
&amp;lt;pre&amp;gt;get EG_Bewegungsmelder reg all&amp;lt;/pre&amp;gt;&lt;br /&gt;
anzeigen lassen. Wenn  noch vor den Werten ein set_ steht, z.B. set_60 wurde der Befehl noch nicht übertragen. Erstmal eine Minute abwarten, dann einfach nochmal kurz anlernen drücken und die letzten beiden Schritte wiederholen.&lt;br /&gt;
Die Einstellungen können mit &lt;br /&gt;
&amp;lt;pre&amp;gt;get EG_Bewegungsmelder saveConfig EG_Bewegungsmelder.bak&amp;lt;/pre&amp;gt;&lt;br /&gt;
gespeichert werden. Dann wird eine Datei namens EG_Bewegungsmelder.bak in eurem fhem-root Verzeichnis mit den Einstellungen abgelegt.&lt;br /&gt;
&lt;br /&gt;
== Mögliche Zustände ==&lt;br /&gt;
=== Log-Auszug ===&lt;br /&gt;
In FHEM sind folgende Zustände des HM-Sec-MDIR im Log zu sehen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2012-05-30_16:17:26 EG_Bewegungsmelder motion&lt;br /&gt;
2012-05-30_16:17:26 EG_Bewegungsmelder motion: on (to broadcast)&lt;br /&gt;
2012-05-30_16:18:34 EG_Bewegungsmelder brightness: 43&lt;br /&gt;
2012-05-30_16:18:34 EG_Bewegungsmelder alive&lt;br /&gt;
2012-05-30_16:18:34 EG_Bewegungsmelder cover: closed&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spezielle Konfigurationen ==&lt;br /&gt;
=== Timer hinterlegen ===&lt;br /&gt;
Hier ein kommentiertes Beispiel aus dem Forum, eum in der Kueche eine Lampe durch einen Bewegungsmelder einschalten zu lassen - allerdings nicht dauerhaft, sondern für einen konfiguruerbaren Zeitraum:&lt;br /&gt;
 set Kueche_Bewegungsmelder peerChan 0 Kueche_Lampe single&lt;br /&gt;
 #Peeren der Geräte Bewegungsmelder und Steckdose &lt;br /&gt;
 &lt;br /&gt;
 set Kueche_Bewegungsmelder regSet minInterval 120&lt;br /&gt;
 # Bewegungsmelder so einstellen, dass er frühstens nach 120 Sec einen neuen Motion Befehl sendet&lt;br /&gt;
 &lt;br /&gt;
 set Kueche_Lampe regSet shOnTime 180 Kueche_Bewegungsmelder&lt;br /&gt;
 # Setzt den on-for-Timer auf 180 Sec&lt;br /&gt;
 &lt;br /&gt;
 set Kueche_Lampe regSet shSwJtOn on Kueche_Bewegungsmelder&lt;br /&gt;
 # sorgt dafür, dass der Aktor nicht beim zweiten Impuls des Bewegungsmelders wieder aus-, sondern immer wieder eingeschaltet wird (Zeitverlängerung)&lt;br /&gt;
 &lt;br /&gt;
 set Kueche_Lampe regSet shCtValLo 0 Kueche_Bewegungsmelder&lt;br /&gt;
 # Legt fest, ab welcher &amp;quot;Dunkelheit&amp;quot; der Schaltaktor schalten soll&lt;br /&gt;
&lt;br /&gt;
Mit shCtValHi kann man dann ab einer gewissen Helligkeit das Schalten verhindern (z.B. am Tag)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Im Gegensatz zu identisch aussehenden FS20 Bewegungsmeldern leuchtet die LED bei Bewegung im Auslieferungszustand nicht auf. Dies ist aber kein Defekt, sondern im Register so eingestellt. Im Auslieferungszustand ist &lt;br /&gt;
 ledOnTime        :0 s&lt;br /&gt;
Dies ist (auf Kosten der Batterielebensdauer) wie oben unter &#039;&#039;&#039;Konfiguration über Register&#039;&#039;&#039; beschrieben änderbar.&lt;br /&gt;
&lt;br /&gt;
Wie bei allen Bewegungsmelder ist Vorsicht angebracht, wenn die Meldeintervalle verkürzt werden. Standard ist alle 240 sek. Bei kürzeren Intervallen wird das Sendekontingent schneller aufgebraucht. Zwar ist bei HM die Datenaussendung wegen der hohen Übertragungsrate recht kurz, sodass keine unmittelbare Gefahr besteht, wenn jedoch über dem HM Bewegungsmelder mittels FHEM SlowRF Komponenten (FS20, FHT) gesteuert werden, kann es je nach Auslegung der Konfiguration zu häufigen Auslösungen und schnellem Kontingentverbrauch kommen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
Anleitung [http://www.elv-downloads.de/service/manuals/76675_HM_Sec_MDIR_GE_V1_0.pdf] PDF&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Bewegungs- und Anwesenheitsmelder]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12436</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12436"/>
		<updated>2015-10-03T18:09:47Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Devices löschen oder deaktivieren – delete, disable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Attribute&#039;&#039;&#039;&#039;&#039; können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Welche Attribute verfügbar sind, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block:&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039; zeigen Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt. Welche Readings angezeigt werden, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button {{Taste|attr}} klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
{{Hinweis|Im Block &#039;&#039;&#039;&#039;&#039;Probably associated with&#039;&#039;&#039;&#039;&#039;&#039; werden alle fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.}}&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf &#039;&#039;Schulungsraum&#039;&#039; klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify keinem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; und den Wert &#039;&#039;1&#039;&#039; auswählen, dann {{Taste|attr}} klicken), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also {{Taste|modify n_mySchalter1}}. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14B.png]]&lt;br /&gt;
&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Über den Link &#039;&#039;&#039;&#039;&#039;Device specific help&#039;&#039;&#039;&#039;&#039; können Sie sich übrigens den gesamten Hilfe-Text zu Ihrem device-Typ aus der commandref anschauen, hier also den Hilfetext zu &#039;&#039;notify&#039;&#039;. Dieser Link ist gerade zu Beginn häufig hilfreich.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
Im Detailscreen eines &#039;&#039;at&#039;&#039; wird übrigens im &#039;&#039;STATE&#039;&#039; der Zeitpunkt der nächsten Ausführung angezeigt. &lt;br /&gt;
&lt;br /&gt;
Diese Info erscheint auch in der Raum-Ansicht, falls Sie das &#039;&#039;at&#039;&#039; dort anzeigen lassen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18B.png]]&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12435</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12435"/>
		<updated>2015-10-03T18:06:52Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Bei Event ausführen - notify */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Attribute&#039;&#039;&#039;&#039;&#039; können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Welche Attribute verfügbar sind, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block:&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039; zeigen Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt. Welche Readings angezeigt werden, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button {{Taste|attr}} klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
{{Hinweis|Im Block &#039;&#039;&#039;&#039;&#039;Probably associated with&#039;&#039;&#039;&#039;&#039;&#039; werden alle fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.}}&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf &#039;&#039;Schulungsraum&#039;&#039; klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify keinem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also {{Taste|modify n_mySchalter1}}. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14B.png]]&lt;br /&gt;
&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Über den Link &#039;&#039;&#039;&#039;&#039;Device specific help&#039;&#039;&#039;&#039;&#039; können Sie sich übrigens den gesamten Hilfe-Text zu Ihrem device-Typ aus der commandref anschauen, hier also den Hilfetext zu &#039;&#039;notify&#039;&#039;. Dieser Link ist gerade zu Beginn häufig hilfreich.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
Im Detailscreen eines &#039;&#039;at&#039;&#039; wird übrigens im &#039;&#039;STATE&#039;&#039; der Zeitpunkt der nächsten Ausführung angezeigt. &lt;br /&gt;
&lt;br /&gt;
Diese Info erscheint auch in der Raum-Ansicht, falls Sie das &#039;&#039;at&#039;&#039; dort anzeigen lassen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18B.png]]&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12434</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12434"/>
		<updated>2015-10-03T18:03:23Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Bei Event ausführen - notify */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Attribute&#039;&#039;&#039;&#039;&#039; können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Welche Attribute verfügbar sind, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block:&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039; zeigen Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt. Welche Readings angezeigt werden, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button {{Taste|attr}} klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
{{Hinweis|Im Block &#039;&#039;&#039;&#039;&#039;Probably associated with&#039;&#039;&#039;&#039;&#039;&#039; werden alle fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.}}&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also {{Taste|modify n_mySchalter1}}. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14B.png]]&lt;br /&gt;
&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Über den Link &#039;&#039;&#039;&#039;&#039;Device specific help&#039;&#039;&#039;&#039;&#039; können Sie sich übrigens den gesamten Hilfe-Text zu Ihrem device-Typ aus der commandref anschauen, hier also den Hilfetext zu &#039;&#039;notify&#039;&#039;. Dieser Link ist gerade zu Beginn häufig hilfreich.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
Im Detailscreen eines &#039;&#039;at&#039;&#039; wird übrigens im &#039;&#039;STATE&#039;&#039; der Zeitpunkt der nächsten Ausführung angezeigt. &lt;br /&gt;
&lt;br /&gt;
Diese Info erscheint auch in der Raum-Ansicht, falls Sie das &#039;&#039;at&#039;&#039; dort anzeigen lassen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18B.png]]&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12433</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12433"/>
		<updated>2015-10-03T18:02:44Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Schalten von Geräten - set */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Attribute&#039;&#039;&#039;&#039;&#039; können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Welche Attribute verfügbar sind, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block:&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039; zeigen Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt. Welche Readings angezeigt werden, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button {{Taste|attr}} klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
{{Hinweis|Im Block &#039;&#039;&#039;&#039;&#039;Probably associated with&#039;&#039;&#039;&#039;&#039;&#039; die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.}}&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also {{Taste|modify n_mySchalter1}}. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14B.png]]&lt;br /&gt;
&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Über den Link &#039;&#039;&#039;&#039;&#039;Device specific help&#039;&#039;&#039;&#039;&#039; können Sie sich übrigens den gesamten Hilfe-Text zu Ihrem device-Typ aus der commandref anschauen, hier also den Hilfetext zu &#039;&#039;notify&#039;&#039;. Dieser Link ist gerade zu Beginn häufig hilfreich.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
Im Detailscreen eines &#039;&#039;at&#039;&#039; wird übrigens im &#039;&#039;STATE&#039;&#039; der Zeitpunkt der nächsten Ausführung angezeigt. &lt;br /&gt;
&lt;br /&gt;
Diese Info erscheint auch in der Raum-Ansicht, falls Sie das &#039;&#039;at&#039;&#039; dort anzeigen lassen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18B.png]]&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FLOORPLAN&amp;diff=12430</id>
		<title>FLOORPLAN</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FLOORPLAN&amp;diff=12430"/>
		<updated>2015-10-03T15:19:12Z</updated>

		<summary type="html">&lt;p&gt;Uli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Darstellung von Fhem-Objekten auf einem Hintergrundbild&lt;br /&gt;
|ModType=h&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef= --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModContact=Frontends ** Forenbereich für Diskussion, Fehlerberichte, ... ** --&amp;gt;&lt;br /&gt;
|ModTechName=95_FLOORPLAN.pm&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=86 ulimaass]}}&lt;br /&gt;
&lt;br /&gt;
[[FLOORPLAN]] ist eine Erweiterung, mit deren Hilfe Geräte bzw. deren mögliche Aktionen und Attribute auf einem selbsterstellten Hintergrundbild dargestellt werden können. Die Einbindung von FLOORPLAN erzeugt den zusätzlichen Menüeintrag &#039;&#039;Floorplans&#039;&#039;. Wird dieser Menüpunkt ausgewählt, wird in der Menüleiste links nur noch eine Liste der verfügbaren Floorplans und die &amp;quot;Rückkehrmöglichkeit&amp;quot; zum Standard-Fhem Menü angezeigt.&lt;br /&gt;
&lt;br /&gt;
Eine vom Modul-Autor verfasste ausführliche Schritt-für-Schritt Anleitung ist in einer [http://www.fhemwiki.de/wiki/Floorplan_Installations-Leitfaden deutschen] und einer [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/docs/fhem-floorplan-installation-guide.pdf?format=raw englischen] Version verfügbar.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Bevor sinnvoll mit der Floorplan- Einrichtung begonnen werden kann, sollten zumindest die [[Systemübersicht]], das [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Einsteigerdokument] und das [http://www.fhemwiki.de/wiki/Floorplan_Installations-Leitfaden Floorplan- Manual] gelesen und verstanden worden sein!}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Keine.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; FLOORPLAN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
:&amp;lt;code&amp;gt;userattr fp_&amp;lt;name&amp;gt; &amp;lt;top&amp;gt;,&amp;lt;left&amp;gt;[,&amp;lt;style&amp;gt;[,&amp;lt;description&amp;gt;]]&amp;lt;/code&amp;gt;&lt;br /&gt;
wird automatisch für den FLOORPLAN angelegt, sofern es noch nicht existiert...&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
* Aktuelle Uhrzeit auf einem FLOORPLAN anzeigen: {{Link2Forum|Topic=23629|Message=169082}}&lt;br /&gt;
* Animierte SVG-Icons für responsiven Floorplan: {{Link2Forum|Topic=26673|Message=196337}}&lt;br /&gt;
* [[Floorplan FHT Temperatur]]&lt;br /&gt;
* [[Remotecontrol]]&lt;br /&gt;
* [[Browsersteuerung, Seiten per JS autom. aufrufen]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Detaillierte Beispiele bitte als eigenen Abschnitt (=== Überschrift ===) einfügen --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== Größe von (WebLink) Icons ===&lt;br /&gt;
Sollten im Floorplan Icons in der falschen Größe angezeigt werden, kann das über Einstellungen im entsprechenden Stylesheet (.css) korrigiert / geändert werden. Beispiele (Screenshot) sowie Korrekturmöglichkeiten sind in {{Link2Forum|Topic=34898|LinkText=diesem Forenthread}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
*[[Floorplan_Installations-Leitfaden|Schritt-für-Schritt-Anleitung im Wiki]]&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/docs/fhem-floorplan-installation-guide_de.pdf?format=raw Schritt-für-Schritt-Anleitung] ([http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/docs/fhem-floorplan-installation-guide.pdf?format=raw Englische Version])&lt;br /&gt;
* [http://forum.fhem.de/index.php/topic,25778.0.html Diskussion] im Forum über die Verwendung von [http://www.sweethome3d.com/de/ Sweet Home 3D] zur Erstellung von Hintergrundbildern für FLOORPLAN &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FLOORPLAN&amp;diff=12429</id>
		<title>FLOORPLAN</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FLOORPLAN&amp;diff=12429"/>
		<updated>2015-10-03T15:16:12Z</updated>

		<summary type="html">&lt;p&gt;Uli: Verlinkung Installationsleitfaden deutsch geändert von pdf nach Wiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Darstellung von Fhem-Objekten auf einem Hintergrundbild&lt;br /&gt;
|ModType=h&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModCmdRef= --&amp;gt;&lt;br /&gt;
&amp;lt;!-- |ModContact=Frontends ** Forenbereich für Diskussion, Fehlerberichte, ... ** --&amp;gt;&lt;br /&gt;
|ModTechName=95_FLOORPLAN.pm&lt;br /&gt;
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=86 ulimaass]}}&lt;br /&gt;
&lt;br /&gt;
[[FLOORPLAN]] ist eine Erweiterung, mit deren Hilfe Geräte bzw. deren mögliche Aktionen und Attribute auf einem selbsterstellten Hintergrundbild dargestellt werden können. Die Einbindung von FLOORPLAN erzeugt den zusätzlichen Menüeintrag &#039;&#039;Floorplans&#039;&#039;. Wird dieser Menüpunkt ausgewählt, wird in der Menüleiste links nur noch eine Liste der verfügbaren Floorplans und die &amp;quot;Rückkehrmöglichkeit&amp;quot; zum Standard-Fhem Menü angezeigt.&lt;br /&gt;
&lt;br /&gt;
Eine vom Modul-Autor verfasste ausführliche Schritt-für-Schritt Anleitung ist in einer [[http://www.fhemwiki.de/wiki/Floorplan_Installations-Leitfaden deutschen]] und einer [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/docs/fhem-floorplan-installation-guide.pdf?format=raw englischen] Version verfügbar.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Bevor sinnvoll mit der Floorplan- Einrichtung begonnen werden kann, sollten zumindest die [[Systemübersicht]], das [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Einsteigerdokument] und das [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/docs/fhem-floorplan-installation-guide_de.pdf?format=raw Floorplan- Manual] gelesen und verstanden worden sein!}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Keine.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;name&amp;gt; FLOORPLAN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
:&amp;lt;code&amp;gt;userattr fp_&amp;lt;name&amp;gt; &amp;lt;top&amp;gt;,&amp;lt;left&amp;gt;[,&amp;lt;style&amp;gt;[,&amp;lt;description&amp;gt;]]&amp;lt;/code&amp;gt;&lt;br /&gt;
wird automatisch für den FLOORPLAN angelegt, sofern es noch nicht existiert...&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
* Aktuelle Uhrzeit auf einem FLOORPLAN anzeigen: {{Link2Forum|Topic=23629|Message=169082}}&lt;br /&gt;
* Animierte SVG-Icons für responsiven Floorplan: {{Link2Forum|Topic=26673|Message=196337}}&lt;br /&gt;
* [[Floorplan FHT Temperatur]]&lt;br /&gt;
* [[Remotecontrol]]&lt;br /&gt;
* [[Browsersteuerung, Seiten per JS autom. aufrufen]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Detaillierte Beispiele bitte als eigenen Abschnitt (=== Überschrift ===) einfügen --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
=== Größe von (WebLink) Icons ===&lt;br /&gt;
Sollten im Floorplan Icons in der falschen Größe angezeigt werden, kann das über Einstellungen im entsprechenden Stylesheet (.css) korrigiert / geändert werden. Beispiele (Screenshot) sowie Korrekturmöglichkeiten sind in {{Link2Forum|Topic=34898|LinkText=diesem Forenthread}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
*[[Floorplan_Installations-Leitfaden|Schritt-für-Schritt-Anleitung im Wiki]]&lt;br /&gt;
* [http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/docs/fhem-floorplan-installation-guide_de.pdf?format=raw Schritt-für-Schritt-Anleitung] ([http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/docs/fhem-floorplan-installation-guide.pdf?format=raw Englische Version])&lt;br /&gt;
* [http://forum.fhem.de/index.php/topic,25778.0.html Diskussion] im Forum über die Verwendung von [http://www.sweethome3d.com/de/ Sweet Home 3D] zur Erstellung von Hintergrundbildern für FLOORPLAN &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM Frontends]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Floorplan_Installations-Leitfaden&amp;diff=12428</id>
		<title>Floorplan Installations-Leitfaden</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Floorplan_Installations-Leitfaden&amp;diff=12428"/>
		<updated>2015-10-03T15:14:00Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Einführung */  Kurzübersicht eingefügt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dies ist ein Schritt-für-Schritt Einrichtungsleitfaden zur Erstellung eines floorplans mit fhem. Ein Implementierungsbeispiel demonstriert die Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
Dieser Leitfaden wurde ursprünglich von Ulrich Maass erstellt, der die Erlaubnis erteilt hat, ihn auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #CCCCCC;&amp;quot;&amp;gt;fhem.cfg –Zeilen haben in diesem Dokument einen grauen Hintergrund.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #EAF4F8;&amp;quot;&amp;gt;floorplanstyle.css –Zeilen haben in diesem Dokument einen blauen Hintergrund.&amp;lt;/div&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Einführung==&lt;br /&gt;
Dieses Beispiel erzeugt einen floorplan namens &#039;&#039;Grundriss&#039;&#039;, der z.B. so aussehen kann:&lt;br /&gt;
[[File:FloorplanInstallationGuide02.png|none]]&lt;br /&gt;
&lt;br /&gt;
Einige weitere Beispiel-Screenshots von mehreren Anwendern finden Sie in [https://groups.google.com/d/msg/fhem-users/4inexYPdtfw/Utr24BN0AlwJ diesem] und [https://groups.google.com/d/msg/fhem-users/dNP7TLalbhY/ehBGolJbaF0J diesem] Post.  Scrollen Sie dort auch ein wenig nach unten, um weitere Screenshots zu sehen.&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung eines solchen FLOORPLANS ist im Folgenden detailliert beschrieben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kurz-Überblick:&#039;&#039;&#039;&lt;br /&gt;
# In fhem {{Taste|define &amp;lt;myNAME&amp;gt; FLOORPLAN}} eingeben, also z.B. {{Taste|define Grundriss FLOORPLAN}}. Dadurch gibt&#039;s nen neuen Menüpunkt &#039;&#039;Floorplans&#039;&#039; oberhalb der Raum-Liste.&lt;br /&gt;
# Hintergrundbild erstellen, als &#039;&#039;&#039;.png&#039;&#039;&#039; speichern unter www/images/default.&lt;br /&gt;
# In fhem {{Taste|set WEB rereadicons}} ausführen - sonst erscheint das Hintergrundbild nicht!&lt;br /&gt;
# Zum Hinzufügen/Anpassen von devices muss das Attribut &#039;&#039;fp_arrange&#039;&#039; gesetzt werden mit {{Taste|attr &amp;lt;myNAME&amp;gt; fp_arrange 1}}. Dadurch erscheint im FLOORPLAN das Arrange-Menü im unteren Bildschirmbereich.&lt;br /&gt;
# Im Arrange-Menü aus der oberen Liste neue devices auswählen und {{Taste|add}} klicken, dann mit der Maus an die geünschte Stelle schieben.&lt;br /&gt;
# Im Arrange-Menü aus der unteren Liste ein device auswählen, dessen Darstellung geändert werden soll, dann {{Taste|select}} klicken. Anschließend aus der dropdown-Liste den Style auswählen und {{Taste|attr}} klicken.&lt;br /&gt;
# Zum Schluss den Arrange-Mode deaktivieren mit {{Taste|attr &amp;lt;myNAME&amp;gt; fp_arrange 0}} und in fhem die config speichern mit {{Taste|save}}, sonst ist nach dem nächsten restart alles wieder weg.&lt;br /&gt;
&lt;br /&gt;
Nun also die detailllierte Beschreibung.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitungen==&lt;br /&gt;
&lt;br /&gt;
===Einen floorplan definieren===&lt;br /&gt;
Als ersten Schritt definieren Sie einen neuen floorplan:&lt;br /&gt;
 define &amp;lt;name&amp;gt; FLOORPLAN&lt;br /&gt;
Beispiel:&lt;br /&gt;
 define Grundriss FLOORPLAN&lt;br /&gt;
Sie können mehrere floorplans anlegen, z.B. Haus, Keller, Erdgeschoss, Obergeschoss, Dach. &lt;br /&gt;
Oder Sie erstellen einen angepassten floorplan pro Person in Ihrem Haushalt.&lt;br /&gt;
&lt;br /&gt;
===Öffnen Sie den floorplan zum ersten Mal===&lt;br /&gt;
Aus Ihrem fhem Start-Bildschirm wählen Sie den neuen Menüpunkt &#039;&#039;Floorplans&#039;&#039;, dann klicken Sie Ihren floorplan an.&lt;br /&gt;
&lt;br /&gt;
====Das floorplan user-attribute====&lt;br /&gt;
Sie werden nun lediglich einen leeren Bildschirm sehen mit dem fhem-icon und einem Menü auf der linken Seite.&lt;br /&gt;
Im Hintergrund wurde jedoch das userattribute &#039;&#039;userattr fp_&amp;lt;name&amp;gt;&#039;&#039; in fhem.cfg zu Ihrer Liste der userattributes hinzugefügt:&lt;br /&gt;
 attr global userattr fm_fav fm_groups fm_name fm_order room structexclude webCmd fp_Grundriss&lt;br /&gt;
Dieses Attribut steuert, welche Geräte an welcher Stelle auf dem Bildschirm wie angezeigt werden sollen. &lt;br /&gt;
&lt;br /&gt;
===Zuweisen eines Hintergrundbilds===&lt;br /&gt;
&lt;br /&gt;
Speichern Sie das Hintergrundbild für Ihren floorplan. Sichern Sie dazu ein Bild im Format PNG mit dem Prefix &#039;&#039;fp_&#039;&#039; und dem Namen Ihres floorplans unterhalb Ihres fhem-Verzeichnisses im Ordner &#039;&#039;www/images/default&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Heißt Ihr floorplan also &amp;quot;Grundriss&amp;quot;, speichern Sie die Datei &#039;&#039;&#039;&#039;&#039;fp_Grundriss.png&#039;&#039;&#039;&#039;&#039; im Ordner &#039;&#039;&#039;&#039;&#039;www/images/default&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie bei der Benennung der Hintergundbild-Datei die Groß- und Kleinschreibung. Bedenken Sie auch, dass nur das Format &#039;&#039;&#039;.PNG&#039;&#039;&#039; verwendet werden kann. Soll eine SVG-Datei verwendet werden, muss diese über die CSS-Datei des floorplans eingebunden werden (siehe z.B. [[Floorplan_im_LCARS_Design#Einbinden des Hintergrundbildes|hier]]).&lt;br /&gt;
&lt;br /&gt;
Das Hintergrundbild im Beispiel-Screenshot wurde mit MS PowerPoint erstellt. Sie können zur Erstellung von 2D- oder 3D-Grundrissen auch [http://www.sweethome3d.com SweetHome3D] oder [http://www.imsidesign.com/Products/TurboFLOORPLAN TurboFloorplan 3D] verwenden.&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich muss Ihr Hintergrundbild keinen Grundriss zeigen. Sie können jedes beliebige Bild verwenden und dann z.B. Messwerte darauf anzeigen, beispielsweise für einen digitalen Bilderrahmen.&lt;br /&gt;
&lt;br /&gt;
Die beste Bildauflösung hängt vom verwendeten Anzeigegerät ab: Für iPads verwenden Sie z.B. 1024*768 (oder ein wenig darunter). Wenn Sie Ihren floorplan nur am Monitor verwenden wollen, möchten Sie vielleicht den gesamten Bildschirm füllen – dann hängt die Bildgröße von Ihrer Monitor-Auflösung ab. Das Hintergrundbild im Beipiel hat 1000x750px.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie Ihren floorplan nun wieder im Browser öffnen, wird auch das Hintergrundbild angezeigt (evtl. müssen Sie die Seite einmal neu laden). Wird das Hintergrundbild nicht angezeigt, prüfen Sie Pfad und Groß-/Kleinschreibung des Dateinamens.&lt;br /&gt;
&lt;br /&gt;
Die Position Ihres Hintergrundbilds auf dem Bildschirm kann in der verwendeten css-Datei (&#039;&#039;floorplanstyle.css&#039;&#039; oder &#039;&#039;darkfloorplanstyle.css&#039;&#039;) eingestellt werden.&lt;br /&gt;
Verändern Sie dazu die Werte des css-Parameters &#039;&#039;&#039;&#039;&#039;backimg&#039;&#039;&#039;&#039;&#039;, also z.B.&lt;br /&gt;
 #backimg {position:absolute; top:15px; left:190px;}&lt;br /&gt;
Details finden Sie im Abschnitt [[#Spezielle Formate für Ihren floorplan - floorplanstyle.css]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|fhem liest die Liste aller Bild-Dateien nur einmalig beim Start ein. Wenn Sie eine neue Datei hinzufügen, müssen Sie ein erneutes Einlesen anstossen. Geben Sie dazu im fhem-Kommandofeld &amp;lt;code&amp;gt;set WEB rereadicons&amp;lt;/code&amp;gt; ein. Ersetzen Sie ggf. &#039;&#039;WEB&#039;&#039; durch den Namen Ihrer Webinstanz.}}&lt;br /&gt;
&lt;br /&gt;
==Anordnen der Geräte==&lt;br /&gt;
===Wie Geräte dargestellt werden===&lt;br /&gt;
Hier erhalten Sie zunächst einen Überblick, wie Ihre Geräte dargestellt werden können. Im nächsten Abschnitt wird dann erklärt, welche Einstellungen dafür vorgenommen werden müssen.&lt;br /&gt;
&lt;br /&gt;
Jedes Gerät wird in einer (normalerweise unsichtbaren) Tabelle dargestellt. Die Anzahl der Tabellenzeilen hängt von der gewählten Darstellungsvariante ab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 0 - nur Symbol (devicestate)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dies ist wohl die am Häufigsten verwendete Darstellung. Das Symbol kann angeklickt werden und schaltet das zugehörige Gerät. Statt auch den Gerätenamen anzuzeigen, platzieren Sie das Symbol einfach an der &amp;quot;richtigen&amp;quot; Stelle auf Ihrem Grundriss.&lt;br /&gt;
[[File:FloorplanInstallationGuide03.png|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 1 - Name und Symbol/Status (devicename und devicestate)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wenn der Name über dem Symbol angezeigt werden soll (oder über dem Status des Geräts), wählen Sie Stil 1. Angezeigt wird die Beschreibung in floorplan (siehe unten), der Alias oder der Gerätename wie in der fhem.cfg definiert.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
[[File:FloorplanInstallationGuide04.png]]&lt;br /&gt;
[[File:FloorplanInstallationGuide05.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 2 - Name, Symbol/Status und Befehle (devicename, devicestate und devicecommands)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stil 2 zeigt den Namen, das Symbol bzw. den Status sowie alle für das Gerät verfügbaren Befehle an. Verwenden Sie &#039;&#039;webCmd&#039;&#039; und &#039;&#039;eventmap&#039;&#039; um die Befehlsliste Ihren Bedürfnissen anzupassen. Für einen Dimmer möchsten Sie also z.B. auch eine 50%-Stufe vorsehen.&lt;br /&gt;
Für Geräte mit einstellbaren Werten (z.B. Sollwerttemperatur bei einem Heizungsthermostat) zeigt Stil 2 auch das Feld für die Einstellung des Wertes und den Set-Schalter an. Auch Devices mit setList erhalten das Dropdown und einen Set-Button. Slider und Time sind mit Stil 2 in floorplan ebenfalls nutzbar.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
[[File:FloorplanInstallationGuide06.png]]&lt;br /&gt;
[[File:FloorplanInstallationGuide07.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 3 – Geräte-Messwert und optional Name (devicename und reading)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stil 3 zeigt einen beliebigen Messwert (device-reading) an, optional mit einer Beschreibung. Nützlich um z.B. nur die Temperatur eines S300TH anzuzeigen. Beachten Sie das Beispiel im Abschnitt [[#Device-Reading]].&lt;br /&gt;
[[File:FloorplanInstallationGuide08.png|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 4 – S300TH Temperatur &amp;amp; Feuchtigkeit&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stil 4 ist speziell für S300TH Sensoren bereitgestellt. Diese liefern Messwerte zu Temperatur und Feuchtigkeit. Bitte beachten Sie das Beispiel im Abschnitt [[#Temperatur &amp;amp; Feuchtgkeit]]&lt;br /&gt;
[[File:FloorplanInstallationGuide09.png|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 5 – Symbol/Status und Befehle&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stil 5 stellt Geräte wie Stil 2 dar, jedoch ohne Gerätenamen.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
[[File:FloorplanInstallationGuide31.png]]&lt;br /&gt;
[[File:FloorplanInstallationGuide32.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 6 – Geräte-Messwert inkl. Zeitstempel und optional Name&lt;br /&gt;
&lt;br /&gt;
Stil 6 stellt Geräte wie Stil 3 dar, zusätzlich wird der Zeitstempel des ausgewählten Readings angezeigt.&lt;br /&gt;
[[File:FloorplanInstallationGuide10.png|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 7 – Nur Kommandos&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stil 7 stellt Geräte ausschließlich mit ihren Kommandos dar, also ohne Name oder Staus/Icon. Dies kann z.B. verwendet werden, um für ein Thermostat ausschließlich das Dropdown für die Solltemperatur darzustellen.&lt;br /&gt;
[[File:FloorplanInstallationGuide11.png|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine ausführlichere Liste von Beipielen finden Sie im Abschnitt [[#Beispiele: Screenshot &amp;amp; Definition]].&lt;br /&gt;
&lt;br /&gt;
===Geräte anordnen===&lt;br /&gt;
&lt;br /&gt;
Um Geräte auf Ihrem floorplan anzuordnen, gibt es den &#039;&#039;&#039;&#039;&#039;Arrange Mode&#039;&#039;&#039;&#039;&#039;, der es Ihnen gestattet, ihren floorplan einzurichten. Um diesen Modus zu aktivieren, setzen Sie einfach das Attribut&lt;br /&gt;
 attr &amp;lt;floorplan&amp;gt; fp_arrange 1&lt;br /&gt;
Dieses Attribut aktiviert oder deaktiviert den &#039;&#039;Arrange-Mode&#039;&#039;. Die Liste wird im Format &#039;&#039;Gerätename (Raumname) Typ [(Alias)]&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
Wenn Ihr floorplan auch ein fhem-Kommandozeilen-Feld haben soll, setzen Sie außerdem:&lt;br /&gt;
 attr &amp;lt;floorplan&amp;gt; commandfield 1&lt;br /&gt;
&lt;br /&gt;
Navigieren Sie nun wieder zu Ihrem floorplan (fhem Hauptmenü -&amp;gt; &#039;&#039;Floorplans&#039;&#039; -&amp;gt; &amp;lt;Ihr-floorplan&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Im Arrange-Mode sehen Sie nun zwei Auswahlfelder am unteren Bildschirmrand:&lt;br /&gt;
[[File:FloorplanInstallationGuide12.png|none]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie zum Hinzufügen ein Gerät aus der oberen Liste, dann klicken Sie &#039;&#039;&#039;&#039;&#039;add&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
[[File:FloorplanInstallationGuide13.png|none]]&lt;br /&gt;
&lt;br /&gt;
Ihr Gerät wird nun an der Standard-Startposition 50 Pixel von oben (top), 200 Pixel von links (left) angezeigt.&lt;br /&gt;
&lt;br /&gt;
Alle Geräte auf dem Bildschirm können mit der Maus per Drag&amp;amp;Drop positioniert werden. Sobald Sie die Maustaste loslassen, wird Ihrer Konfiguration ein Attribut hnzugefügt. Details siehe unten.&lt;br /&gt;
&lt;br /&gt;
Außerdem erscheinen alle Geräte, die diesem floorplan hinzugefügt wurden, nun in der unteren Liste. Wählen Sie es dort aus und klicken Sie dann &#039;&#039;&#039;&#039;&#039;select&#039;&#039;&#039;&#039;&#039; um in die folgende Ansicht zu gelangen:&lt;br /&gt;
[[File:FloorplanInstallationGuide14.png|none]]&lt;br /&gt;
&lt;br /&gt;
Die unteren Felder sind Stil und Text (siehe unten). Setzen Sie die Werte wie gewünscht. Sobald Sie den &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039;-Schalter drücken, wird in Ihrer Konfiguration das folgende Attribut aktualisiert:&lt;br /&gt;
 attr &amp;lt;device&amp;gt; fp_&amp;lt;name&amp;gt; &amp;lt;top&amp;gt;,&amp;lt;left&amp;gt;[,&amp;lt;style&amp;gt;[,&amp;lt;description&amp;gt;]]&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;&amp;lt;top&amp;gt;&#039;&#039;&#039;&#039;&#039; ist die y-Position in Pixel vom oberen Bildschirmrand wie per Drag&amp;amp;Drop gesetzt&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;&amp;lt;left&amp;gt;&#039;&#039;&#039;&#039;&#039; ist die x-Position in Pixel vom linken Bildschirmrand wie per Drag&amp;amp;Drop gesetzt.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;&amp;lt;style&amp;gt;&#039;&#039;&#039;&#039;&#039; ist ein Stil aus der im vorigen Kapitel erläuterten Auswahl&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;&amp;lt;description&amp;gt;&#039;&#039;&#039;&#039;&#039; ist die Beschreibung zur Anzeige im floorpan. Sie ist optional, kann also leer bleiben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Einige Beispiele:&lt;br /&gt;
 attr ez_Schreibtisch   fp_Grundriss 285,430&lt;br /&gt;
 attr HomeStatus        fp_Grundriss 110,75,1&lt;br /&gt;
 attr ez_DruckerScanner fp_Grundriss 190,405,2,DruckerScanner&lt;br /&gt;
&lt;br /&gt;
Diese Attribute können verändert werden durch:&lt;br /&gt;
*Drag&amp;amp;Drop (top &amp;amp; left)&lt;br /&gt;
*Eingaben im Arrange-Mode-Popup (Style und Description)&lt;br /&gt;
*manuelle Eingabe des Attributs in das Kommandozeilen-Feld&lt;br /&gt;
*Änderung in der Detail-Ansicht des Gerätes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um ein Gerät aus einem floorplan zu entfernen, wählen Sie es mittels &#039;&#039;&#039;&#039;&#039;select&#039;&#039;&#039;&#039;&#039; aus und klicken dann &#039;&#039;&#039;&#039;&#039;deleteattr&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Erst durch Ausführen des Befehls &#039;&#039;&#039;&#039;&#039;save&#039;&#039;&#039;&#039;&#039;  werden die Attribute dauerhaft in die Konfigurationsdatei fhem.cfg geschrieben}}&lt;br /&gt;
&lt;br /&gt;
Hier ist die Liste der Attribute zur Erstellung des floorplan wie im Screenshot am Dokument-Anfang.&lt;br /&gt;
Dabei&lt;br /&gt;
*wurden WLAN.on.png und WLAN.off.png im Ordner fhem/images/default gespeichert&lt;br /&gt;
*wird für die Rolladensteuerung [[eventMap]] verwendet, um die on/off-Befehle als down/up anzuzeigen&lt;br /&gt;
*wird ein [[#iFrames, z.B. Wettervorhersage|iFrame]] zur Anzeige des Wetterberichts verwendet&lt;br /&gt;
*kann bei Stil 3 die Beschreibung aus den Teilen Reading-ID und Beschreibung bestehen.&lt;br /&gt;
*schaltet der Play/Pause-Schalter ein [[FS20_IRF_Infrarot-Fernbedienung|FS20-IRF]], welches Play/Pause an das Wiedergabegerät sendet&lt;br /&gt;
&lt;br /&gt;
 attr HomeStatus fp_Grundriss 110,75,1&lt;br /&gt;
 attr ez_Schreibtisch fp_Grundriss 285,430&lt;br /&gt;
 attr ez_LichtRegal fp_Grundriss 220,230,0&lt;br /&gt;
 attr ez_DruckerScanner fp_Grundriss 190,405,2,DruckerScanner&lt;br /&gt;
 attr sz_Leselampe fp_Grundriss 460,900,2&lt;br /&gt;
 attr sz_Stehlampe fp_Grundriss 650,940,0&lt;br /&gt;
 attr sz_LichtRegal fp_Grundriss 550,730,0&lt;br /&gt;
 attr wz_Licht fp_Grundriss 160,940&lt;br /&gt;
 attr wz_LampeKlein fp_Grundriss 290,880&lt;br /&gt;
 attr wz_Wandbeleuchtung fp_Grundriss 30,920&lt;br /&gt;
 attr whg_WLAN fp_Grundriss 180,75,1,WLAN&lt;br /&gt;
 attr ez_FHT fp_Grundriss 330,75,2,Innen&lt;br /&gt;
 attr ku_Downlight fp_Grundriss 620,520&lt;br /&gt;
 attr ko_LichtKorridor fp_Grundriss 330,560&lt;br /&gt;
 attr sz_Rollo fp_Grundriss 665,850,2,Rollo&lt;br /&gt;
 attr sz_Rollo eventMap on:Down off:Up&lt;br /&gt;
 define Wetter weblink iframe http://www.wetteronline.de/cgi-bin/hpweather?PLZ=80331&lt;br /&gt;
 attr Wetter htmlattr width=&amp;quot;220&amp;quot; height=&amp;quot;330&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
 attr Wetter fp_Grundriss 420,25&lt;br /&gt;
 attr ez_Aussensensor fp_Grundriss 260,75,3,temperature,Aussen&lt;br /&gt;
 attr wakeup fp_Grundriss 560,900,1,Wakeuptime&lt;br /&gt;
 attr wz_IRmacminiPlayPause fp_Grundriss 150,740&lt;br /&gt;
&lt;br /&gt;
===Anzeige der floorplan-Konfiguration===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie den Detail-Bildschirm Ihres floorplan-device anzeigen, sehen Sie dort eine Übersicht aller zugordneten Geräte wie in der oberhalb dargestellten Liste.&lt;br /&gt;
 &lt;br /&gt;
===Include statt &amp;quot;save&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Falls Sie sich angewöhnt haben, Ihre fhem-Konfiguration nicht über das Webfrontend [[FHEMWEB]] zu bearbeiten, sondern direkt in der Datei fhem.cfg, können Sie die Konfiguration Ihres floorplan anzeigen und den Inhalt in eine include-Datei übernehmen. Die Verwendung des Befehls &#039;&#039;save&#039;&#039; ist dann nicht erforderlich.&lt;br /&gt;
 get &amp;lt;name&amp;gt; config&lt;br /&gt;
Beispiel:&lt;br /&gt;
 get Grundriss config&lt;br /&gt;
&lt;br /&gt;
===Arrange-Mode nur für einzelne Ports===&lt;br /&gt;
&lt;br /&gt;
Der Arrange-Mode ist für den floorplan, auf dem das Attribut gesetzt ist, ausschließlich auf dem angegebenen Web-Device (also z.B. WEB) aktiviert. Das ist nützlich, wenn Sie als Entwickler immer WEB (=8083) nutzen, für Ihre Familie aber z.B. nur WEBP (=8085) &amp;quot;freigegeben&amp;quot; haben. So wird der arrange-Mode nur für Sie als Entwickler sichtbar.&lt;br /&gt;
Geben Sie als Attributwert den Namen des FHEMWEB-Devices an:&lt;br /&gt;
 attr &amp;lt;floorplan&amp;gt; fp_arrange WEB&lt;br /&gt;
&lt;br /&gt;
==Spezielle Formate für Ihren floorplan - floorplanstyle.css==&lt;br /&gt;
&lt;br /&gt;
Das Standard-Stylesheet für floorplans ist &#039;&#039;floorplan.css&#039;&#039;. Sie können aber auch den Parameter &#039;&#039;stylesheet&#039;&#039; verwenden, siehe nächstes Kapitel.&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide15.png]]&lt;br /&gt;
&lt;br /&gt;
Hierfür gibt es eine spezielle css-Datei.&lt;br /&gt;
Navigieren Sie im fhem-Web-Frontend nach &#039;&#039;Edit Files&#039;&#039;, dann klicken Sie auf floorplanstyle.css.&lt;br /&gt;
&lt;br /&gt;
Die css-Datei gestattet Ihnen das Gestalten für ganze Gruppen und/oder einzelne Geräte:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;class&#039;&#039;&#039;&#039;&#039; besteht aus Gerätetyp und fp_&amp;lt;name&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;id&#039;&#039;&#039;&#039;&#039; besteht aus dem Original-Gerätenamen wie im define angegeben.&lt;br /&gt;
&lt;br /&gt;
Hier die css-Einstellungen, die für den Screenshot am Beginn dieses Artikels verwendet wurden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
body     { background-color: #F0F0F0;&lt;br /&gt;
           font-family:Arial, sans-serif; &lt;br /&gt;
           font-size:9px; background-image:url(Grundriss.bak.png); &lt;br /&gt;
           background-repeat:no-repeat;  }&lt;br /&gt;
#menu.fp-list   { position:absolute; top:120px;left:20px; width:140px; font-size:11px;  }&lt;br /&gt;
#logo    { position:absolute; top: 10px; left: 10px; &lt;br /&gt;
           width:64px;  height:67px; background-image:url(fhem_smallscreen.png); }&lt;br /&gt;
#menu    { position:absolute; top:120px; left:20px; width:140px; }&lt;br /&gt;
#menu.floorplan   { position:absolute; top:120px; left:20px; width:140px; font-size:11px; }&lt;br /&gt;
#fpmenu.fp_arrange   { position:absolute; bottom:20px; left:20px; width:310px; font-size:9px; border:1px solid gray;}&lt;br /&gt;
#hdr     { position:absolute; top:10px; left:180px; }&lt;br /&gt;
#content { position:absolute; top:50px; left:180px; bottom:10px; right:10px; text-align:center}&lt;br /&gt;
#backimg {position:absolute; top:15px; left:190px;}&lt;br /&gt;
&lt;br /&gt;
a {  color: #278727; }&lt;br /&gt;
img {  border-style: none; }&lt;br /&gt;
table { -moz-border-radius:8px; border-radius:8px; }&lt;br /&gt;
&lt;br /&gt;
.fp_Grundriss   {border:0px solid gray;}&lt;br /&gt;
&lt;br /&gt;
.devicename     {font-size: 11px; text-align:center; }&lt;br /&gt;
.devicestate    {text-align:center; }&lt;br /&gt;
.devicecommands {font-size:14px; text-align:center; }&lt;br /&gt;
&lt;br /&gt;
#sz_Rollo.devicename     {font-size:14px;}&lt;br /&gt;
#sz_Rollo.devicecommands {font-size:12px; text-align:center; }&lt;br /&gt;
#ez_Aussensensor.devicestate  {color:green; font-size:30px; }&lt;br /&gt;
#HomeStatus.devicestate  {color:green; font-size:30px; }&lt;br /&gt;
table.dummy              {width:100px; }&lt;br /&gt;
table.FHT                {width:100px; }&lt;br /&gt;
#wakeup.devicestate      {color:green; font-size:11px; }&lt;br /&gt;
#ez_FHT.devicestate      {color:green; font-size:30px; }&lt;br /&gt;
#Home.fp_Grundriss       {font-size:14px; width:100px; }&lt;br /&gt;
#Home.fp_Media           {font-size:14px; text-align:left; }&lt;br /&gt;
#Media                   {font-size:14px; }&lt;br /&gt;
#Grundriss               {font-size:14px; text-align:left; }&lt;br /&gt;
&lt;br /&gt;
h2,h3,h4 { color:#52865D; line-height:1.3;&lt;br /&gt;
           margin-top:1.5em; font-family:Arial,Sans-serif; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Einstelllungen sind:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;.fp_&amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039; legt das default-Format für die gesamte Ausgabe fest.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;.devicename&#039;&#039;&#039;&#039;&#039; formatiert alle Gerätenamen sofern nicht je Gerät abweichend festgelegt&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;.devicestate&#039;&#039;&#039;&#039;&#039;	formatiert alle Gerätestatus bei Ausgabe als Text (nicht als Symbol)&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;.devicecommands&#039;&#039;&#039;&#039;&#039; formatiert alle Befehle, die unterhalb des Geräts/Symbols angezeigt werden&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;#backimg&#039;&#039;&#039;&#039;&#039; legt die Bildschirmposition Ihres Hintergrundbilds fest&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&amp;lt;!--[[File:FloorplanInstallationGuide16.png|right]]--&amp;gt;In der Test- und Einrichtungsphase können Sie einen Tabellen-Rahmen um ihre Geräte anzeigen lassen um das Positionieren zu vereinfachen. Dazu fügen Sie der floorplanstyle.css einfach folgenden Eintrag hinzu:&lt;br /&gt;
 .fp_Grundriss {border:1px solid gray;}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Verwenden anderer Stylesheets===&lt;br /&gt;
&lt;br /&gt;
Das Standard-Stylesheet für floorplans ist &#039;&#039;floorplan.css&#039;&#039;. Sie können aber auch das Attribut &#039;&#039;stylesheet&#039;&#039; verwenden, das Ihnen die Verwendung eigener css-Stylesheets erlaubt. Sogar ein eigenes für jeden floorplan. Durch Anlegen eines eigenen Stylesheets (z.B. beginnend mit einer Kopie von floorplanstyle.css oder darkfloorplanstyle.css) können Sie Formatierungen für Ihre eigenen Devices hinterlegen, die später nicht überschrieben werden, sollte ein Update für fhem durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;floorplan&amp;gt; stylesheet myfloorplanstylesheet.css&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Die Auswahl eines floorplan-Stylesheets erfolgt nicht in der fhem-Oberfläche unter &#039;&#039;Select Style&#039;&#039;!}}&lt;br /&gt;
&lt;br /&gt;
==Verwendung besonderer Icons==&lt;br /&gt;
&lt;br /&gt;
===Andere Symbole (Icons) verwenden===&lt;br /&gt;
&lt;br /&gt;
fhem gestattet die Verwendung eigener Symbole (Icons). Dazu wird eine Icon-Bilddatei in den Formaten &#039;&#039;&#039;jpg&#039;&#039;&#039;, &#039;&#039;&#039;png&#039;&#039;&#039; oder &#039;&#039;&#039;gif&#039;&#039;&#039; erstellt. Der Dateiname muss dabei nach dem Muster &#039;&#039;&amp;lt;devicename&amp;gt;.&amp;lt;state&amp;gt;.[jpg|png|gif]&#039;&#039; aufgebaut sein und im Ordner &#039;&#039;www/images/default&#039;&#039; abgelegt werden.&lt;br /&gt;
Um eine konsistente Darstellung zu erreichen, sollte die selbe Bildgröße wie die der Standard-Icons verwendet werden. Eine Möglichkeit dafür ist, eine bereits vorhandene Datei zu kopieren (z.B. FS20.on.jpg), richtig zu benennen und anschließend zu bearbeiten ohne die Größe zu ändern.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &#039;&#039;&#039;&#039;&#039;sz_Rollo.on.jpg&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;sz_Rollo.off.jpg&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
{{Hinweis|Werden die zugeordneten Dateien nicht gefunden, verwendet fhem die Standard-Icons &#039;&#039;&amp;lt;type&amp;gt;.&amp;lt;state&amp;gt;.[jpg{{!}}jpg{{!}}gif]&#039;&#039;, also z.B. &#039;&#039;FS20.on.jpg&#039;&#039;, &#039;&#039;FS20.off.jpg&#039;&#039;, ...}}&lt;br /&gt;
&lt;br /&gt;
===Andere Symbole (Icons) im floorplan als im fhem Web-Frontend===&lt;br /&gt;
&lt;br /&gt;
Um in einem floorplan andere Icons zu verwenden, als im fhem Standard-Web-Frontend (z.B. größere oder animierte Icons), werden diese einfach in einem Ordner abgelegt, der denselben Namen trägt, wie der floorplan selbst.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
Es existiert bereits ein floorplan namens &#039;&#039;PlotsPage&#039;&#039;, darin ein Device namens &#039;&#039;ez_Schreibtisch&#039;&#039;&lt;br /&gt;
 define PlotsPage FLOORPLAN&lt;br /&gt;
 define ez_Schreibtisch FS20 …&lt;br /&gt;
 attr ez_Schreibtisch fp_PlotsPage 100,100,1&lt;br /&gt;
Die zugrundeliegende fhemweb-Instanz heißt &#039;&#039;WEB&#039;&#039; und hat die Attribute &#039;&#039;longpoll 1&#039;&#039; sowie &#039;&#039;iconPath default:openautomation&#039;&#039;.&lt;br /&gt;
 define WEB FHEMWEB global&lt;br /&gt;
 attr WEB longpoll 1&lt;br /&gt;
 attr WEB iconPath default:openautomation&lt;br /&gt;
Für die Anzeige des Device &#039;&#039;ez_Schreibtisch&#039;&#039; werden also die &amp;quot;ganz normalen&amp;quot; Icons aus dem Ordner &#039;&#039;www/images/default&#039;&#039; verwendet.&lt;br /&gt;
&lt;br /&gt;
Um für dieses Device nun ein eigenes Icon zu verwenden, erzeugen Sie den entsprechenden Ordner &#039;&#039;&#039;&#039;&#039;www/images/PlotsPage&#039;&#039;&#039;&#039;&#039;. Darin legen Sie die Icons &#039;&#039;&#039;&#039;&#039;ez_Schreibtisch.on.png&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;ez_Schreibtisch.off.png&#039;&#039;&#039;&#039;&#039; ab. Anschließend rufen Sie zur Aktualisierung der Bild-Bibliothek einmal &amp;lt;code&amp;gt;set WEB rereadicons&amp;lt;/code&amp;gt; auf.&lt;br /&gt;
&lt;br /&gt;
Bei Anzeige des floorplans &#039;&#039;PlotsPage&#039;&#039; wird nun das Device &#039;&#039;ez_Schreibtisch&#039;&#039; mit den speziellen Icons angezeigt.&lt;br /&gt;
In anderen floorplans wie auch in fhemweb wird für dasselbe Device weiterhin das Icon aus dem Ordner &amp;quot;default&amp;quot; verwendet.&lt;br /&gt;
&lt;br /&gt;
==Relevante Web-Instanz-Attribute==&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie, dass die folgenden Attribute des zugrundeliegenden Web-Device [[FHEMWEB]] auch für floorplans berücksichtigt werden:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;smallscreen&#039;&#039;&#039;&lt;br /&gt;
|Der Apple Vollbildmodus wird ermöglicht: Klicken Sie in Safari auf &#039;&#039;Zum Homescreen hinzufügen&#039;&#039; um ein Icon zu erhalten, mit dem Sie fhem bzw. Ihren floorplan im Vollbildmodus - also ohne URL-Leiste - öffnen. Dadurch wirkt Ihr floorplan wie eine eigenständige App.&lt;br /&gt;
Außerdem wird die Bildschirmdarstellung für kleine Displays optimiert.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;touchpad&#039;&#039;&#039;&lt;br /&gt;
|Wie smallscreen, optimiert für die Darstellung auf Tablet-PCs.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;refresh&#039;&#039;&#039;&lt;br /&gt;
|Aktualisiert die angezeigte Browser-Seite regelmäßig.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;plotmode&#039;&#039;&#039;&lt;br /&gt;
|Für Plots (Graphen) kann der plotmode geändert werden. Default ist SVG.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;plotsize&#039;&#039;&#039;&lt;br /&gt;
|Für Plots (Graphen) kann die Darstellungsgröße geändert werden. Diese wird automatisch durch die Attribute &#039;&#039;smallscreen&#039;&#039; und &#039;&#039;touchpad&#039;&#039; gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;webname&#039;&#039;&#039;&lt;br /&gt;
|ändert die URL (default: /fhem)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;redirectCmd&#039;&#039;&#039;&lt;br /&gt;
|Wenn Sie die Schaltbefehle für ein Gerät in der URL zum Lernen betrachten möchten, setzen Sie dieses Attribut auf 0. Es wird dann die gesamte ausgewertete URL angezeigt. Default ist 1.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;longpoll&#039;&#039;&#039;&lt;br /&gt;
|Wenn Sie den Wert dieses Attributs auf 1 setzen (das ist auch der default), werden alle durch Icons dargestellten Schaltzustände einer bereits angezeigten Seite auch ohne ein &amp;quot;refresh&amp;quot; im Browser aktualisiert.&lt;br /&gt;
Dieses Attribut wirkt auch für alle floorplans, die unter dieser Webinstanz angezeigt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Verwendung mehrerer floorplans==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mehrere floorplans verwenden, für die Sie underschiedliche css-Stylesheets verwenden möchten, verwenden Sie das Attribut &amp;lt;code&amp;gt;stylesheet&amp;lt;/code&amp;gt;.&lt;br /&gt;
Wenn nur wenige Formatierungen abweichen sollen, folgen Sie dem u.g. Beipiel. Für gewöhnlich müssen Sie lediglich die class &#039;&#039;fp_&amp;lt;name&amp;gt;&#039;&#039; hinzufügen, wie bei &#039;&#039;&#039;&#039;&#039;.devicecommands&#039;&#039;&#039;&#039;&#039; unten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
body[id~=Grundriss]     { background-color: #F0F0F0;&lt;br /&gt;
                            font-family:Arial, sans-serif; &lt;br /&gt;
                            font-size:9px;  &lt;br /&gt;
                            background-image:url(Grundriss.png); &lt;br /&gt;
                            background-repeat:no-repeat;  }&lt;br /&gt;
#logo    { position:fixed; top:10px; left:20px;&lt;br /&gt;
           width:100px;  height:105px; background-image:url(fhem.png); }&lt;br /&gt;
#content { position:absolute; top:10px; left:10px; bottom:10px; right:10px; text-align:center}&lt;br /&gt;
&lt;br /&gt;
a {  color: #278727; }&lt;br /&gt;
img {  border-style: none; }&lt;br /&gt;
table { -moz-border-radius:8px; border-radius:8px; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.fp_Grundriss            {border:0px solid gray;}&lt;br /&gt;
&lt;br /&gt;
.devicename.fp_Grundriss     {font-size: 11px; text-align:center; }&lt;br /&gt;
.devicestate.fp_Grundriss    {text-align:center; }&lt;br /&gt;
.devicecommands.fp_Grundriss {font-size:14px; text-align:center; }&lt;br /&gt;
.devicecommands.fp_FirstFloor {font-size:8px; color:grey; text-align:center; }&lt;br /&gt;
&lt;br /&gt;
#sz_Rollo.devicename.fp_Grundriss     {font-size:14px;}&lt;br /&gt;
#sz_Rollo.devicecommands.fp_Grundriss {font-size:12px; text-align:center; }&lt;br /&gt;
#ez_Aussensensor.devicestate.fp_Grundriss  {color:green; font-size:30px; }&lt;br /&gt;
#HomeStatus.devicestate.fp_Grundriss  {color:green; font-size:30px; }&lt;br /&gt;
table.dummy.fp_Grundriss              {width:100px; }&lt;br /&gt;
table.FHT.fp_Grundriss                {width:100px; }&lt;br /&gt;
#wakeup.devicestate.fp_Grundriss      {color:green; font-size:11px; }&lt;br /&gt;
#ez_FHT.devicestate.fp_Grundriss      {color:green; font-size:30px; }&lt;br /&gt;
#Home                                 {font-size:14px; width:100px; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Standardmäßig angezeigter floorplan==&lt;br /&gt;
&lt;br /&gt;
Um nach dem Klick auf &#039;&#039;Floorplans&#039;&#039; auf der fhem Startseite unter Umgehung der floorplan-Auswahl direkt in einen floorplan zu springen, ordnen Sie das &#039;&#039;fp_default&#039;&#039;-Attribut einem Ihrer floorplans zu. So gelangen Sie direkt in Ihren default-floorplan, in dem Sie über das Menü auf der linken Seite in andere floorplans weiterspringen können.&lt;br /&gt;
 attr &amp;lt;floorplan-name&amp;gt; fp_default 1&lt;br /&gt;
Sie können dieses Attribut einfach in der Detail-Ansicht Ihres floorplans anlegen:&lt;br /&gt;
[[File:FloorplanInstallationGuide17.png]]&lt;br /&gt;
&lt;br /&gt;
==Floorplan ohne Menü==&lt;br /&gt;
Um einen Floorplan ohne Navigations-Menü zu erhalten, kann das Attribut &#039;&#039;fp_noMenu&#039;&#039; verwendet werden.&lt;br /&gt;
 attr Grundriss fp_noMenu 1&lt;br /&gt;
&lt;br /&gt;
Alternativ können eigene &amp;quot;Menüpunkte&amp;quot; eingefügt werden wie in [[#Weblinks]] und [[#Weblink mit Bild]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Bedenken Sie, dass sie Ihren floorplan nicht mehr über das Menü verlassen können. Möglicherweise müssen Sie die URL in Ihrem Browser ändern, um ihn zu verlassen.}}&lt;br /&gt;
&lt;br /&gt;
==Anderes Hintergrundbild==&lt;br /&gt;
&lt;br /&gt;
Wenn der Name Ihres Hintergrundbilds unabhängig sein soll vom Namen des floorplan, verwenden Sie das Attribut &#039;&#039;fp_backgroundimg&#039;&#039;. &lt;br /&gt;
 attr Grundriss fp_backgroundimg dateiname.png&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Sie können z.B. nachts ein anderes Hintergrundbild verwenden, als tagsüber:&lt;br /&gt;
 define a_fpbackimg at +*01:00 { \&lt;br /&gt;
      if ( isday() ) {fhem &amp;quot;attr Grundriss fp_backgroundimg Tag.png&amp;quot;} \&lt;br /&gt;
      else {fhem &amp;quot;attr Grundriss fp_backgroundimg Nacht.png&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
==Beispiele: Screenshot &amp;amp; Definition==&lt;br /&gt;
Es folgen einige Beispiele mit einem Screenshot, den zugehörigen Attributen und relevanten Einträgen in der css-Datei.&lt;br /&gt;
===Nur Symbol===&lt;br /&gt;
[[File:FloorplanInstallationGuide18.png]]&lt;br /&gt;
 define ez_LichtRegal FS20 6969 01&lt;br /&gt;
 attr ez_LichtRegal fp_Grundriss 220,230,0&lt;br /&gt;
 attr ez_LichtRegal model fs20st&lt;br /&gt;
 attr ez_LichtRegal room Esszimmer&lt;br /&gt;
&lt;br /&gt;
===Beschreibung und Symbol===&lt;br /&gt;
[[File:FloorplanInstallationGuide19.png]]&lt;br /&gt;
 define ku_Downlight FS20 696e 00&lt;br /&gt;
 attr ku_Downlight fp_Grundriss 620,520,1&lt;br /&gt;
 attr ku_Downlight model fs20st&lt;br /&gt;
 attr ku_Downlight room Kueche&lt;br /&gt;
&lt;br /&gt;
===Beschreibung, Symbol und Befehle===&lt;br /&gt;
[[File:FloorplanInstallationGuide20.png]] &lt;br /&gt;
 define sz_Leselampe FS20 696b 00&lt;br /&gt;
 attr sz_Leselampe fp_Grundriss 460,900,2,Leselampe&lt;br /&gt;
 attr sz_Leselampe webCmd on:dim50%:off&lt;br /&gt;
 attr sz_Leselampe eventMap on:on dim50%:half off:off&lt;br /&gt;
 attr sz_Leselampe model fs20di	&lt;br /&gt;
 attr sz_Leselampe room Schlafzimmer&lt;br /&gt;
&lt;br /&gt;
===Beschreibung und State===&lt;br /&gt;
[[File:FloorplanInstallationGuide21.png]] &lt;br /&gt;
 define HomeStatus dummy&lt;br /&gt;
 attr HomeStatus fp_Grundriss 110,75,1&lt;br /&gt;
&lt;br /&gt;
 #HomeStatus.devicestate  {color:green; font-size:30px; }&lt;br /&gt;
&lt;br /&gt;
===FHT-Temperatur===&lt;br /&gt;
[[File:FloorplanInstallationGuide22.png]] &lt;br /&gt;
 define ez_FHT FHT 5151&lt;br /&gt;
 attr ez_FHT fp_Grundriss 330,75,1,Innen&lt;br /&gt;
 attr ez_FHT retrycount 3&lt;br /&gt;
 attr ez_FHT room Wohnung,Esszimmer&lt;br /&gt;
&lt;br /&gt;
 #ez_FHT.devicestate      {color:green; font-size:30px; }&lt;br /&gt;
&lt;br /&gt;
===Device-Reading===&lt;br /&gt;
[[File:FloorplanInstallationGuide23.png|none]]&lt;br /&gt;
Z.B. können einzelne S300TH-Readings direkt angezeigt werden, wenn sie die Darstellung mit T: x H:y vermeiden möchten. Verwenden Sie dafür Stil 3. Verwenden Sie die Reading-ID (Groß-/Kleinschreibung beachten) als Beschreibung.&lt;br /&gt;
Besonderheit an diesem Stil: Die Beschreibung kann entweder nur die Reading-ID enthalten oder die Reading-ID gefolgt von der Anzeige-Beschreibung, leerstellenfrei getrennt durch ein Komma.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide24.png]]&lt;br /&gt;
ergibt&lt;br /&gt;
[[File:FloorplanInstallationGuide23.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide25.png]]&lt;br /&gt;
ergibt&lt;br /&gt;
[[File:FloorplanInstallationGuide26.png]]&lt;br /&gt;
&lt;br /&gt;
 define ez_Aussensensor CUL_WS 1&lt;br /&gt;
 attr ez_Aussensensor fp_Grundriss 260,75,3,temperature,Aussen&lt;br /&gt;
 attr ez_Aussensensor model S300&lt;br /&gt;
 attr ez_Aussensensor room Wohnung,Esszimmer&lt;br /&gt;
&lt;br /&gt;
 #ez_Aussensensor.devicestate  {color:green; font-size:30px; }&lt;br /&gt;
&lt;br /&gt;
===Temperatur &amp;amp; Feuchtigkeit===&lt;br /&gt;
 &lt;br /&gt;
[[File:FloorplanInstallationGuide09.png|none]]&lt;br /&gt;
S300TH-Sensoren liefern Messwerte zu Temperatur und Feuchtigkeit. Wollen Sie beide anzeigen, verwenden Sie Stil 4.&lt;br /&gt;
&lt;br /&gt;
 define ez_Aussensensor CUL_WS 1&lt;br /&gt;
 attr ez_Aussensensor fp_PlotsPage 100,600,4,Außen&lt;br /&gt;
 attr ez_Aussensensor model S300&lt;br /&gt;
 attr ez_Aussensensor room Wohnung,Esszimmer&lt;br /&gt;
&lt;br /&gt;
 .fp_tempvalue            {color:red; font-size:20px; }&lt;br /&gt;
 .fp_humvalue             {color:blue; font-size:20px; }&lt;br /&gt;
{{Hinweis|Um die Beschreibung auszublenden, geben Sie im Beschreibungsfeld &#039;&#039;&#039;&#039;&#039;&amp;amp;nbsp&#039;&#039;&#039;&#039;&#039; ein.}}&lt;br /&gt;
&lt;br /&gt;
===Weblinks===&lt;br /&gt;
[[File:FloorplanInstallationGuide27.png]] &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Home weblink link http://fritz.box:8083/fhem&lt;br /&gt;
attr Home fp_Grundriss 50,75,0,Home&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #Home                    {font-size:14px; width:100px; }&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Da jeder floorplan eine eigene URL hatt, können auch eigene Links auf andere floorplans verwenden werden.}}&lt;br /&gt;
&lt;br /&gt;
===Weblink mit Bild===&lt;br /&gt;
Wie im vorhergehenden Beispiel gezeigt, können Sie &#039;&#039;&#039;&#039;&#039;weblink link&#039;&#039;&#039;&#039;&#039; verwenden, um einen Text-Anchor zum Wechsel zu anderen URLs zu verwenden. Da floorplans eine eigene URL haben, können Sie so auch zwischen floorplans wechseln.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie als Link statt eines Texts ein Bild verwenden möchten, verwenden Sie dieses Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;define ImageAnchor weblink htmlCode { &#039;&amp;lt;a href=&amp;quot;http://&amp;lt;ip&amp;gt;:&amp;lt;port&amp;gt;/fhem/floorplan/Grundriss2&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;/icons/pic.png&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; }&amp;lt;/pre&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;href&#039;&#039;&#039; gibt die URL an, zu der Sie springen möchten, z.B. ein anderer floorplan.&lt;br /&gt;
*&#039;&#039;&#039;img&#039;&#039;&#039; gibt den Pfad der Bilddatei an&lt;br /&gt;
Nachdem Sie diesen &#039;&#039;weblink htmlCode&#039;&#039; definiert haben, können Sie ihn zu ihrem floorplan hinzufügen.&lt;br /&gt;
&lt;br /&gt;
===Bilddatei einfügen===&lt;br /&gt;
Um eine Bilddatei ohne Link einzufügen, verwenden Sie statt &#039;&#039;weblink htmlcode&#039;&#039; einfach  &#039;&#039;&#039;&#039;&#039;weblink image&#039;&#039;&#039;&#039;&#039;, Details siehe [http://fhem.de/commandref.html#weblink commandref].&lt;br /&gt;
&lt;br /&gt;
===Eigene Readings-Listen anzeigen===&lt;br /&gt;
&lt;br /&gt;
Das Einbinden beliebiger Listen von Device-Readings lässt sich ebenfalls mit &#039;&#039;weblink htmlCode&#039;&#039; erreichen. &lt;br /&gt;
#Laden Sie dazu aus [http://fhem.svn.sourceforge.net/viewvc/fhem/trunk/fhem/contrib/95_FLOORPLAN/?sortby=file diesem] SVN-Ordner die Datei &#039;&#039;&#039;&#039;&#039;99_myFloorplanList.pm&#039;&#039;&#039;&#039;&#039; herunter. &lt;br /&gt;
#Passen Sie die Zeilen im Abschnitt &#039;&#039;&#039;&#039;&#039;## Change this list as needed&#039;&#039;&#039;&#039;&#039; auf Ihre Bedürfnisse an. Sie können in diesem Abschnitt ggf. Zeilen löschen oder auch hinzufügen.&lt;br /&gt;
#Laden Sie mit dem fhem-Befehl &#039;&#039;&#039;&#039;&#039;reload 99_myFloorplanList.pm&#039;&#039;&#039;&#039;&#039; neu - ebenso nach jeder weiteren Programmänderung. Achten Sie nach jedem reload auf eventuelle Fehlermeldungen im Log.&lt;br /&gt;
#Binden Sie die Routine in das webfrontend ein mit &amp;lt;code&amp;gt;define w_WertListe1 weblink htmlCode {doWertListe1()}&amp;lt;/code&amp;gt;&lt;br /&gt;
#Dieser Weblink kann nun auf Ihrem floorplan hinzugefügt werden [[File:FloorplanInstallationGuide28.png|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht dann z.B. so aus:&lt;br /&gt;
[[File:FloorplanInstallationGuide29.png|none]]&lt;br /&gt;
&lt;br /&gt;
===iFrames, z.B. Wettervorhersage===&lt;br /&gt;
[[File:FloorplanInstallationGuide30.png|none]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Wetter weblink iframe http://www.wetteronline.de/cgi-bin/hpweather?PLZ=80331&lt;br /&gt;
attr Wetter fp_Grundriss 420,25&lt;br /&gt;
attr Wetter htmlattr width=&amp;quot;220&amp;quot; height=&amp;quot;330&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
attr Wetter room Plots&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
* Aktuelle Uhrzeit auf einem FLOORPLAN anzeigen: {{Link2Forum|Topic=23629|Message=169082}}&lt;br /&gt;
* Animierte SVG-Icons für responsiven Floorplan: {{Link2Forum|Topic=26673|Message=196337}}&lt;br /&gt;
* [[Floorplan FHT Temperatur]]&lt;br /&gt;
* [[Remotecontrol]]&lt;br /&gt;
* [[Browsersteuerung, Seiten per JS autom. aufrufen]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Floorplan_Installations-Leitfaden&amp;diff=12427</id>
		<title>Floorplan Installations-Leitfaden</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Floorplan_Installations-Leitfaden&amp;diff=12427"/>
		<updated>2015-10-03T14:50:39Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Einführung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dies ist ein Schritt-für-Schritt Einrichtungsleitfaden zur Erstellung eines floorplans mit fhem. Ein Implementierungsbeispiel demonstriert die Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
Dieser Leitfaden wurde ursprünglich von Ulrich Maass erstellt, der die Erlaubnis erteilt hat, ihn auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #CCCCCC;&amp;quot;&amp;gt;fhem.cfg –Zeilen haben in diesem Dokument einen grauen Hintergrund.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #EAF4F8;&amp;quot;&amp;gt;floorplanstyle.css –Zeilen haben in diesem Dokument einen blauen Hintergrund.&amp;lt;/div&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Einführung==&lt;br /&gt;
Dieses Beispiel erzeugt einen floorplan namens &#039;&#039;Grundriss&#039;&#039;, der z.B. so aussehen kann:&lt;br /&gt;
[[File:FloorplanInstallationGuide02.png|none]]&lt;br /&gt;
&lt;br /&gt;
Einige weitere Beispiel-Screenshots von mehreren Anwendern finden Sie in [https://groups.google.com/d/msg/fhem-users/4inexYPdtfw/Utr24BN0AlwJ diesem] und [https://groups.google.com/d/msg/fhem-users/dNP7TLalbhY/ehBGolJbaF0J diesem] Post.  Scrollen Sie dort auch ein wenig nach unten, um weitere Screenshots zu sehen.&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung eines solchen FLOORPLANS ist im Folgenden detailliert beschrieben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kurz-Überblick:&#039;&#039;&#039;&lt;br /&gt;
* Hintergrundbild erstellen als &#039;&#039;&#039;.png&#039;&#039;&#039;, speichern unter www/images/default. Details siehe [[#Zuweisen_eines_Hintergrundbilds]]&lt;br /&gt;
* In fhem {{Taste|set WEB rereadicons}} ausführen - sonst erscheint das Hintergrundbild nicht!&lt;br /&gt;
* In fhem {{Taste|define &amp;lt;NAME&amp;gt; FLOORPLAN}} eingeben. Dadurch gibt&#039;s nen neuen Menüpunkt &#039;&#039;Floorplans&#039;&#039; oberhalb der Raum-Liste.&lt;br /&gt;
* Zum Hinzufügen/Anpassen von devices auf dem FLOORPLAN muss das Attribut &#039;&#039;fp_arrange&#039;&#039; gesetzt werden mit {{Taste|attr &amp;lt;NAME&amp;gt; fp_arrange 1}}. Dadurch erscheint im FLOORPLAN das Arrange-Menü im unteren Bildschirmbereich.&lt;br /&gt;
* Im Arrange-Menü aus der oberen Liste neue devices auswählen und {{Taste|Select}} klicken, dann mit der Maus an die geünschte Stelle schieben.&lt;br /&gt;
* Im Arrange-Menü aus der unteren Liste device auswählen, dessen Darstellung geändert werden soll, dann {{Taste||select}} klicken. Anschließend aus der dropdown-Liste den Style auswählen und {{Taste|attr}} klicken.&lt;br /&gt;
&lt;br /&gt;
Nun also die detailllierte Beschreibung.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitungen==&lt;br /&gt;
&lt;br /&gt;
===Einen floorplan definieren===&lt;br /&gt;
Als ersten Schritt definieren Sie einen neuen floorplan:&lt;br /&gt;
 define &amp;lt;name&amp;gt; FLOORPLAN&lt;br /&gt;
Beispiel:&lt;br /&gt;
 define Grundriss FLOORPLAN&lt;br /&gt;
Sie können mehrere floorplans anlegen, z.B. Haus, Keller, Erdgeschoss, Obergeschoss, Dach. &lt;br /&gt;
Oder Sie erstellen einen angepassten floorplan pro Person in Ihrem Haushalt.&lt;br /&gt;
&lt;br /&gt;
===Öffnen Sie den floorplan zum ersten Mal===&lt;br /&gt;
Aus Ihrem fhem Start-Bildschirm wählen Sie den neuen Menüpunkt &#039;&#039;Floorplans&#039;&#039;, dann klicken Sie Ihren floorplan an.&lt;br /&gt;
&lt;br /&gt;
====Das floorplan user-attribute====&lt;br /&gt;
Sie werden nun lediglich einen leeren Bildschirm sehen mit dem fhem-icon und einem Menü auf der linken Seite.&lt;br /&gt;
Im Hintergrund wurde jedoch das userattribute &#039;&#039;userattr fp_&amp;lt;name&amp;gt;&#039;&#039; in fhem.cfg zu Ihrer Liste der userattributes hinzugefügt:&lt;br /&gt;
 attr global userattr fm_fav fm_groups fm_name fm_order room structexclude webCmd fp_Grundriss&lt;br /&gt;
Dieses Attribut steuert, welche Geräte an welcher Stelle auf dem Bildschirm wie angezeigt werden sollen. &lt;br /&gt;
&lt;br /&gt;
===Zuweisen eines Hintergrundbilds===&lt;br /&gt;
&lt;br /&gt;
Speichern Sie das Hintergrundbild für Ihren floorplan. Sichern Sie dazu ein Bild im Format PNG mit dem Prefix &#039;&#039;fp_&#039;&#039; und dem Namen Ihres floorplans unterhalb Ihres fhem-Verzeichnisses im Ordner &#039;&#039;www/images/default&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Heißt Ihr floorplan also &amp;quot;Grundriss&amp;quot;, speichern Sie die Datei &#039;&#039;&#039;&#039;&#039;fp_Grundriss.png&#039;&#039;&#039;&#039;&#039; im Ordner &#039;&#039;&#039;&#039;&#039;www/images/default&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie bei der Benennung der Hintergundbild-Datei die Groß- und Kleinschreibung. Bedenken Sie auch, dass nur das Format &#039;&#039;&#039;.PNG&#039;&#039;&#039; verwendet werden kann. Soll eine SVG-Datei verwendet werden, muss diese über die CSS-Datei des floorplans eingebunden werden (siehe z.B. [[Floorplan_im_LCARS_Design#Einbinden des Hintergrundbildes|hier]]).&lt;br /&gt;
&lt;br /&gt;
Das Hintergrundbild im Beispiel-Screenshot wurde mit MS PowerPoint erstellt. Sie können zur Erstellung von 2D- oder 3D-Grundrissen auch [http://www.sweethome3d.com SweetHome3D] oder [http://www.imsidesign.com/Products/TurboFLOORPLAN TurboFloorplan 3D] verwenden.&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich muss Ihr Hintergrundbild keinen Grundriss zeigen. Sie können jedes beliebige Bild verwenden und dann z.B. Messwerte darauf anzeigen, beispielsweise für einen digitalen Bilderrahmen.&lt;br /&gt;
&lt;br /&gt;
Die beste Bildauflösung hängt vom verwendeten Anzeigegerät ab: Für iPads verwenden Sie z.B. 1024*768 (oder ein wenig darunter). Wenn Sie Ihren floorplan nur am Monitor verwenden wollen, möchten Sie vielleicht den gesamten Bildschirm füllen – dann hängt die Bildgröße von Ihrer Monitor-Auflösung ab. Das Hintergrundbild im Beipiel hat 1000x750px.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie Ihren floorplan nun wieder im Browser öffnen, wird auch das Hintergrundbild angezeigt (evtl. müssen Sie die Seite einmal neu laden). Wird das Hintergrundbild nicht angezeigt, prüfen Sie Pfad und Groß-/Kleinschreibung des Dateinamens.&lt;br /&gt;
&lt;br /&gt;
Die Position Ihres Hintergrundbilds auf dem Bildschirm kann in der verwendeten css-Datei (&#039;&#039;floorplanstyle.css&#039;&#039; oder &#039;&#039;darkfloorplanstyle.css&#039;&#039;) eingestellt werden.&lt;br /&gt;
Verändern Sie dazu die Werte des css-Parameters &#039;&#039;&#039;&#039;&#039;backimg&#039;&#039;&#039;&#039;&#039;, also z.B.&lt;br /&gt;
 #backimg {position:absolute; top:15px; left:190px;}&lt;br /&gt;
Details finden Sie im Abschnitt [[#Spezielle Formate für Ihren floorplan - floorplanstyle.css]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|fhem liest die Liste aller Bild-Dateien nur einmalig beim Start ein. Wenn Sie eine neue Datei hinzufügen, müssen Sie ein erneutes Einlesen anstossen. Geben Sie dazu im fhem-Kommandofeld &amp;lt;code&amp;gt;set WEB rereadicons&amp;lt;/code&amp;gt; ein. Ersetzen Sie ggf. &#039;&#039;WEB&#039;&#039; durch den Namen Ihrer Webinstanz.}}&lt;br /&gt;
&lt;br /&gt;
==Anordnen der Geräte==&lt;br /&gt;
===Wie Geräte dargestellt werden===&lt;br /&gt;
Hier erhalten Sie zunächst einen Überblick, wie Ihre Geräte dargestellt werden können. Im nächsten Abschnitt wird dann erklärt, welche Einstellungen dafür vorgenommen werden müssen.&lt;br /&gt;
&lt;br /&gt;
Jedes Gerät wird in einer (normalerweise unsichtbaren) Tabelle dargestellt. Die Anzahl der Tabellenzeilen hängt von der gewählten Darstellungsvariante ab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 0 - nur Symbol (devicestate)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dies ist wohl die am Häufigsten verwendete Darstellung. Das Symbol kann angeklickt werden und schaltet das zugehörige Gerät. Statt auch den Gerätenamen anzuzeigen, platzieren Sie das Symbol einfach an der &amp;quot;richtigen&amp;quot; Stelle auf Ihrem Grundriss.&lt;br /&gt;
[[File:FloorplanInstallationGuide03.png|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 1 - Name und Symbol/Status (devicename und devicestate)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wenn der Name über dem Symbol angezeigt werden soll (oder über dem Status des Geräts), wählen Sie Stil 1. Angezeigt wird die Beschreibung in floorplan (siehe unten), der Alias oder der Gerätename wie in der fhem.cfg definiert.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
[[File:FloorplanInstallationGuide04.png]]&lt;br /&gt;
[[File:FloorplanInstallationGuide05.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 2 - Name, Symbol/Status und Befehle (devicename, devicestate und devicecommands)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stil 2 zeigt den Namen, das Symbol bzw. den Status sowie alle für das Gerät verfügbaren Befehle an. Verwenden Sie &#039;&#039;webCmd&#039;&#039; und &#039;&#039;eventmap&#039;&#039; um die Befehlsliste Ihren Bedürfnissen anzupassen. Für einen Dimmer möchsten Sie also z.B. auch eine 50%-Stufe vorsehen.&lt;br /&gt;
Für Geräte mit einstellbaren Werten (z.B. Sollwerttemperatur bei einem Heizungsthermostat) zeigt Stil 2 auch das Feld für die Einstellung des Wertes und den Set-Schalter an. Auch Devices mit setList erhalten das Dropdown und einen Set-Button. Slider und Time sind mit Stil 2 in floorplan ebenfalls nutzbar.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
[[File:FloorplanInstallationGuide06.png]]&lt;br /&gt;
[[File:FloorplanInstallationGuide07.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 3 – Geräte-Messwert und optional Name (devicename und reading)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stil 3 zeigt einen beliebigen Messwert (device-reading) an, optional mit einer Beschreibung. Nützlich um z.B. nur die Temperatur eines S300TH anzuzeigen. Beachten Sie das Beispiel im Abschnitt [[#Device-Reading]].&lt;br /&gt;
[[File:FloorplanInstallationGuide08.png|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 4 – S300TH Temperatur &amp;amp; Feuchtigkeit&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stil 4 ist speziell für S300TH Sensoren bereitgestellt. Diese liefern Messwerte zu Temperatur und Feuchtigkeit. Bitte beachten Sie das Beispiel im Abschnitt [[#Temperatur &amp;amp; Feuchtgkeit]]&lt;br /&gt;
[[File:FloorplanInstallationGuide09.png|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 5 – Symbol/Status und Befehle&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stil 5 stellt Geräte wie Stil 2 dar, jedoch ohne Gerätenamen.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
[[File:FloorplanInstallationGuide31.png]]&lt;br /&gt;
[[File:FloorplanInstallationGuide32.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 6 – Geräte-Messwert inkl. Zeitstempel und optional Name&lt;br /&gt;
&lt;br /&gt;
Stil 6 stellt Geräte wie Stil 3 dar, zusätzlich wird der Zeitstempel des ausgewählten Readings angezeigt.&lt;br /&gt;
[[File:FloorplanInstallationGuide10.png|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 7 – Nur Kommandos&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stil 7 stellt Geräte ausschließlich mit ihren Kommandos dar, also ohne Name oder Staus/Icon. Dies kann z.B. verwendet werden, um für ein Thermostat ausschließlich das Dropdown für die Solltemperatur darzustellen.&lt;br /&gt;
[[File:FloorplanInstallationGuide11.png|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine ausführlichere Liste von Beipielen finden Sie im Abschnitt [[#Beispiele: Screenshot &amp;amp; Definition]].&lt;br /&gt;
&lt;br /&gt;
===Geräte anordnen===&lt;br /&gt;
&lt;br /&gt;
Um Geräte auf Ihrem floorplan anzuordnen, gibt es den &#039;&#039;&#039;&#039;&#039;Arrange Mode&#039;&#039;&#039;&#039;&#039;, der es Ihnen gestattet, ihren floorplan einzurichten. Um diesen Modus zu aktivieren, setzen Sie einfach das Attribut&lt;br /&gt;
 attr &amp;lt;floorplan&amp;gt; fp_arrange 1&lt;br /&gt;
Dieses Attribut aktiviert oder deaktiviert den &#039;&#039;Arrange-Mode&#039;&#039;. Die Liste wird im Format &#039;&#039;Gerätename (Raumname) Typ [(Alias)]&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
Wenn Ihr floorplan auch ein fhem-Kommandozeilen-Feld haben soll, setzen Sie außerdem:&lt;br /&gt;
 attr &amp;lt;floorplan&amp;gt; commandfield 1&lt;br /&gt;
&lt;br /&gt;
Navigieren Sie nun wieder zu Ihrem floorplan (fhem Hauptmenü -&amp;gt; &#039;&#039;Floorplans&#039;&#039; -&amp;gt; &amp;lt;Ihr-floorplan&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Im Arrange-Mode sehen Sie nun zwei Auswahlfelder am unteren Bildschirmrand:&lt;br /&gt;
[[File:FloorplanInstallationGuide12.png|none]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie zum Hinzufügen ein Gerät aus der oberen Liste, dann klicken Sie &#039;&#039;&#039;&#039;&#039;add&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
[[File:FloorplanInstallationGuide13.png|none]]&lt;br /&gt;
&lt;br /&gt;
Ihr Gerät wird nun an der Standard-Startposition 50 Pixel von oben (top), 200 Pixel von links (left) angezeigt.&lt;br /&gt;
&lt;br /&gt;
Alle Geräte auf dem Bildschirm können mit der Maus per Drag&amp;amp;Drop positioniert werden. Sobald Sie die Maustaste loslassen, wird Ihrer Konfiguration ein Attribut hnzugefügt. Details siehe unten.&lt;br /&gt;
&lt;br /&gt;
Außerdem erscheinen alle Geräte, die diesem floorplan hinzugefügt wurden, nun in der unteren Liste. Wählen Sie es dort aus und klicken Sie dann &#039;&#039;&#039;&#039;&#039;select&#039;&#039;&#039;&#039;&#039; um in die folgende Ansicht zu gelangen:&lt;br /&gt;
[[File:FloorplanInstallationGuide14.png|none]]&lt;br /&gt;
&lt;br /&gt;
Die unteren Felder sind Stil und Text (siehe unten). Setzen Sie die Werte wie gewünscht. Sobald Sie den &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039;-Schalter drücken, wird in Ihrer Konfiguration das folgende Attribut aktualisiert:&lt;br /&gt;
 attr &amp;lt;device&amp;gt; fp_&amp;lt;name&amp;gt; &amp;lt;top&amp;gt;,&amp;lt;left&amp;gt;[,&amp;lt;style&amp;gt;[,&amp;lt;description&amp;gt;]]&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;&amp;lt;top&amp;gt;&#039;&#039;&#039;&#039;&#039; ist die y-Position in Pixel vom oberen Bildschirmrand wie per Drag&amp;amp;Drop gesetzt&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;&amp;lt;left&amp;gt;&#039;&#039;&#039;&#039;&#039; ist die x-Position in Pixel vom linken Bildschirmrand wie per Drag&amp;amp;Drop gesetzt.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;&amp;lt;style&amp;gt;&#039;&#039;&#039;&#039;&#039; ist ein Stil aus der im vorigen Kapitel erläuterten Auswahl&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;&amp;lt;description&amp;gt;&#039;&#039;&#039;&#039;&#039; ist die Beschreibung zur Anzeige im floorpan. Sie ist optional, kann also leer bleiben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Einige Beispiele:&lt;br /&gt;
 attr ez_Schreibtisch   fp_Grundriss 285,430&lt;br /&gt;
 attr HomeStatus        fp_Grundriss 110,75,1&lt;br /&gt;
 attr ez_DruckerScanner fp_Grundriss 190,405,2,DruckerScanner&lt;br /&gt;
&lt;br /&gt;
Diese Attribute können verändert werden durch:&lt;br /&gt;
*Drag&amp;amp;Drop (top &amp;amp; left)&lt;br /&gt;
*Eingaben im Arrange-Mode-Popup (Style und Description)&lt;br /&gt;
*manuelle Eingabe des Attributs in das Kommandozeilen-Feld&lt;br /&gt;
*Änderung in der Detail-Ansicht des Gerätes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um ein Gerät aus einem floorplan zu entfernen, wählen Sie es mittels &#039;&#039;&#039;&#039;&#039;select&#039;&#039;&#039;&#039;&#039; aus und klicken dann &#039;&#039;&#039;&#039;&#039;deleteattr&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Erst durch Ausführen des Befehls &#039;&#039;&#039;&#039;&#039;save&#039;&#039;&#039;&#039;&#039;  werden die Attribute dauerhaft in die Konfigurationsdatei fhem.cfg geschrieben}}&lt;br /&gt;
&lt;br /&gt;
Hier ist die Liste der Attribute zur Erstellung des floorplan wie im Screenshot am Dokument-Anfang.&lt;br /&gt;
Dabei&lt;br /&gt;
*wurden WLAN.on.png und WLAN.off.png im Ordner fhem/images/default gespeichert&lt;br /&gt;
*wird für die Rolladensteuerung [[eventMap]] verwendet, um die on/off-Befehle als down/up anzuzeigen&lt;br /&gt;
*wird ein [[#iFrames, z.B. Wettervorhersage|iFrame]] zur Anzeige des Wetterberichts verwendet&lt;br /&gt;
*kann bei Stil 3 die Beschreibung aus den Teilen Reading-ID und Beschreibung bestehen.&lt;br /&gt;
*schaltet der Play/Pause-Schalter ein [[FS20_IRF_Infrarot-Fernbedienung|FS20-IRF]], welches Play/Pause an das Wiedergabegerät sendet&lt;br /&gt;
&lt;br /&gt;
 attr HomeStatus fp_Grundriss 110,75,1&lt;br /&gt;
 attr ez_Schreibtisch fp_Grundriss 285,430&lt;br /&gt;
 attr ez_LichtRegal fp_Grundriss 220,230,0&lt;br /&gt;
 attr ez_DruckerScanner fp_Grundriss 190,405,2,DruckerScanner&lt;br /&gt;
 attr sz_Leselampe fp_Grundriss 460,900,2&lt;br /&gt;
 attr sz_Stehlampe fp_Grundriss 650,940,0&lt;br /&gt;
 attr sz_LichtRegal fp_Grundriss 550,730,0&lt;br /&gt;
 attr wz_Licht fp_Grundriss 160,940&lt;br /&gt;
 attr wz_LampeKlein fp_Grundriss 290,880&lt;br /&gt;
 attr wz_Wandbeleuchtung fp_Grundriss 30,920&lt;br /&gt;
 attr whg_WLAN fp_Grundriss 180,75,1,WLAN&lt;br /&gt;
 attr ez_FHT fp_Grundriss 330,75,2,Innen&lt;br /&gt;
 attr ku_Downlight fp_Grundriss 620,520&lt;br /&gt;
 attr ko_LichtKorridor fp_Grundriss 330,560&lt;br /&gt;
 attr sz_Rollo fp_Grundriss 665,850,2,Rollo&lt;br /&gt;
 attr sz_Rollo eventMap on:Down off:Up&lt;br /&gt;
 define Wetter weblink iframe http://www.wetteronline.de/cgi-bin/hpweather?PLZ=80331&lt;br /&gt;
 attr Wetter htmlattr width=&amp;quot;220&amp;quot; height=&amp;quot;330&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
 attr Wetter fp_Grundriss 420,25&lt;br /&gt;
 attr ez_Aussensensor fp_Grundriss 260,75,3,temperature,Aussen&lt;br /&gt;
 attr wakeup fp_Grundriss 560,900,1,Wakeuptime&lt;br /&gt;
 attr wz_IRmacminiPlayPause fp_Grundriss 150,740&lt;br /&gt;
&lt;br /&gt;
===Anzeige der floorplan-Konfiguration===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie den Detail-Bildschirm Ihres floorplan-device anzeigen, sehen Sie dort eine Übersicht aller zugordneten Geräte wie in der oberhalb dargestellten Liste.&lt;br /&gt;
 &lt;br /&gt;
===Include statt &amp;quot;save&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Falls Sie sich angewöhnt haben, Ihre fhem-Konfiguration nicht über das Webfrontend [[FHEMWEB]] zu bearbeiten, sondern direkt in der Datei fhem.cfg, können Sie die Konfiguration Ihres floorplan anzeigen und den Inhalt in eine include-Datei übernehmen. Die Verwendung des Befehls &#039;&#039;save&#039;&#039; ist dann nicht erforderlich.&lt;br /&gt;
 get &amp;lt;name&amp;gt; config&lt;br /&gt;
Beispiel:&lt;br /&gt;
 get Grundriss config&lt;br /&gt;
&lt;br /&gt;
===Arrange-Mode nur für einzelne Ports===&lt;br /&gt;
&lt;br /&gt;
Der Arrange-Mode ist für den floorplan, auf dem das Attribut gesetzt ist, ausschließlich auf dem angegebenen Web-Device (also z.B. WEB) aktiviert. Das ist nützlich, wenn Sie als Entwickler immer WEB (=8083) nutzen, für Ihre Familie aber z.B. nur WEBP (=8085) &amp;quot;freigegeben&amp;quot; haben. So wird der arrange-Mode nur für Sie als Entwickler sichtbar.&lt;br /&gt;
Geben Sie als Attributwert den Namen des FHEMWEB-Devices an:&lt;br /&gt;
 attr &amp;lt;floorplan&amp;gt; fp_arrange WEB&lt;br /&gt;
&lt;br /&gt;
==Spezielle Formate für Ihren floorplan - floorplanstyle.css==&lt;br /&gt;
&lt;br /&gt;
Das Standard-Stylesheet für floorplans ist &#039;&#039;floorplan.css&#039;&#039;. Sie können aber auch den Parameter &#039;&#039;stylesheet&#039;&#039; verwenden, siehe nächstes Kapitel.&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide15.png]]&lt;br /&gt;
&lt;br /&gt;
Hierfür gibt es eine spezielle css-Datei.&lt;br /&gt;
Navigieren Sie im fhem-Web-Frontend nach &#039;&#039;Edit Files&#039;&#039;, dann klicken Sie auf floorplanstyle.css.&lt;br /&gt;
&lt;br /&gt;
Die css-Datei gestattet Ihnen das Gestalten für ganze Gruppen und/oder einzelne Geräte:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;class&#039;&#039;&#039;&#039;&#039; besteht aus Gerätetyp und fp_&amp;lt;name&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;id&#039;&#039;&#039;&#039;&#039; besteht aus dem Original-Gerätenamen wie im define angegeben.&lt;br /&gt;
&lt;br /&gt;
Hier die css-Einstellungen, die für den Screenshot am Beginn dieses Artikels verwendet wurden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
body     { background-color: #F0F0F0;&lt;br /&gt;
           font-family:Arial, sans-serif; &lt;br /&gt;
           font-size:9px; background-image:url(Grundriss.bak.png); &lt;br /&gt;
           background-repeat:no-repeat;  }&lt;br /&gt;
#menu.fp-list   { position:absolute; top:120px;left:20px; width:140px; font-size:11px;  }&lt;br /&gt;
#logo    { position:absolute; top: 10px; left: 10px; &lt;br /&gt;
           width:64px;  height:67px; background-image:url(fhem_smallscreen.png); }&lt;br /&gt;
#menu    { position:absolute; top:120px; left:20px; width:140px; }&lt;br /&gt;
#menu.floorplan   { position:absolute; top:120px; left:20px; width:140px; font-size:11px; }&lt;br /&gt;
#fpmenu.fp_arrange   { position:absolute; bottom:20px; left:20px; width:310px; font-size:9px; border:1px solid gray;}&lt;br /&gt;
#hdr     { position:absolute; top:10px; left:180px; }&lt;br /&gt;
#content { position:absolute; top:50px; left:180px; bottom:10px; right:10px; text-align:center}&lt;br /&gt;
#backimg {position:absolute; top:15px; left:190px;}&lt;br /&gt;
&lt;br /&gt;
a {  color: #278727; }&lt;br /&gt;
img {  border-style: none; }&lt;br /&gt;
table { -moz-border-radius:8px; border-radius:8px; }&lt;br /&gt;
&lt;br /&gt;
.fp_Grundriss   {border:0px solid gray;}&lt;br /&gt;
&lt;br /&gt;
.devicename     {font-size: 11px; text-align:center; }&lt;br /&gt;
.devicestate    {text-align:center; }&lt;br /&gt;
.devicecommands {font-size:14px; text-align:center; }&lt;br /&gt;
&lt;br /&gt;
#sz_Rollo.devicename     {font-size:14px;}&lt;br /&gt;
#sz_Rollo.devicecommands {font-size:12px; text-align:center; }&lt;br /&gt;
#ez_Aussensensor.devicestate  {color:green; font-size:30px; }&lt;br /&gt;
#HomeStatus.devicestate  {color:green; font-size:30px; }&lt;br /&gt;
table.dummy              {width:100px; }&lt;br /&gt;
table.FHT                {width:100px; }&lt;br /&gt;
#wakeup.devicestate      {color:green; font-size:11px; }&lt;br /&gt;
#ez_FHT.devicestate      {color:green; font-size:30px; }&lt;br /&gt;
#Home.fp_Grundriss       {font-size:14px; width:100px; }&lt;br /&gt;
#Home.fp_Media           {font-size:14px; text-align:left; }&lt;br /&gt;
#Media                   {font-size:14px; }&lt;br /&gt;
#Grundriss               {font-size:14px; text-align:left; }&lt;br /&gt;
&lt;br /&gt;
h2,h3,h4 { color:#52865D; line-height:1.3;&lt;br /&gt;
           margin-top:1.5em; font-family:Arial,Sans-serif; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Einstelllungen sind:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;.fp_&amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039; legt das default-Format für die gesamte Ausgabe fest.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;.devicename&#039;&#039;&#039;&#039;&#039; formatiert alle Gerätenamen sofern nicht je Gerät abweichend festgelegt&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;.devicestate&#039;&#039;&#039;&#039;&#039;	formatiert alle Gerätestatus bei Ausgabe als Text (nicht als Symbol)&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;.devicecommands&#039;&#039;&#039;&#039;&#039; formatiert alle Befehle, die unterhalb des Geräts/Symbols angezeigt werden&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;#backimg&#039;&#039;&#039;&#039;&#039; legt die Bildschirmposition Ihres Hintergrundbilds fest&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&amp;lt;!--[[File:FloorplanInstallationGuide16.png|right]]--&amp;gt;In der Test- und Einrichtungsphase können Sie einen Tabellen-Rahmen um ihre Geräte anzeigen lassen um das Positionieren zu vereinfachen. Dazu fügen Sie der floorplanstyle.css einfach folgenden Eintrag hinzu:&lt;br /&gt;
 .fp_Grundriss {border:1px solid gray;}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Verwenden anderer Stylesheets===&lt;br /&gt;
&lt;br /&gt;
Das Standard-Stylesheet für floorplans ist &#039;&#039;floorplan.css&#039;&#039;. Sie können aber auch das Attribut &#039;&#039;stylesheet&#039;&#039; verwenden, das Ihnen die Verwendung eigener css-Stylesheets erlaubt. Sogar ein eigenes für jeden floorplan. Durch Anlegen eines eigenen Stylesheets (z.B. beginnend mit einer Kopie von floorplanstyle.css oder darkfloorplanstyle.css) können Sie Formatierungen für Ihre eigenen Devices hinterlegen, die später nicht überschrieben werden, sollte ein Update für fhem durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;floorplan&amp;gt; stylesheet myfloorplanstylesheet.css&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Die Auswahl eines floorplan-Stylesheets erfolgt nicht in der fhem-Oberfläche unter &#039;&#039;Select Style&#039;&#039;!}}&lt;br /&gt;
&lt;br /&gt;
==Verwendung besonderer Icons==&lt;br /&gt;
&lt;br /&gt;
===Andere Symbole (Icons) verwenden===&lt;br /&gt;
&lt;br /&gt;
fhem gestattet die Verwendung eigener Symbole (Icons). Dazu wird eine Icon-Bilddatei in den Formaten &#039;&#039;&#039;jpg&#039;&#039;&#039;, &#039;&#039;&#039;png&#039;&#039;&#039; oder &#039;&#039;&#039;gif&#039;&#039;&#039; erstellt. Der Dateiname muss dabei nach dem Muster &#039;&#039;&amp;lt;devicename&amp;gt;.&amp;lt;state&amp;gt;.[jpg|png|gif]&#039;&#039; aufgebaut sein und im Ordner &#039;&#039;www/images/default&#039;&#039; abgelegt werden.&lt;br /&gt;
Um eine konsistente Darstellung zu erreichen, sollte die selbe Bildgröße wie die der Standard-Icons verwendet werden. Eine Möglichkeit dafür ist, eine bereits vorhandene Datei zu kopieren (z.B. FS20.on.jpg), richtig zu benennen und anschließend zu bearbeiten ohne die Größe zu ändern.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &#039;&#039;&#039;&#039;&#039;sz_Rollo.on.jpg&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;sz_Rollo.off.jpg&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
{{Hinweis|Werden die zugeordneten Dateien nicht gefunden, verwendet fhem die Standard-Icons &#039;&#039;&amp;lt;type&amp;gt;.&amp;lt;state&amp;gt;.[jpg{{!}}jpg{{!}}gif]&#039;&#039;, also z.B. &#039;&#039;FS20.on.jpg&#039;&#039;, &#039;&#039;FS20.off.jpg&#039;&#039;, ...}}&lt;br /&gt;
&lt;br /&gt;
===Andere Symbole (Icons) im floorplan als im fhem Web-Frontend===&lt;br /&gt;
&lt;br /&gt;
Um in einem floorplan andere Icons zu verwenden, als im fhem Standard-Web-Frontend (z.B. größere oder animierte Icons), werden diese einfach in einem Ordner abgelegt, der denselben Namen trägt, wie der floorplan selbst.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
Es existiert bereits ein floorplan namens &#039;&#039;PlotsPage&#039;&#039;, darin ein Device namens &#039;&#039;ez_Schreibtisch&#039;&#039;&lt;br /&gt;
 define PlotsPage FLOORPLAN&lt;br /&gt;
 define ez_Schreibtisch FS20 …&lt;br /&gt;
 attr ez_Schreibtisch fp_PlotsPage 100,100,1&lt;br /&gt;
Die zugrundeliegende fhemweb-Instanz heißt &#039;&#039;WEB&#039;&#039; und hat die Attribute &#039;&#039;longpoll 1&#039;&#039; sowie &#039;&#039;iconPath default:openautomation&#039;&#039;.&lt;br /&gt;
 define WEB FHEMWEB global&lt;br /&gt;
 attr WEB longpoll 1&lt;br /&gt;
 attr WEB iconPath default:openautomation&lt;br /&gt;
Für die Anzeige des Device &#039;&#039;ez_Schreibtisch&#039;&#039; werden also die &amp;quot;ganz normalen&amp;quot; Icons aus dem Ordner &#039;&#039;www/images/default&#039;&#039; verwendet.&lt;br /&gt;
&lt;br /&gt;
Um für dieses Device nun ein eigenes Icon zu verwenden, erzeugen Sie den entsprechenden Ordner &#039;&#039;&#039;&#039;&#039;www/images/PlotsPage&#039;&#039;&#039;&#039;&#039;. Darin legen Sie die Icons &#039;&#039;&#039;&#039;&#039;ez_Schreibtisch.on.png&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;ez_Schreibtisch.off.png&#039;&#039;&#039;&#039;&#039; ab. Anschließend rufen Sie zur Aktualisierung der Bild-Bibliothek einmal &amp;lt;code&amp;gt;set WEB rereadicons&amp;lt;/code&amp;gt; auf.&lt;br /&gt;
&lt;br /&gt;
Bei Anzeige des floorplans &#039;&#039;PlotsPage&#039;&#039; wird nun das Device &#039;&#039;ez_Schreibtisch&#039;&#039; mit den speziellen Icons angezeigt.&lt;br /&gt;
In anderen floorplans wie auch in fhemweb wird für dasselbe Device weiterhin das Icon aus dem Ordner &amp;quot;default&amp;quot; verwendet.&lt;br /&gt;
&lt;br /&gt;
==Relevante Web-Instanz-Attribute==&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie, dass die folgenden Attribute des zugrundeliegenden Web-Device [[FHEMWEB]] auch für floorplans berücksichtigt werden:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;smallscreen&#039;&#039;&#039;&lt;br /&gt;
|Der Apple Vollbildmodus wird ermöglicht: Klicken Sie in Safari auf &#039;&#039;Zum Homescreen hinzufügen&#039;&#039; um ein Icon zu erhalten, mit dem Sie fhem bzw. Ihren floorplan im Vollbildmodus - also ohne URL-Leiste - öffnen. Dadurch wirkt Ihr floorplan wie eine eigenständige App.&lt;br /&gt;
Außerdem wird die Bildschirmdarstellung für kleine Displays optimiert.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;touchpad&#039;&#039;&#039;&lt;br /&gt;
|Wie smallscreen, optimiert für die Darstellung auf Tablet-PCs.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;refresh&#039;&#039;&#039;&lt;br /&gt;
|Aktualisiert die angezeigte Browser-Seite regelmäßig.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;plotmode&#039;&#039;&#039;&lt;br /&gt;
|Für Plots (Graphen) kann der plotmode geändert werden. Default ist SVG.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;plotsize&#039;&#039;&#039;&lt;br /&gt;
|Für Plots (Graphen) kann die Darstellungsgröße geändert werden. Diese wird automatisch durch die Attribute &#039;&#039;smallscreen&#039;&#039; und &#039;&#039;touchpad&#039;&#039; gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;webname&#039;&#039;&#039;&lt;br /&gt;
|ändert die URL (default: /fhem)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;redirectCmd&#039;&#039;&#039;&lt;br /&gt;
|Wenn Sie die Schaltbefehle für ein Gerät in der URL zum Lernen betrachten möchten, setzen Sie dieses Attribut auf 0. Es wird dann die gesamte ausgewertete URL angezeigt. Default ist 1.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;longpoll&#039;&#039;&#039;&lt;br /&gt;
|Wenn Sie den Wert dieses Attributs auf 1 setzen (das ist auch der default), werden alle durch Icons dargestellten Schaltzustände einer bereits angezeigten Seite auch ohne ein &amp;quot;refresh&amp;quot; im Browser aktualisiert.&lt;br /&gt;
Dieses Attribut wirkt auch für alle floorplans, die unter dieser Webinstanz angezeigt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Verwendung mehrerer floorplans==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mehrere floorplans verwenden, für die Sie underschiedliche css-Stylesheets verwenden möchten, verwenden Sie das Attribut &amp;lt;code&amp;gt;stylesheet&amp;lt;/code&amp;gt;.&lt;br /&gt;
Wenn nur wenige Formatierungen abweichen sollen, folgen Sie dem u.g. Beipiel. Für gewöhnlich müssen Sie lediglich die class &#039;&#039;fp_&amp;lt;name&amp;gt;&#039;&#039; hinzufügen, wie bei &#039;&#039;&#039;&#039;&#039;.devicecommands&#039;&#039;&#039;&#039;&#039; unten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
body[id~=Grundriss]     { background-color: #F0F0F0;&lt;br /&gt;
                            font-family:Arial, sans-serif; &lt;br /&gt;
                            font-size:9px;  &lt;br /&gt;
                            background-image:url(Grundriss.png); &lt;br /&gt;
                            background-repeat:no-repeat;  }&lt;br /&gt;
#logo    { position:fixed; top:10px; left:20px;&lt;br /&gt;
           width:100px;  height:105px; background-image:url(fhem.png); }&lt;br /&gt;
#content { position:absolute; top:10px; left:10px; bottom:10px; right:10px; text-align:center}&lt;br /&gt;
&lt;br /&gt;
a {  color: #278727; }&lt;br /&gt;
img {  border-style: none; }&lt;br /&gt;
table { -moz-border-radius:8px; border-radius:8px; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.fp_Grundriss            {border:0px solid gray;}&lt;br /&gt;
&lt;br /&gt;
.devicename.fp_Grundriss     {font-size: 11px; text-align:center; }&lt;br /&gt;
.devicestate.fp_Grundriss    {text-align:center; }&lt;br /&gt;
.devicecommands.fp_Grundriss {font-size:14px; text-align:center; }&lt;br /&gt;
.devicecommands.fp_FirstFloor {font-size:8px; color:grey; text-align:center; }&lt;br /&gt;
&lt;br /&gt;
#sz_Rollo.devicename.fp_Grundriss     {font-size:14px;}&lt;br /&gt;
#sz_Rollo.devicecommands.fp_Grundriss {font-size:12px; text-align:center; }&lt;br /&gt;
#ez_Aussensensor.devicestate.fp_Grundriss  {color:green; font-size:30px; }&lt;br /&gt;
#HomeStatus.devicestate.fp_Grundriss  {color:green; font-size:30px; }&lt;br /&gt;
table.dummy.fp_Grundriss              {width:100px; }&lt;br /&gt;
table.FHT.fp_Grundriss                {width:100px; }&lt;br /&gt;
#wakeup.devicestate.fp_Grundriss      {color:green; font-size:11px; }&lt;br /&gt;
#ez_FHT.devicestate.fp_Grundriss      {color:green; font-size:30px; }&lt;br /&gt;
#Home                                 {font-size:14px; width:100px; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Standardmäßig angezeigter floorplan==&lt;br /&gt;
&lt;br /&gt;
Um nach dem Klick auf &#039;&#039;Floorplans&#039;&#039; auf der fhem Startseite unter Umgehung der floorplan-Auswahl direkt in einen floorplan zu springen, ordnen Sie das &#039;&#039;fp_default&#039;&#039;-Attribut einem Ihrer floorplans zu. So gelangen Sie direkt in Ihren default-floorplan, in dem Sie über das Menü auf der linken Seite in andere floorplans weiterspringen können.&lt;br /&gt;
 attr &amp;lt;floorplan-name&amp;gt; fp_default 1&lt;br /&gt;
Sie können dieses Attribut einfach in der Detail-Ansicht Ihres floorplans anlegen:&lt;br /&gt;
[[File:FloorplanInstallationGuide17.png]]&lt;br /&gt;
&lt;br /&gt;
==Floorplan ohne Menü==&lt;br /&gt;
Um einen Floorplan ohne Navigations-Menü zu erhalten, kann das Attribut &#039;&#039;fp_noMenu&#039;&#039; verwendet werden.&lt;br /&gt;
 attr Grundriss fp_noMenu 1&lt;br /&gt;
&lt;br /&gt;
Alternativ können eigene &amp;quot;Menüpunkte&amp;quot; eingefügt werden wie in [[#Weblinks]] und [[#Weblink mit Bild]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Bedenken Sie, dass sie Ihren floorplan nicht mehr über das Menü verlassen können. Möglicherweise müssen Sie die URL in Ihrem Browser ändern, um ihn zu verlassen.}}&lt;br /&gt;
&lt;br /&gt;
==Anderes Hintergrundbild==&lt;br /&gt;
&lt;br /&gt;
Wenn der Name Ihres Hintergrundbilds unabhängig sein soll vom Namen des floorplan, verwenden Sie das Attribut &#039;&#039;fp_backgroundimg&#039;&#039;. &lt;br /&gt;
 attr Grundriss fp_backgroundimg dateiname.png&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Sie können z.B. nachts ein anderes Hintergrundbild verwenden, als tagsüber:&lt;br /&gt;
 define a_fpbackimg at +*01:00 { \&lt;br /&gt;
      if ( isday() ) {fhem &amp;quot;attr Grundriss fp_backgroundimg Tag.png&amp;quot;} \&lt;br /&gt;
      else {fhem &amp;quot;attr Grundriss fp_backgroundimg Nacht.png&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
==Beispiele: Screenshot &amp;amp; Definition==&lt;br /&gt;
Es folgen einige Beispiele mit einem Screenshot, den zugehörigen Attributen und relevanten Einträgen in der css-Datei.&lt;br /&gt;
===Nur Symbol===&lt;br /&gt;
[[File:FloorplanInstallationGuide18.png]]&lt;br /&gt;
 define ez_LichtRegal FS20 6969 01&lt;br /&gt;
 attr ez_LichtRegal fp_Grundriss 220,230,0&lt;br /&gt;
 attr ez_LichtRegal model fs20st&lt;br /&gt;
 attr ez_LichtRegal room Esszimmer&lt;br /&gt;
&lt;br /&gt;
===Beschreibung und Symbol===&lt;br /&gt;
[[File:FloorplanInstallationGuide19.png]]&lt;br /&gt;
 define ku_Downlight FS20 696e 00&lt;br /&gt;
 attr ku_Downlight fp_Grundriss 620,520,1&lt;br /&gt;
 attr ku_Downlight model fs20st&lt;br /&gt;
 attr ku_Downlight room Kueche&lt;br /&gt;
&lt;br /&gt;
===Beschreibung, Symbol und Befehle===&lt;br /&gt;
[[File:FloorplanInstallationGuide20.png]] &lt;br /&gt;
 define sz_Leselampe FS20 696b 00&lt;br /&gt;
 attr sz_Leselampe fp_Grundriss 460,900,2,Leselampe&lt;br /&gt;
 attr sz_Leselampe webCmd on:dim50%:off&lt;br /&gt;
 attr sz_Leselampe eventMap on:on dim50%:half off:off&lt;br /&gt;
 attr sz_Leselampe model fs20di	&lt;br /&gt;
 attr sz_Leselampe room Schlafzimmer&lt;br /&gt;
&lt;br /&gt;
===Beschreibung und State===&lt;br /&gt;
[[File:FloorplanInstallationGuide21.png]] &lt;br /&gt;
 define HomeStatus dummy&lt;br /&gt;
 attr HomeStatus fp_Grundriss 110,75,1&lt;br /&gt;
&lt;br /&gt;
 #HomeStatus.devicestate  {color:green; font-size:30px; }&lt;br /&gt;
&lt;br /&gt;
===FHT-Temperatur===&lt;br /&gt;
[[File:FloorplanInstallationGuide22.png]] &lt;br /&gt;
 define ez_FHT FHT 5151&lt;br /&gt;
 attr ez_FHT fp_Grundriss 330,75,1,Innen&lt;br /&gt;
 attr ez_FHT retrycount 3&lt;br /&gt;
 attr ez_FHT room Wohnung,Esszimmer&lt;br /&gt;
&lt;br /&gt;
 #ez_FHT.devicestate      {color:green; font-size:30px; }&lt;br /&gt;
&lt;br /&gt;
===Device-Reading===&lt;br /&gt;
[[File:FloorplanInstallationGuide23.png|none]]&lt;br /&gt;
Z.B. können einzelne S300TH-Readings direkt angezeigt werden, wenn sie die Darstellung mit T: x H:y vermeiden möchten. Verwenden Sie dafür Stil 3. Verwenden Sie die Reading-ID (Groß-/Kleinschreibung beachten) als Beschreibung.&lt;br /&gt;
Besonderheit an diesem Stil: Die Beschreibung kann entweder nur die Reading-ID enthalten oder die Reading-ID gefolgt von der Anzeige-Beschreibung, leerstellenfrei getrennt durch ein Komma.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide24.png]]&lt;br /&gt;
ergibt&lt;br /&gt;
[[File:FloorplanInstallationGuide23.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide25.png]]&lt;br /&gt;
ergibt&lt;br /&gt;
[[File:FloorplanInstallationGuide26.png]]&lt;br /&gt;
&lt;br /&gt;
 define ez_Aussensensor CUL_WS 1&lt;br /&gt;
 attr ez_Aussensensor fp_Grundriss 260,75,3,temperature,Aussen&lt;br /&gt;
 attr ez_Aussensensor model S300&lt;br /&gt;
 attr ez_Aussensensor room Wohnung,Esszimmer&lt;br /&gt;
&lt;br /&gt;
 #ez_Aussensensor.devicestate  {color:green; font-size:30px; }&lt;br /&gt;
&lt;br /&gt;
===Temperatur &amp;amp; Feuchtigkeit===&lt;br /&gt;
 &lt;br /&gt;
[[File:FloorplanInstallationGuide09.png|none]]&lt;br /&gt;
S300TH-Sensoren liefern Messwerte zu Temperatur und Feuchtigkeit. Wollen Sie beide anzeigen, verwenden Sie Stil 4.&lt;br /&gt;
&lt;br /&gt;
 define ez_Aussensensor CUL_WS 1&lt;br /&gt;
 attr ez_Aussensensor fp_PlotsPage 100,600,4,Außen&lt;br /&gt;
 attr ez_Aussensensor model S300&lt;br /&gt;
 attr ez_Aussensensor room Wohnung,Esszimmer&lt;br /&gt;
&lt;br /&gt;
 .fp_tempvalue            {color:red; font-size:20px; }&lt;br /&gt;
 .fp_humvalue             {color:blue; font-size:20px; }&lt;br /&gt;
{{Hinweis|Um die Beschreibung auszublenden, geben Sie im Beschreibungsfeld &#039;&#039;&#039;&#039;&#039;&amp;amp;nbsp&#039;&#039;&#039;&#039;&#039; ein.}}&lt;br /&gt;
&lt;br /&gt;
===Weblinks===&lt;br /&gt;
[[File:FloorplanInstallationGuide27.png]] &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Home weblink link http://fritz.box:8083/fhem&lt;br /&gt;
attr Home fp_Grundriss 50,75,0,Home&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #Home                    {font-size:14px; width:100px; }&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Da jeder floorplan eine eigene URL hatt, können auch eigene Links auf andere floorplans verwenden werden.}}&lt;br /&gt;
&lt;br /&gt;
===Weblink mit Bild===&lt;br /&gt;
Wie im vorhergehenden Beispiel gezeigt, können Sie &#039;&#039;&#039;&#039;&#039;weblink link&#039;&#039;&#039;&#039;&#039; verwenden, um einen Text-Anchor zum Wechsel zu anderen URLs zu verwenden. Da floorplans eine eigene URL haben, können Sie so auch zwischen floorplans wechseln.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie als Link statt eines Texts ein Bild verwenden möchten, verwenden Sie dieses Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;define ImageAnchor weblink htmlCode { &#039;&amp;lt;a href=&amp;quot;http://&amp;lt;ip&amp;gt;:&amp;lt;port&amp;gt;/fhem/floorplan/Grundriss2&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;/icons/pic.png&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; }&amp;lt;/pre&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;href&#039;&#039;&#039; gibt die URL an, zu der Sie springen möchten, z.B. ein anderer floorplan.&lt;br /&gt;
*&#039;&#039;&#039;img&#039;&#039;&#039; gibt den Pfad der Bilddatei an&lt;br /&gt;
Nachdem Sie diesen &#039;&#039;weblink htmlCode&#039;&#039; definiert haben, können Sie ihn zu ihrem floorplan hinzufügen.&lt;br /&gt;
&lt;br /&gt;
===Bilddatei einfügen===&lt;br /&gt;
Um eine Bilddatei ohne Link einzufügen, verwenden Sie statt &#039;&#039;weblink htmlcode&#039;&#039; einfach  &#039;&#039;&#039;&#039;&#039;weblink image&#039;&#039;&#039;&#039;&#039;, Details siehe [http://fhem.de/commandref.html#weblink commandref].&lt;br /&gt;
&lt;br /&gt;
===Eigene Readings-Listen anzeigen===&lt;br /&gt;
&lt;br /&gt;
Das Einbinden beliebiger Listen von Device-Readings lässt sich ebenfalls mit &#039;&#039;weblink htmlCode&#039;&#039; erreichen. &lt;br /&gt;
#Laden Sie dazu aus [http://fhem.svn.sourceforge.net/viewvc/fhem/trunk/fhem/contrib/95_FLOORPLAN/?sortby=file diesem] SVN-Ordner die Datei &#039;&#039;&#039;&#039;&#039;99_myFloorplanList.pm&#039;&#039;&#039;&#039;&#039; herunter. &lt;br /&gt;
#Passen Sie die Zeilen im Abschnitt &#039;&#039;&#039;&#039;&#039;## Change this list as needed&#039;&#039;&#039;&#039;&#039; auf Ihre Bedürfnisse an. Sie können in diesem Abschnitt ggf. Zeilen löschen oder auch hinzufügen.&lt;br /&gt;
#Laden Sie mit dem fhem-Befehl &#039;&#039;&#039;&#039;&#039;reload 99_myFloorplanList.pm&#039;&#039;&#039;&#039;&#039; neu - ebenso nach jeder weiteren Programmänderung. Achten Sie nach jedem reload auf eventuelle Fehlermeldungen im Log.&lt;br /&gt;
#Binden Sie die Routine in das webfrontend ein mit &amp;lt;code&amp;gt;define w_WertListe1 weblink htmlCode {doWertListe1()}&amp;lt;/code&amp;gt;&lt;br /&gt;
#Dieser Weblink kann nun auf Ihrem floorplan hinzugefügt werden [[File:FloorplanInstallationGuide28.png|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht dann z.B. so aus:&lt;br /&gt;
[[File:FloorplanInstallationGuide29.png|none]]&lt;br /&gt;
&lt;br /&gt;
===iFrames, z.B. Wettervorhersage===&lt;br /&gt;
[[File:FloorplanInstallationGuide30.png|none]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Wetter weblink iframe http://www.wetteronline.de/cgi-bin/hpweather?PLZ=80331&lt;br /&gt;
attr Wetter fp_Grundriss 420,25&lt;br /&gt;
attr Wetter htmlattr width=&amp;quot;220&amp;quot; height=&amp;quot;330&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
attr Wetter room Plots&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
* Aktuelle Uhrzeit auf einem FLOORPLAN anzeigen: {{Link2Forum|Topic=23629|Message=169082}}&lt;br /&gt;
* Animierte SVG-Icons für responsiven Floorplan: {{Link2Forum|Topic=26673|Message=196337}}&lt;br /&gt;
* [[Floorplan FHT Temperatur]]&lt;br /&gt;
* [[Remotecontrol]]&lt;br /&gt;
* [[Browsersteuerung, Seiten per JS autom. aufrufen]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12423</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12423"/>
		<updated>2015-10-03T06:25:03Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Zeitgesteuert schalten - at */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Attribute&#039;&#039;&#039;&#039;&#039; können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Welche Attribute verfügbar sind, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block:&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039; zeigen Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt. Welche Readings angezeigt werden, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
{{Hinweis|Im Block &#039;&#039;&#039;&#039;&#039;Probably associated with&#039;&#039;&#039;&#039;&#039;&#039; die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.}}&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also {{Taste|modify n_mySchalter1}}. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14B.png]]&lt;br /&gt;
&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Über den Link &#039;&#039;&#039;&#039;&#039;Device specific help&#039;&#039;&#039;&#039;&#039; können Sie sich übrigens den gesamten Hilfe-Text zu Ihrem device-Typ aus der commandref anschauen, hier also den Hilfetext zu &#039;&#039;notify&#039;&#039;. Dieser Link ist gerade zu Beginn häufig hilfreich.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
Im Detailscreen eines &#039;&#039;at&#039;&#039; wird übrigens im &#039;&#039;STATE&#039;&#039; der Zeitpunkt der nächsten Ausführung angezeigt. &lt;br /&gt;
&lt;br /&gt;
Diese Info erscheint auch in der Raum-Ansicht, falls Sie das &#039;&#039;at&#039;&#039; dort anzeigen lassen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18B.png]]&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:ErsteSchritteInFhem18B.png&amp;diff=12422</id>
		<title>Datei:ErsteSchritteInFhem18B.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:ErsteSchritteInFhem18B.png&amp;diff=12422"/>
		<updated>2015-10-03T06:23:59Z</updated>

		<summary type="html">&lt;p&gt;Uli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12421</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12421"/>
		<updated>2015-10-03T06:14:09Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Bestehende Devices verändern – modify */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Attribute&#039;&#039;&#039;&#039;&#039; können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Welche Attribute verfügbar sind, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block:&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039; zeigen Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt. Welche Readings angezeigt werden, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
{{Hinweis|Im Block &#039;&#039;&#039;&#039;&#039;Probably associated with&#039;&#039;&#039;&#039;&#039;&#039; die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.}}&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also {{Taste|modify n_mySchalter1}}. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14B.png]]&lt;br /&gt;
&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Über den Link &#039;&#039;&#039;&#039;&#039;Device specific help&#039;&#039;&#039;&#039;&#039; können Sie sich übrigens den gesamten Hilfe-Text zu Ihrem device-Typ aus der commandref anschauen, hier also den Hilfetext zu &#039;&#039;notify&#039;&#039;. Dieser Link ist gerade zu Beginn häufig hilfreich.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:ErsteSchritteInFhem14B.png&amp;diff=12420</id>
		<title>Datei:ErsteSchritteInFhem14B.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:ErsteSchritteInFhem14B.png&amp;diff=12420"/>
		<updated>2015-10-03T06:09:37Z</updated>

		<summary type="html">&lt;p&gt;Uli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:ErsteSchritteInFhem15.png&amp;diff=12419</id>
		<title>Datei:ErsteSchritteInFhem15.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:ErsteSchritteInFhem15.png&amp;diff=12419"/>
		<updated>2015-10-03T06:06:24Z</updated>

		<summary type="html">&lt;p&gt;Uli: Uli lud eine neue Version von Datei:ErsteSchritteInFhem15.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:ErsteSchritteInFhem15.png&amp;diff=12418</id>
		<title>Datei:ErsteSchritteInFhem15.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:ErsteSchritteInFhem15.png&amp;diff=12418"/>
		<updated>2015-10-03T06:04:47Z</updated>

		<summary type="html">&lt;p&gt;Uli: Uli lud eine neue Version von Datei:ErsteSchritteInFhem15.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12417</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12417"/>
		<updated>2015-10-03T06:00:39Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Bei Event ausführen - notify */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Attribute&#039;&#039;&#039;&#039;&#039; können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Welche Attribute verfügbar sind, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block:&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039; zeigen Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt. Welche Readings angezeigt werden, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
{{Hinweis|Im Block &#039;&#039;&#039;&#039;&#039;Probably associated with&#039;&#039;&#039;&#039;&#039;&#039; die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.}}&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also {{Taste|modify n_mySchalter1}}. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12416</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12416"/>
		<updated>2015-10-03T05:56:57Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Bei Event ausführen - notify */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Attribute&#039;&#039;&#039;&#039;&#039; können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Welche Attribute verfügbar sind, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block:&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039; zeigen Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt. Welche Readings angezeigt werden, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden im Block &#039;&#039;&#039;&#039;&#039;Probably associated with&#039;&#039;&#039;&#039;&#039;&#039; die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also {{Taste|modify n_mySchalter1}}. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12415</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12415"/>
		<updated>2015-10-03T05:46:00Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Bestehende Devices verändern – modify */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Attribute&#039;&#039;&#039;&#039;&#039; können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Welche Attribute verfügbar sind, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block:&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039; zeigen Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt. Welche Readings angezeigt werden, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also {{Taste|modify n_mySchalter1}}. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12414</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12414"/>
		<updated>2015-10-02T18:16:33Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Schaltbefehle definieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Attribute&#039;&#039;&#039;&#039;&#039; können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Welche Attribute verfügbar sind, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block:&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039; zeigen Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt. Welche Readings angezeigt werden, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12413</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12413"/>
		<updated>2015-10-02T18:14:55Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Schaltbefehle definieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Attribute&#039;&#039;&#039;&#039;&#039; können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Welche Attribute verfügbar sind, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block:&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039; zeigen Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt. Welche Readings angezeigt werden, hängt fom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12412</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12412"/>
		<updated>2015-10-02T18:13:17Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Schaltbefehle definieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Attribute&#039;&#039;&#039;&#039;&#039; können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Welche Attribute verfügbar sind, hängt vom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block:&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039; zeigen Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt. Welche Readings angezeigt werden, hängt fom device-TYPE ab.}}&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12411</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12411"/>
		<updated>2015-10-02T18:10:09Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Device anlegen - define */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Attribute&#039;&#039;&#039;&#039;&#039; können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Welche Attribute verfügbar sind, hängt vom device-TYPE ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12410</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12410"/>
		<updated>2015-10-02T18:08:34Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Schaltbefehle definieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Attribute&#039;&#039;&#039;&#039;&#039; können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Welche Attribute verfügbar sind, hängt vom device-TYPE ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12409</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12409"/>
		<updated>2015-10-02T18:04:11Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Device anlegen - define */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12408</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12408"/>
		<updated>2015-10-02T18:03:19Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Device anlegen - define */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Darunter folgt ein Block mit &#039;&#039;&#039;&#039;&#039;Attributen&#039;&#039;&#039;&#039;&#039;. Attribute können vom Anwender gesetzt und geändert werden. Sie beeinflussen das Erscheinungsbild und die Funktion eines bereits bestehenden fhem-device. Also machen wir gleich mit der Bearbeitung von Attributen weiter:&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12407</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12407"/>
		<updated>2015-10-02T17:59:52Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Schaltbefehle definieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button {{Taste|attr}} ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;&#039;&#039;&#039;Readings&#039;&#039;&#039;&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-Devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von Devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von Devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attributen&#039;&#039;&#039;&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-Devices grundsätzlich genau so aussehen, wie die dummy-Devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass Sie die verfügbaren Befehle nicht mehr selbst mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-Device vorgegeben sind. Und Events werden nicht nur ausgelöst, wenn Sie im fhem-Webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslöst.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Erfolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12396</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12396"/>
		<updated>2015-10-02T14:11:26Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Wie geht es weiter? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;Readings&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Schalten von devices mit &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Verändern von devices mit &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; und &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Das Setzen und Bearbeiten von &#039;&#039;&#039;Attribute&#039;&#039;&#039;n&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-devices grundsätzlich ebenso aussehen, wie die dummy-devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass 1. Sie i.A. nicht mehr selbst die verfügbaren Befehle mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-device vorgegeben sind, und 2. events nicht nur ausgelöst werden, wenn Sie im fhem-webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslösen. Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Ergolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Hauptseite&amp;diff=12395</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Hauptseite&amp;diff=12395"/>
		<updated>2015-10-02T14:00:00Z</updated>

		<summary type="html">&lt;p&gt;Uli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:FHEMWiki - Informationsportal zum FHEM Hausautomationsserver}}&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-right:10px; border: 1px solid #dfdfdf; border-radius: 8px; padding: 0 1em 1em 1em; background-color:#cce5ff;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right;&amp;quot;&amp;gt;&lt;br /&gt;
http://banner.fhemwiki.de/fhemwiki_logo_200x80.png&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Was ist FHEM?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM&#039;&#039;&#039; ist ein Hausautomations-Server von Rudolf Koenig et al. in Perl geschrieben, um diverse per Funk und Kabel angebundene [[:Kategorie:Hardware|Komponenten]] aus dem Bereich der Hausautomation zu steuern. Er ist lizensiert unter der GPL v2. Das FHEMWiki stellt neben dem [http://forum.fhem.de/ Forum] und der [http://www.fhem.de Fhem] Seite die zentrale Informationsquelle rund um FHEM dar.&lt;br /&gt;
&lt;br /&gt;
{{NUMBEROFUSERS}} [[Special:Listusers|Benutzer]] haben sich seit Mai 2013 registriert und {{NUMBEROFARTICLES}} Artikel geschrieben. ({{NUMBEROFEDITS}} Seitenänderungen bislang).&lt;br /&gt;
&lt;br /&gt;
Bitte [[FHEMWiki:Support | unterstütze uns]] und hilf, [[:Kategorie:NeedsEditing| das Wiki zu erweitern]]. Vielen Dank!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;Mehr [[FHEMWiki:Über_FHEMWiki|über FHEMWiki]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-top:10px; margin-right:10px; border: 1px solid #dfdfdf; border-radius: 8px; padding: 0em 1em 1em 1em; background-color:#efefef;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Wie fange ich an?&#039;&#039;&#039;&lt;br /&gt;
* [[Datei:Info_green.png|20px]][http://fhem.de/Heimautomatisierung-mit-fhem.pdf FHEM-Übersicht für Anfänger][[Datei:Info_green.png|20px]]&amp;lt;br /&amp;gt;DER Startpunkt. &#039;&#039;&#039;Pflichtlektüre!&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
* Ein kleiner fhem-Kurs, benötigt keine Hardware: [http://www.fhemwiki.de/wiki/Erste_Schritte_in_fhem Erste Schritte in fhem]&lt;br /&gt;
* [[Systemübersicht]]&lt;br /&gt;
* Phasen eines Fhem-Projekts:&lt;br /&gt;
** [[Planung]]&lt;br /&gt;
** [[Umsetzung]] (Implementierung)&lt;br /&gt;
** [[Betrieb]] (&amp;quot;Produktion&amp;quot;)&lt;br /&gt;
* [[:Kategorie:Glossary|Glossar]] (Erklärung für bestimmte Begriffe)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[:Kategorie:HOWTOS|Verschiedene HowTos]]&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[:Kategorie:FAQ|Frequently asked Questions - Häufig gestellte Fragen mit Antworten]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!-- Verlinkte Wiki-Seite für Anfänger ist leer, darum auskommentiert&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;[[Help:Reading|How to read FHEMWiki]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;--&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-top:10px; margin-right:10px; border: 1px solid #dfdfdf; border-radius: 8px; padding: 0 1em 1em 1em; background-color:#fff0e0;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Unterstützte Hardware&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[:Kategorie:Hardware Typen|Hardware Typen]] - Funktionsbezogene Übersicht (z.B. [[:Kategorie:Unterhaltungselektronik|Unterhaltungselektronik / Multimedia]], [[:Kategorie:Heizungssteuerung|Heizungssteuerung]], [[:Kategorie:Energieverbrauchsmessung|Energieverbrauchsmessung]], etc.)&lt;br /&gt;
* [[:Kategorie:Server Hardware|Server Hardware]] - Hardware, auf der FHEM installiert werden kann&lt;br /&gt;
* [[:Kategorie:FS20 Components|FS20 Komponenten]]&lt;br /&gt;
* [[:Kategorie:panStamp|panStamp Komponenten]]&lt;br /&gt;
* [[:Kategorie:HMS Components|HMS Komponenten]]&lt;br /&gt;
* [[:Kategorie:EMS Components|EMS Komponenten]]&lt;br /&gt;
* [[:Kategorie:FHT Components|FHT Komponenten]]&lt;br /&gt;
* [[:Kategorie:1-Wire|1-Wire System]]&lt;br /&gt;
* [[:Kategorie:EIB/KNX|EIB/KNX Komponenten]]&lt;br /&gt;
* [[:Kategorie:EnOcean Components|EnOcean Komponenten]]&lt;br /&gt;
* [[:Kategorie:HomeMatic Components|HomeMatic Komponenten]]&lt;br /&gt;
* [[:Kategorie:MAX|MAX! Komponenten]]&lt;br /&gt;
* [[:Kategorie:Z-Wave Components|Z-Wave Komponenten]]&lt;br /&gt;
* [[:Kategorie:IP Components|Geräte mit Webinterface (&amp;quot;IP&amp;quot;)]]&lt;br /&gt;
* [[:Kategorie:Other Components|Andere Komponenten / Sonstige Systeme]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;[[:Kategorie:Hardware|Alle Hardware-Kategorien]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; border-radius: 8px; padding:0 1em 1em 1em; background-color:#F8F8FF;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ideen und Lösungen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[:Kategorie:Code_Snippets|Verschiedene kommentierte Lösungen und Code-Schnippsel]]&lt;br /&gt;
* [[:Kategorie:Examples|Beispielanwendungen - Hardwarelösungen - Fremdsystemanbindungen]]&lt;br /&gt;
* [[Anwendungsszenarien]]&lt;br /&gt;
* [[Trick der Woche|Tipp der Woche]]&lt;br /&gt;
* [[Wie kann ich...]]?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;[[:Kategorie:FHEM|Fhem-Haupt-Kategorien]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; border-radius: 8px; padding:0 1em 1em 1em; background-color:#FFFFE7;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Developers Corner&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[:DevelopmentModuleIntro|Development Module Introduction]]&lt;br /&gt;
* [[:DevelopmentGuidelinesAV|Development Guidelines AV-Module]]&lt;br /&gt;
* [[:How_to_write_a_patch|How to write a patch]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;[[:Kategorie:Development|Alle Artikel zu Development]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;55%&amp;quot; style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0;  border:1px solid #888888; border-radius: 8px; padding: 0em 1em 1em 1em; background-color:#d7ffff;height:14em;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;FHEMWiki News&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:small;height:10em;overflow:scroll;overflow-x:hidden;&amp;quot;&amp;gt;&amp;lt;small&amp;gt;{{FHEMWiki_News}}&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;Mehr [[FHEMWiki:News|News]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #dfdfdf; border-radius: 8px; padding:0 1em 1em 1em; background-color:#F8F8FF;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Letzte Änderungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:small;color:black;&amp;quot;&amp;gt;&amp;lt;small&amp;gt;{{Special:Recentchanges/5}}&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;Mehr [[Special:Recentchanges|Änderungen]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Vorbereitung für &amp;quot;letzte 5 neuen Seiten&amp;quot; ... --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #dfdfdf; border-radius: 8px; padding:0 1em 1em 1em; background-color:#FFFFAA;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Die letzten fünf neuen Seiten&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;small&amp;gt;{{Special:NewPages/5}}&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;Mehr [[Special:NewPages|Neue Seiten]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- Ende von &amp;quot;Vorbereitung für ...&amp;quot; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #dfdfdf; border-radius: 8px; padding:0 1em 1em 1em; background-color:#DDD68F;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administratives zum Wiki&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Allgemeine Aktivitäten:&#039;&#039;&lt;br /&gt;
* Registrierung zur Mitarbeit: wende Dich bitte an einen [[FHEMWiki:Administratoren|Administrator]]&lt;br /&gt;
* Basiswissen über die Mitarbeit an einem Wiki erarbeiten ([http://de.wikipedia.org/wiki/Wikipedia:Beteiligen z.B. Wikipedia])&lt;br /&gt;
* Erweiterung und Korrektur von Artikeln, wo immer nötig&lt;br /&gt;
* Ein(ig)e der [[Spezial:Gewünschte Seiten|gewünschten Seiten]] erstellen &lt;br /&gt;
* Ideen aus dem [http://forum.fhem.de Forum] in bestehende oder neue Artikel einarbeiten&lt;br /&gt;
* [[Spezial:Verwaiste Seiten|verwaiste Seiten]] in sinnvoller Weise verlinken&lt;br /&gt;
* [[Spezial:Sackgassenseiten|Sackgassenseiten]] wikifizieren (Links auf andere Seiten einfügen)&lt;br /&gt;
* [[Datei:Info_red.png|20px]] &#039;&#039;&#039;Tips / Regeln / Hinweise auf &amp;quot;[[FHEMWiki:Über FHEMWiki|Über FHEMWiki]]&amp;quot; beachten!&#039;&#039;&#039; [[Datei:Info_red.png|20px]]&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
dieser Abschnitt sollte jetzt (hoffentlich) nicht mehr erforderlich sein&lt;br /&gt;
&#039;&#039;Sonderaktivitäten nach dem Festplattencrash auf dem Wiki-Server:&#039;&#039;&lt;br /&gt;
* Bereinigung von [[Spezial:Unbenutzte_Dateien|verwaisten Dateien]]; oft läßt schon der Dateiname Rückschlüsse auf die Seite zu, die diese Datei / dieses Bild verwenden sollte&lt;br /&gt;
* Überarbeiten von [[:Kategorie:Seiten mit defekten Dateilinks|Seiten mit defekten Dateilinks]]&lt;br /&gt;
* generell: aufmerksames Lesen der Artikel, da manche Dinge bei der automatisierten Datenrettung nicht vollständig wieder hergestellt werden konnten --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Aktivitäten für Administratoren:&#039;&#039;&lt;br /&gt;
* Sichten / Löschen von [[:Kategorie:Löschkandidaten|Löschkandidaten]]&lt;br /&gt;
* Vorschlag: Einrichten einer Seite, auf der Anfragen an Benutzer mit Admin-Rechten eingetragen werden können&lt;br /&gt;
* Beobachten der &amp;quot;Letzten Änderungen&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Sonstiges:&#039;&#039;&lt;br /&gt;
* Zum Ausprobieren bitte die [[FHEMWiki:Sandbox]] benutzen&lt;br /&gt;
* [//meta.wikimedia.org/wiki/Help:Contents Wiki Benutzerhandbuch].&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Wiki-Konfigurationsvariablen]&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [[FHEMWiki:Interna|Internes zu diesem Wiki]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Hauptseite&amp;diff=12394</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Hauptseite&amp;diff=12394"/>
		<updated>2015-10-02T13:58:56Z</updated>

		<summary type="html">&lt;p&gt;Uli: Auf Startseite Hinweis auf fhem-Kurs &amp;quot;Erste Schritte in fhem&amp;quot; eingebaut&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:FHEMWiki - Informationsportal zum FHEM Hausautomationsserver}}&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-right:10px; border: 1px solid #dfdfdf; border-radius: 8px; padding: 0 1em 1em 1em; background-color:#cce5ff;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right;&amp;quot;&amp;gt;&lt;br /&gt;
http://banner.fhemwiki.de/fhemwiki_logo_200x80.png&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Was ist FHEM?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FHEM&#039;&#039;&#039; ist ein Hausautomations-Server von Rudolf Koenig et al. in Perl geschrieben, um diverse per Funk und Kabel angebundene [[:Kategorie:Hardware|Komponenten]] aus dem Bereich der Hausautomation zu steuern. Er ist lizensiert unter der GPL v2. Das FHEMWiki stellt neben dem [http://forum.fhem.de/ Forum] und der [http://www.fhem.de Fhem] Seite die zentrale Informationsquelle rund um FHEM dar.&lt;br /&gt;
&lt;br /&gt;
{{NUMBEROFUSERS}} [[Special:Listusers|Benutzer]] haben sich seit Mai 2013 registriert und {{NUMBEROFARTICLES}} Artikel geschrieben. ({{NUMBEROFEDITS}} Seitenänderungen bislang).&lt;br /&gt;
&lt;br /&gt;
Bitte [[FHEMWiki:Support | unterstütze uns]] und hilf, [[:Kategorie:NeedsEditing| das Wiki zu erweitern]]. Vielen Dank!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;Mehr [[FHEMWiki:Über_FHEMWiki|über FHEMWiki]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-top:10px; margin-right:10px; border: 1px solid #dfdfdf; border-radius: 8px; padding: 0em 1em 1em 1em; background-color:#efefef;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Wie fange ich an?&#039;&#039;&#039;&lt;br /&gt;
* [[Datei:Info_green.png|20px]][http://fhem.de/Heimautomatisierung-mit-fhem.pdf FHEM-Übersicht für Anfänger][[Datei:Info_green.png|20px]]&amp;lt;br /&amp;gt;DER Startpunkt. &#039;&#039;&#039;Pflichtlektüre!&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
* Ein kleiner fhem-Kurs, benötigt keine Hardware [http://www.fhemwiki.de/wiki/Erste_Schritte_in_fhem Erste Schritte in fhem]&lt;br /&gt;
* [[Systemübersicht]]&lt;br /&gt;
* Phasen eines Fhem-Projekts:&lt;br /&gt;
** [[Planung]]&lt;br /&gt;
** [[Umsetzung]] (Implementierung)&lt;br /&gt;
** [[Betrieb]] (&amp;quot;Produktion&amp;quot;)&lt;br /&gt;
* [[:Kategorie:Glossary|Glossar]] (Erklärung für bestimmte Begriffe)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[:Kategorie:HOWTOS|Verschiedene HowTos]]&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[:Kategorie:FAQ|Frequently asked Questions - Häufig gestellte Fragen mit Antworten]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;!-- Verlinkte Wiki-Seite für Anfänger ist leer, darum auskommentiert&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;[[Help:Reading|How to read FHEMWiki]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;--&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-top:10px; margin-right:10px; border: 1px solid #dfdfdf; border-radius: 8px; padding: 0 1em 1em 1em; background-color:#fff0e0;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Unterstützte Hardware&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[:Kategorie:Hardware Typen|Hardware Typen]] - Funktionsbezogene Übersicht (z.B. [[:Kategorie:Unterhaltungselektronik|Unterhaltungselektronik / Multimedia]], [[:Kategorie:Heizungssteuerung|Heizungssteuerung]], [[:Kategorie:Energieverbrauchsmessung|Energieverbrauchsmessung]], etc.)&lt;br /&gt;
* [[:Kategorie:Server Hardware|Server Hardware]] - Hardware, auf der FHEM installiert werden kann&lt;br /&gt;
* [[:Kategorie:FS20 Components|FS20 Komponenten]]&lt;br /&gt;
* [[:Kategorie:panStamp|panStamp Komponenten]]&lt;br /&gt;
* [[:Kategorie:HMS Components|HMS Komponenten]]&lt;br /&gt;
* [[:Kategorie:EMS Components|EMS Komponenten]]&lt;br /&gt;
* [[:Kategorie:FHT Components|FHT Komponenten]]&lt;br /&gt;
* [[:Kategorie:1-Wire|1-Wire System]]&lt;br /&gt;
* [[:Kategorie:EIB/KNX|EIB/KNX Komponenten]]&lt;br /&gt;
* [[:Kategorie:EnOcean Components|EnOcean Komponenten]]&lt;br /&gt;
* [[:Kategorie:HomeMatic Components|HomeMatic Komponenten]]&lt;br /&gt;
* [[:Kategorie:MAX|MAX! Komponenten]]&lt;br /&gt;
* [[:Kategorie:Z-Wave Components|Z-Wave Komponenten]]&lt;br /&gt;
* [[:Kategorie:IP Components|Geräte mit Webinterface (&amp;quot;IP&amp;quot;)]]&lt;br /&gt;
* [[:Kategorie:Other Components|Andere Komponenten / Sonstige Systeme]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;[[:Kategorie:Hardware|Alle Hardware-Kategorien]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; border-radius: 8px; padding:0 1em 1em 1em; background-color:#F8F8FF;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Ideen und Lösungen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[:Kategorie:Code_Snippets|Verschiedene kommentierte Lösungen und Code-Schnippsel]]&lt;br /&gt;
* [[:Kategorie:Examples|Beispielanwendungen - Hardwarelösungen - Fremdsystemanbindungen]]&lt;br /&gt;
* [[Anwendungsszenarien]]&lt;br /&gt;
* [[Trick der Woche|Tipp der Woche]]&lt;br /&gt;
* [[Wie kann ich...]]?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;[[:Kategorie:FHEM|Fhem-Haupt-Kategorien]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; border-radius: 8px; padding:0 1em 1em 1em; background-color:#FFFFE7;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Developers Corner&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[:DevelopmentModuleIntro|Development Module Introduction]]&lt;br /&gt;
* [[:DevelopmentGuidelinesAV|Development Guidelines AV-Module]]&lt;br /&gt;
* [[:How_to_write_a_patch|How to write a patch]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;[[:Kategorie:Development|Alle Artikel zu Development]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;55%&amp;quot; style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0;  border:1px solid #888888; border-radius: 8px; padding: 0em 1em 1em 1em; background-color:#d7ffff;height:14em;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;FHEMWiki News&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:small;height:10em;overflow:scroll;overflow-x:hidden;&amp;quot;&amp;gt;&amp;lt;small&amp;gt;{{FHEMWiki_News}}&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;Mehr [[FHEMWiki:News|News]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #dfdfdf; border-radius: 8px; padding:0 1em 1em 1em; background-color:#F8F8FF;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Letzte Änderungen&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:small;color:black;&amp;quot;&amp;gt;&amp;lt;small&amp;gt;{{Special:Recentchanges/5}}&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;Mehr [[Special:Recentchanges|Änderungen]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Vorbereitung für &amp;quot;letzte 5 neuen Seiten&amp;quot; ... --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #dfdfdf; border-radius: 8px; padding:0 1em 1em 1em; background-color:#FFFFAA;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Die letzten fünf neuen Seiten&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;small&amp;gt;{{Special:NewPages/5}}&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&#039;&#039;&#039;Mehr [[Special:NewPages|Neue Seiten]]&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- Ende von &amp;quot;Vorbereitung für ...&amp;quot; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #dfdfdf; border-radius: 8px; padding:0 1em 1em 1em; background-color:#DDD68F;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administratives zum Wiki&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Allgemeine Aktivitäten:&#039;&#039;&lt;br /&gt;
* Registrierung zur Mitarbeit: wende Dich bitte an einen [[FHEMWiki:Administratoren|Administrator]]&lt;br /&gt;
* Basiswissen über die Mitarbeit an einem Wiki erarbeiten ([http://de.wikipedia.org/wiki/Wikipedia:Beteiligen z.B. Wikipedia])&lt;br /&gt;
* Erweiterung und Korrektur von Artikeln, wo immer nötig&lt;br /&gt;
* Ein(ig)e der [[Spezial:Gewünschte Seiten|gewünschten Seiten]] erstellen &lt;br /&gt;
* Ideen aus dem [http://forum.fhem.de Forum] in bestehende oder neue Artikel einarbeiten&lt;br /&gt;
* [[Spezial:Verwaiste Seiten|verwaiste Seiten]] in sinnvoller Weise verlinken&lt;br /&gt;
* [[Spezial:Sackgassenseiten|Sackgassenseiten]] wikifizieren (Links auf andere Seiten einfügen)&lt;br /&gt;
* [[Datei:Info_red.png|20px]] &#039;&#039;&#039;Tips / Regeln / Hinweise auf &amp;quot;[[FHEMWiki:Über FHEMWiki|Über FHEMWiki]]&amp;quot; beachten!&#039;&#039;&#039; [[Datei:Info_red.png|20px]]&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
dieser Abschnitt sollte jetzt (hoffentlich) nicht mehr erforderlich sein&lt;br /&gt;
&#039;&#039;Sonderaktivitäten nach dem Festplattencrash auf dem Wiki-Server:&#039;&#039;&lt;br /&gt;
* Bereinigung von [[Spezial:Unbenutzte_Dateien|verwaisten Dateien]]; oft läßt schon der Dateiname Rückschlüsse auf die Seite zu, die diese Datei / dieses Bild verwenden sollte&lt;br /&gt;
* Überarbeiten von [[:Kategorie:Seiten mit defekten Dateilinks|Seiten mit defekten Dateilinks]]&lt;br /&gt;
* generell: aufmerksames Lesen der Artikel, da manche Dinge bei der automatisierten Datenrettung nicht vollständig wieder hergestellt werden konnten --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Aktivitäten für Administratoren:&#039;&#039;&lt;br /&gt;
* Sichten / Löschen von [[:Kategorie:Löschkandidaten|Löschkandidaten]]&lt;br /&gt;
* Vorschlag: Einrichten einer Seite, auf der Anfragen an Benutzer mit Admin-Rechten eingetragen werden können&lt;br /&gt;
* Beobachten der &amp;quot;Letzten Änderungen&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Sonstiges:&#039;&#039;&lt;br /&gt;
* Zum Ausprobieren bitte die [[FHEMWiki:Sandbox]] benutzen&lt;br /&gt;
* [//meta.wikimedia.org/wiki/Help:Contents Wiki Benutzerhandbuch].&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste der Wiki-Konfigurationsvariablen]&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [[FHEMWiki:Interna|Internes zu diesem Wiki]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12393</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12393"/>
		<updated>2015-10-02T13:49:19Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Wie geht es weiter? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;Readings&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [http://fhem.de/commandref.html commandref]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben links auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-devices grundsätzlich ebenso aussehen, wie die dummy-devices, die Sie hier bereits kennengelernt haben. Der wesentliche Unterschied ist, dass 1. Sie i.A. nicht mehr selbst die verfügbaren Befehle mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-device vorgegeben sind, und 2. events nicht nur ausgelöst werden, wenn Sie im fhem-webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssensor oder der Lichtschalter an der Wand) auslösen. Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-fhem]&lt;br /&gt;
&lt;br /&gt;
Viel Spaß und Ergolg mit fhem !&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12392</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12392"/>
		<updated>2015-10-02T13:46:12Z</updated>

		<summary type="html">&lt;p&gt;Uli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;Readings&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [commandref http://fhem.de/commandref.html]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben link auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In der commandref finden Sie neben der Beschreibung aller fhem-Befehle auch die Liste aller Gerätetypen, die in fhem eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass &amp;quot;echte&amp;quot; fhem-devices grundsätzlich ebenso aussehen, wie die dummy-devices, die Sie hier bereits kennengelernt haben. Der Wesentliche Unterschied ist, dass 1. Sie i.A. nicht mehr selbst die verfügbaren Befehle mittels &#039;&#039;attr webCmd&#039;&#039; festlegen müssen, da diese bereits durch das fhem-device vorgegeben sind, und 2. events nicht nur ausgelöst werden, wenn Sie im fhem-webfrontend klicken, sondern auch, wenn das physische Gerät (also der Bewegungssesnor oder der Lichtschalter an der Wand) auslösen. Sobald Sie ihre ersten Geräte an fhem gekoppelt haben, schauen Sie sich den Event-Monitor an, um zu sehen, wann welche Events ausgelöst werden.&lt;br /&gt;
&lt;br /&gt;
Einen umfangreicheren Einstieg in fhem finden Sie im Dokument [Heimautomatisierung-mit-fhem http://fhem.de/Heimautomatisierung-mit-fhem.pdf]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12391</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12391"/>
		<updated>2015-10-02T13:40:03Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Timer bei einem Event starten - notify und at */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;Readings&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
---Wie geht es weiter?---&lt;br /&gt;
&lt;br /&gt;
Sie haben nun kennengelernt:&lt;br /&gt;
* Das Anlegen von fhem-devices mit &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; und den Event-Monitor&lt;br /&gt;
* Event-getriebene Aktionen durch &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Zeitgesteuertes Schalten mit &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit kennen Sie die grundlegendsten Mechanismen von fhem. Details zu diesen Befehlen finden Sie in der fhem Befehlsreferenz [commandref http://fhem.de/commandref.html]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; zu vielen fhem-Befehlen und Gerätetypen gibt es auch eine deutschsprachige Beschreibung. Klicken Sie dazu in der commandref oben link auf den Link &amp;quot;DE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12390</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12390"/>
		<updated>2015-10-02T13:34:56Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Timer bei einem Event starten - notify und at */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem Installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bitte mit dem Autor (z.B. auf der zugehörigen Diskussionsseite) abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;Readings&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.}}&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;;sleep 60;;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Floorplan_Installations-Leitfaden&amp;diff=12374</id>
		<title>Floorplan Installations-Leitfaden</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Floorplan_Installations-Leitfaden&amp;diff=12374"/>
		<updated>2015-10-02T09:11:27Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Wie Geräte dargestellt werden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dies ist ein Schritt-für-Schritt Einrichtungsleitfaden zur Erstellung eines floorplans mit fhem. Ein Implementierungsbeispiel demonstriert die Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
Dieser Leitfaden wurde ursprünglich von Ulrich Maass erstellt, der die Erlaubnis erteilt hat, ihn auch im Wiki zu veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #CCCCCC;&amp;quot;&amp;gt;fhem.cfg –Zeilen haben in diesem Dokument einen grauen Hintergrund.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #EAF4F8;&amp;quot;&amp;gt;floorplanstyle.css –Zeilen haben in diesem Dokument einen blauen Hintergrund.&amp;lt;/div&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Einführung==&lt;br /&gt;
Dieses Beispiel erzeugt einen floorplan namens &#039;&#039;Grundriss&#039;&#039;, der z.B. so aussehen kann:&lt;br /&gt;
[[File:FloorplanInstallationGuide02.png|none]]&lt;br /&gt;
&lt;br /&gt;
Einige weitere Beispiel-Screenshots von mehreren Anwendern finden Sie in [https://groups.google.com/d/msg/fhem-users/4inexYPdtfw/Utr24BN0AlwJ diesem] und [https://groups.google.com/d/msg/fhem-users/dNP7TLalbhY/ehBGolJbaF0J diesem] Post.  Scrollen Sie dort auch ein wenig nach unten, um weitere Screenshots zu sehen.&lt;br /&gt;
&lt;br /&gt;
==Vorbereitungen==&lt;br /&gt;
&lt;br /&gt;
===Einen floorplan definieren===&lt;br /&gt;
Als ersten Schritt definieren Sie einen neuen floorplan:&lt;br /&gt;
 define &amp;lt;name&amp;gt; FLOORPLAN&lt;br /&gt;
Beispiel:&lt;br /&gt;
 define Grundriss FLOORPLAN&lt;br /&gt;
Sie können mehrere floorplans anlegen, z.B. Haus, Keller, Erdgeschoss, Obergeschoss, Dach. &lt;br /&gt;
Oder Sie erstellen einen angepassten floorplan pro Person in Ihrem Haushalt.&lt;br /&gt;
&lt;br /&gt;
===Öffnen Sie den floorplan zum ersten Mal===&lt;br /&gt;
Aus Ihrem fhem Start-Bildschirm wählen Sie den neuen Menüpunkt &#039;&#039;Floorplans&#039;&#039;, dann klicken Sie Ihren floorplan an.&lt;br /&gt;
&lt;br /&gt;
====Das floorplan user-attribute====&lt;br /&gt;
Sie werden nun lediglich einen leeren Bildschirm sehen mit dem fhem-icon und einem Menü auf der linken Seite.&lt;br /&gt;
Im Hintergrund wurde jedoch das userattribute &#039;&#039;userattr fp_&amp;lt;name&amp;gt;&#039;&#039; in fhem.cfg zu Ihrer Liste der userattributes hinzugefügt:&lt;br /&gt;
 attr global userattr fm_fav fm_groups fm_name fm_order room structexclude webCmd fp_Grundriss&lt;br /&gt;
Dieses Attribut steuert, welche Geräte an welcher Stelle auf dem Bildschirm wie angezeigt werden sollen. &lt;br /&gt;
&lt;br /&gt;
===Zuweisen eines Hintergrundbilds===&lt;br /&gt;
Speichern Sie das Hintergrundbild für Ihren floorplan. Sichern Sie dazu ein Bild im Format PNG mit dem Prefix &#039;&#039;fp_&#039;&#039; und dem Namen Ihres floorplans unterhalb Ihres fhem-Verzeichnisses im Ordner &#039;&#039;www/images/default&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; fhem liest die Liste aller Bild-Dateien nur einmalig beim Start ein. Wenn Sie eine neue Datei hinzufügen, müssen Sie ein erneutes Einlesen anstossen. Geben Sie dazu im fhem-Kommandofeld &amp;lt;code&amp;gt;set WEB rereadicons&amp;lt;/code&amp;gt; ein. Ersetzen Sie ggf. &#039;&#039;WEB&#039;&#039; durch den Namen Ihrer Webinstanz.&lt;br /&gt;
&lt;br /&gt;
Heißt Ihr floorplan also &amp;quot;Grundriss&amp;quot;, speichern Sie die Datei &#039;&#039;&#039;&#039;&#039;fp_Grundriss.png&#039;&#039;&#039;&#039;&#039; im Ordner &#039;&#039;&#039;&#039;&#039;www/images/default&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie bei der Benennung der Hintergundbild-Datei die Groß- und Kleinschreibung. Bedenken Sie auch, dass nur das Format &#039;&#039;&#039;.PNG&#039;&#039;&#039; verwendet werden kann.&lt;br /&gt;
&lt;br /&gt;
Das Hintergrundbild im Beispiel-Screenshot wurde mit MS PowerPoint erstellt. Sie können zur Erstellung von 2D- oder 3D-Grundrissen auch [http://www.sweethome3d.com SweetHome3D] oder [http://www.imsidesign.com/Products/TurboFLOORPLAN TurboFloorplan 3D] verwenden.&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich muss Ihr Hintergrundbild keinen Grundriss zeigen. Sie können jedes beliebige Bild verwenden und dann z.B. Messwerte darauf anzeigen, beispielsweise für einen digitalen Bilderrahmen.&lt;br /&gt;
&lt;br /&gt;
Die beste Bildauflösung hängt vom verwendeten Anzeigegerät ab: Für iPads verwenden Sie z.B. 1024*768 (oder ein wenig darunter). Wenn Sie Ihren floorplan nur am Monitor verwenden wollen, möchten Sie vielleicht den gesamten Bildschirm füllen – dann hängt die Bildgröße von Ihrer Monitor-Auflösung ab. Das Hintergrundbild im Beipiel hat 1000x750px.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie Ihren floorplan nun wieder im Browser öffnen, wird auch das Hintergrundbild angezeigt (evtl. müssen Sie die Seite einmal neu laden). Wird das Hintergrundbild nicht angezeigt, prüfen Sie Pfad und Groß-/Kleinschreibung des Dateinamens.&lt;br /&gt;
&lt;br /&gt;
Die Position Ihres Hintergrundbilds auf dem Bildschirm kann in der verwendeten css-Datei (&#039;&#039;floorplanstyle.css&#039;&#039; oder &#039;&#039;darkfloorplanstyle.css&#039;&#039;) eingestellt werden.&lt;br /&gt;
Verändern Sie dazu die Werte des css-Parameters &#039;&#039;&#039;&#039;&#039;backimg&#039;&#039;&#039;&#039;&#039;, also z.B.&lt;br /&gt;
 #backimg {position:absolute; top:15px; left:190px;}&lt;br /&gt;
Details finden Sie im Abschnitt [[#Spezielle Formate für Ihren floorplan - floorplanstyle.css]]&lt;br /&gt;
&lt;br /&gt;
==Anordnen der Geräte==&lt;br /&gt;
===Wie Geräte dargestellt werden===&lt;br /&gt;
Hier erhalten Sie zunächst einen Überblick, wie Ihre Geräte dargestellt werden können. Im nächsten Abschnitt wird dann erklärt, welche Einstellungen dafür vorgenommen werden müssen.&lt;br /&gt;
&lt;br /&gt;
Jedes Gerät wird in einer (normalerweise unsichtbaren) Tabelle dargestellt. Die Anzahl der Tabellenzeilen hängt von der gewählten Darstellungsvariante ab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 0 - nur Symbol (devicestate)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide03.png|none]]&lt;br /&gt;
Dies ist wohl die am Häufigsten verwendete Darstellung. Das Symbol kann angeklickt werden und schaltet das zugehörige Gerät. Statt auch den Gerätenamen anzuzeigen, platzieren Sie das Symbol einfach an der &amp;quot;richtigen&amp;quot; Stelle auf Ihrem Grundriss.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 1 - Name und Symbol/Status (devicename und devicestate)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide04.png]]&lt;br /&gt;
[[File:FloorplanInstallationGuide05.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Wenn der Name über dem Symbol angezeigt werden soll (oder über dem Status des Geräts), wählen Sie Stil 1. Angezeigt wird die Beschreibung in floorplan (siehe unten), der Alias oder der Gerätename wie in der fhem.cfg definiert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 2 - Name, Symbol/Status und Befehle (devicename, devicestate und devicecommands)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide06.png]]&lt;br /&gt;
[[File:FloorplanInstallationGuide07.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Stil 2 zeigt den Namen, das Symbol bzw. den Status sowie alle für das Gerät verfügbaren Befehle an. Verwenden Sie &#039;&#039;webCmd&#039;&#039; und &#039;&#039;eventmap&#039;&#039; um die Befehlsliste Ihren Bedürfnissen anzupassen. Für einen Dimmer möchsten Sie also z.B. auch eine 50%-Stufe vorsehen.&lt;br /&gt;
Für Geräte mit einstellbaren Werten (z.B. Sollwerttemperatur bei einem Heizungsthermostat) zeigt Stil 2 auch das Feld für die Einstellung des Wertes und den Set-Schalter an. Auch Devices mit setList erhalten das Dropdown und einen Set-Button. Slider und Time sind mit Stil 2 in floorplan ebenfalls nutzbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 3 – Geräte-Messwert und optional Name (devicename und reading)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide08.png|none]]&lt;br /&gt;
Stil 3 zeigt einen beliebigen Messwert (device-reading) an, optional mit einer Beschreibung. Nützlich um z.B. nur die Temperatur eines S300TH anzuzeigen. Beachten Sie das Beispiel im Abschnitt [[#Device-Reading]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 4 – S300TH Temperatur &amp;amp; Feuchtigkeit&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide09.png|none]]&lt;br /&gt;
Stil 4 ist speziell für S300TH Sensoren bereitgestellt. Diese liefern Messwerte zu Temperatur und Feuchtigkeit. Bitte beachten Sie das Beispiel im Abschnitt [[#Temperatur &amp;amp; Feuchtgkeit]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 5 – Symbol/Status und Befehle&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide31.png]]&lt;br /&gt;
[[File:FloorplanInstallationGuide32.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Stil 5 stellt Geräte wie Stil 2 dar, jedoch ohne Gerätenamen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 6 – Geräte-Messwert inkl. Zeitstempel und optional Name&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide10.png|none]]&lt;br /&gt;
Stil 6 stellt Geräte wie Stil 3 dar, zusätzlich wird der Zeitstempel des ausgewählten Readings angezeigt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stil 7 – Nur Kommandos&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide11.png|none]]&lt;br /&gt;
Stil 7 stellt Geräte ausschließlich mit ihren Kommandos dar, also ohne Name oder Staus/Icon. Dies kann z.B. verwendet werden, um für ein Thermostat ausschließlich das Dropdown für die Solltemperatur darzustellen.&lt;br /&gt;
&lt;br /&gt;
Eine ausführlichere Liste von Beipielen finden Sie im Abschnitt [[#Beispiele: Screenshot &amp;amp; Definition]].&lt;br /&gt;
&lt;br /&gt;
===Geräte anordnen===&lt;br /&gt;
&lt;br /&gt;
Um Geräte auf Ihrem floorplan anzuordnen, gibt es den &#039;&#039;&#039;&#039;&#039;Arrange Mode&#039;&#039;&#039;&#039;&#039;, der es Ihnen gestattet, ihren floorplan einzurichten. Um diesen Modus zu aktivieren, setzen Sie einfach das Attribut&lt;br /&gt;
 attr &amp;lt;floorplan&amp;gt; fp_arrange 1&lt;br /&gt;
Dieses Attribut aktiviert oder deaktiviert den &#039;&#039;Arrange-Mode&#039;&#039;. Die Liste wird im Format &#039;&#039;Gerätename (Raumname) Typ [(Alias)]&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
Wenn Ihr floorplan auch ein fhem-Kommandozeilen-Feld haben soll, setzen Sie außerdem:&lt;br /&gt;
 attr &amp;lt;floorplan&amp;gt; commandfield 1&lt;br /&gt;
&lt;br /&gt;
Navigieren Sie nun wieder zu Ihrem floorplan (fhem Hauptmenü -&amp;gt; &#039;&#039;Floorplans&#039;&#039; -&amp;gt; &amp;lt;Ihr-floorplan&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Im Arrange-Mode sehen Sie nun zwei Auswahlfelder am unteren Bildschirmrand:&lt;br /&gt;
[[File:FloorplanInstallationGuide12.png|none]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie zum Hinzufügen ein Gerät aus der oberen Liste, dann klicken Sie &#039;&#039;&#039;&#039;&#039;add&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
[[File:FloorplanInstallationGuide13.png|none]]&lt;br /&gt;
&lt;br /&gt;
Ihr Gerät wird nun an der Standard-Startposition 50 Pixel von oben (top), 200 Pixel von links (left) angezeigt.&lt;br /&gt;
&lt;br /&gt;
Alle Geräte auf dem Bildschirm können mit der Maus per Drag&amp;amp;Drop positioniert werden. Sobald Sie die Maustaste loslassen, wird Ihrer Konfiguration ein Attribut hnzugefügt. Details siehe unten.&lt;br /&gt;
&lt;br /&gt;
Außerdem erscheinen alle Geräte, die diesem floorplan hinzugefügt wurden, nun in der unteren Liste. Wählen Sie es dort aus und klicken Sie dann &#039;&#039;&#039;&#039;&#039;select&#039;&#039;&#039;&#039;&#039; um in die folgende Ansicht zu gelangen:&lt;br /&gt;
[[File:FloorplanInstallationGuide14.png|none]]&lt;br /&gt;
&lt;br /&gt;
Die unteren Felder sind Stil und Text (siehe unten). Setzen Sie die Werte wie gewünscht. Sobald Sie den &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039;-Schalter drücken, wird in Ihrer Konfiguration das folgende Attribut aktualisiert:&lt;br /&gt;
 attr &amp;lt;device&amp;gt; fp_&amp;lt;name&amp;gt; &amp;lt;top&amp;gt;,&amp;lt;left&amp;gt;[,&amp;lt;style&amp;gt;[,&amp;lt;description&amp;gt;]]&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;&amp;lt;top&amp;gt;&#039;&#039;&#039;&#039;&#039; ist die y-Position in Pixel vom oberen Bildschirmrand wie per Drag&amp;amp;Drop gesetzt&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;&amp;lt;left&amp;gt;&#039;&#039;&#039;&#039;&#039; ist die x-Position in Pixel vom linken Bildschirmrand wie per Drag&amp;amp;Drop gesetzt.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;&amp;lt;style&amp;gt;&#039;&#039;&#039;&#039;&#039; ist ein Stil aus der im vorigen Kapitel erläuterten Auswahl&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;&amp;lt;description&amp;gt;&#039;&#039;&#039;&#039;&#039; ist die Beschreibung zur Anzeige im floorpan. Sie ist optional, kann also leer bleiben.&lt;br /&gt;
&lt;br /&gt;
Einige Beispiele:&lt;br /&gt;
 attr ez_Schreibtisch   fp_Grundriss 285,430&lt;br /&gt;
 attr HomeStatus        fp_Grundriss 110,75,1&lt;br /&gt;
 attr ez_DruckerScanner fp_Grundriss 190,405,2,DruckerScanner&lt;br /&gt;
&lt;br /&gt;
Diese Attribute können verändert werden durch:&lt;br /&gt;
*Drag&amp;amp;Drop (top &amp;amp; left)&lt;br /&gt;
*Eingaben im Arrange-Mode-Popup (Style und Description)&lt;br /&gt;
*manuelle Eingabe des Attributs in das Kommandozeilen-Feld&lt;br /&gt;
*Änderung in der Detail-Ansicht des Gerätes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um ein Gerät aus einem floorplan zu entfernen, wählen Sie es mittels &#039;&#039;&#039;&#039;&#039;select&#039;&#039;&#039;&#039;&#039; aus und klicken dann &#039;&#039;&#039;&#039;&#039;deleteattr&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Erst durch Ausführen des Befehls &#039;&#039;&#039;&#039;&#039;save&#039;&#039;&#039;&#039;&#039;  werden die Attribute dauerhaft in die Konfigurationsdatei fhem.cfg geschrieben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier ist die Liste der Attribute zur Erstellung des floorplan wie im Screenshot am Dokument-Anfang.&lt;br /&gt;
Dabei&lt;br /&gt;
*wurden WLAN.on.png und WLAN.off.png im Ordner fhem/images/default gespeichert&lt;br /&gt;
*wird für die Rolladensteuerung [[eventMap]] verwendet, um die on/off-Befehle als down/up anzuzeigen&lt;br /&gt;
*wird ein [[#iFrames, z.B. Wettervorhersage|iFrame]] zur Anzeige des Wetterberichts verwendet&lt;br /&gt;
*kann bei Stil 3 die Beschreibung aus den Teilen Reading-ID und Beschreibung bestehen.&lt;br /&gt;
*schaltet der Play/Pause-Schalter ein [[FS20_IRF_Infrarot-Fernbedienung|FS20-IRF]], welches Play/Pause an das Wiedergabegerät sendet&lt;br /&gt;
&lt;br /&gt;
 attr HomeStatus fp_Grundriss 110,75,1&lt;br /&gt;
 attr ez_Schreibtisch fp_Grundriss 285,430&lt;br /&gt;
 attr ez_LichtRegal fp_Grundriss 220,230,0&lt;br /&gt;
 attr ez_DruckerScanner fp_Grundriss 190,405,2,DruckerScanner&lt;br /&gt;
 attr sz_Leselampe fp_Grundriss 460,900,2&lt;br /&gt;
 attr sz_Stehlampe fp_Grundriss 650,940,0&lt;br /&gt;
 attr sz_LichtRegal fp_Grundriss 550,730,0&lt;br /&gt;
 attr wz_Licht fp_Grundriss 160,940&lt;br /&gt;
 attr wz_LampeKlein fp_Grundriss 290,880&lt;br /&gt;
 attr wz_Wandbeleuchtung fp_Grundriss 30,920&lt;br /&gt;
 attr whg_WLAN fp_Grundriss 180,75,1,WLAN&lt;br /&gt;
 attr ez_FHT fp_Grundriss 330,75,2,Innen&lt;br /&gt;
 attr ku_Downlight fp_Grundriss 620,520&lt;br /&gt;
 attr ko_LichtKorridor fp_Grundriss 330,560&lt;br /&gt;
 attr sz_Rollo fp_Grundriss 665,850,2,Rollo&lt;br /&gt;
 attr sz_Rollo eventMap on:Down off:Up&lt;br /&gt;
 define Wetter weblink iframe http://www.wetteronline.de/cgi-bin/hpweather?PLZ=80331&lt;br /&gt;
 attr Wetter htmlattr width=&amp;quot;220&amp;quot; height=&amp;quot;330&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
 attr Wetter fp_Grundriss 420,25&lt;br /&gt;
 attr ez_Aussensensor fp_Grundriss 260,75,3,temperature,Aussen&lt;br /&gt;
 attr wakeup fp_Grundriss 560,900,1,Wakeuptime&lt;br /&gt;
 attr wz_IRmacminiPlayPause fp_Grundriss 150,740&lt;br /&gt;
&lt;br /&gt;
===Anzeige der floorplan-Konfiguration===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie den Detail-Bildschirm Ihres floorplan-device anzeigen, sehen Sie dort eine Übersicht aller zugordneten Geräte wie in der oberhalb dargestellten Liste.&lt;br /&gt;
 &lt;br /&gt;
===Include statt &amp;quot;save&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Falls Sie sich angewöhnt haben, Ihre fhem-Konfiguration nicht über das Webfrontend [[FHEMWEB]] zu bearbeiten, sondern direkt in der Datei fhem.cfg, können Sie die Konfiguration Ihres floorplan anzeigen und den Inhalt in eine include-Datei übernehmen. Die Verwendung des Befehls &#039;&#039;save&#039;&#039; ist dann nicht erforderlich.&lt;br /&gt;
 get &amp;lt;name&amp;gt; config&lt;br /&gt;
Beispiel:&lt;br /&gt;
 get Grundriss config&lt;br /&gt;
&lt;br /&gt;
===Arrange-Mode nur für einzelne Ports===&lt;br /&gt;
&lt;br /&gt;
Der Arrange-Mode ist für den floorplan, auf dem das Attribut gesetzt ist, ausschließlich auf dem angegebenen Web-Device (also z.B. WEB) aktiviert. Das ist nützlich, wenn Sie als Entwickler immer WEB (=8083) nutzen, für Ihre Familie aber z.B. nur WEBP (=8085) &amp;quot;freigegeben&amp;quot; haben. So wird der arrange-Mode nur für Sie als Entwickler sichtbar.&lt;br /&gt;
Geben Sie als Attributwert den Namen des FHEMWEB-Devices an:&lt;br /&gt;
 attr &amp;lt;floorplan&amp;gt; fp_arrange WEB&lt;br /&gt;
&lt;br /&gt;
==Spezielle Formate für Ihren floorplan - floorplanstyle.css==&lt;br /&gt;
&lt;br /&gt;
Das Standard-Stylesheet für floorplans ist &#039;&#039;floorplan.css&#039;&#039;. Sie können aber auch den Parameter &#039;&#039;stylesheet&#039;&#039; verwenden, siehe nächstes Kapitel.&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide15.png]]&lt;br /&gt;
&lt;br /&gt;
Hierfür gibt es eine spezielle css-Datei.&lt;br /&gt;
Navigieren Sie im fhem-Web-Frontend nach &#039;&#039;Edit Files&#039;&#039;, dann klicken Sie auf floorplanstyle.css.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; In der Test- und Einrichtungsphase können Sie einen Tabellen-Rahmen um ihre Geräte anzeigen lassen um das Positionieren zu vereinfachen. Dazu fügen Sie der floorplanstyle.css einfach folgenden Eintrag hinzu:&lt;br /&gt;
 .fp_Grundriss {border:1px solid gray;}&lt;br /&gt;
[[File:FloorplanInstallationGuide16.png]]&lt;br /&gt;
&lt;br /&gt;
Die css-Datei gestattet Ihnen das Gestalten für ganze Gruppen und/oder einzelne Geräte:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;class&#039;&#039;&#039;&#039;&#039; besteht aus Gerätetyp und fp_&amp;lt;name&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;id&#039;&#039;&#039;&#039;&#039; besteht aus dem Original-Gerätenamen wie im define angegeben.&lt;br /&gt;
&lt;br /&gt;
Hier die css-Einstellungen, die für den Screenshot am Beginn dieses Artikels verwendet wurden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
body     { background-color: #F0F0F0;&lt;br /&gt;
           font-family:Arial, sans-serif; &lt;br /&gt;
           font-size:9px; background-image:url(Grundriss.bak.png); &lt;br /&gt;
           background-repeat:no-repeat;  }&lt;br /&gt;
#menu.fp-list   { position:absolute; top:120px;left:20px; width:140px; font-size:11px;  }&lt;br /&gt;
#logo    { position:absolute; top: 10px; left: 10px; &lt;br /&gt;
           width:64px;  height:67px; background-image:url(fhem_smallscreen.png); }&lt;br /&gt;
#menu    { position:absolute; top:120px; left:20px; width:140px; }&lt;br /&gt;
#menu.floorplan   { position:absolute; top:120px; left:20px; width:140px; font-size:11px; }&lt;br /&gt;
#fpmenu.fp_arrange   { position:absolute; bottom:20px; left:20px; width:310px; font-size:9px; border:1px solid gray;}&lt;br /&gt;
#hdr     { position:absolute; top:10px; left:180px; }&lt;br /&gt;
#content { position:absolute; top:50px; left:180px; bottom:10px; right:10px; text-align:center}&lt;br /&gt;
#backimg {position:absolute; top:15px; left:190px;}&lt;br /&gt;
&lt;br /&gt;
a {  color: #278727; }&lt;br /&gt;
img {  border-style: none; }&lt;br /&gt;
table { -moz-border-radius:8px; border-radius:8px; }&lt;br /&gt;
&lt;br /&gt;
.fp_Grundriss   {border:0px solid gray;}&lt;br /&gt;
&lt;br /&gt;
.devicename     {font-size: 11px; text-align:center; }&lt;br /&gt;
.devicestate    {text-align:center; }&lt;br /&gt;
.devicecommands {font-size:14px; text-align:center; }&lt;br /&gt;
&lt;br /&gt;
#sz_Rollo.devicename     {font-size:14px;}&lt;br /&gt;
#sz_Rollo.devicecommands {font-size:12px; text-align:center; }&lt;br /&gt;
#ez_Aussensensor.devicestate  {color:green; font-size:30px; }&lt;br /&gt;
#HomeStatus.devicestate  {color:green; font-size:30px; }&lt;br /&gt;
table.dummy              {width:100px; }&lt;br /&gt;
table.FHT                {width:100px; }&lt;br /&gt;
#wakeup.devicestate      {color:green; font-size:11px; }&lt;br /&gt;
#ez_FHT.devicestate      {color:green; font-size:30px; }&lt;br /&gt;
#Home.fp_Grundriss       {font-size:14px; width:100px; }&lt;br /&gt;
#Home.fp_Media           {font-size:14px; text-align:left; }&lt;br /&gt;
#Media                   {font-size:14px; }&lt;br /&gt;
#Grundriss               {font-size:14px; text-align:left; }&lt;br /&gt;
&lt;br /&gt;
h2,h3,h4 { color:#52865D; line-height:1.3;&lt;br /&gt;
           margin-top:1.5em; font-family:Arial,Sans-serif; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Einstelllungen sind:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;.fp_&amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039; legt das default-Format für die gesamte Ausgabe fest.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;.devicename&#039;&#039;&#039;&#039;&#039; formatiert alle Gerätenamen sofern nicht je Gerät abweichend festgelegt&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;.devicestate&#039;&#039;&#039;&#039;&#039;	formatiert alle Gerätestatus bei Ausgabe als Text (nicht als Symbol)&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;.devicecommands&#039;&#039;&#039;&#039;&#039; formatiert alle Befehle, die unterhalb des Geräts/Symbols angezeigt werden&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;#backimg&#039;&#039;&#039;&#039;&#039; legt die Bildschirmposition Ihres Hintergrundbilds fest&lt;br /&gt;
&lt;br /&gt;
===Verwenden anderer Stylesheets===&lt;br /&gt;
&lt;br /&gt;
Das Standard-Stylesheet für floorplans ist &#039;&#039;floorplan.css&#039;&#039;. Sie können aber auch das Attribut &#039;&#039;stylesheet&#039;&#039; verwenden, das Ihnen die Verwendung eigener css-Stylesheets erlaubt. Sogar ein eigenes für jeden floorplan. Durch Anlegen eines eigenen Stylesheets (z.B. beginnend mit einer Kopie von floorplanstyle.css oder darkfloorplanstyle.css) können Sie Formatierungen für Ihre eigenen Devices hinterlegen, die später nicht überschrieben werden, sollte ein Update für fhem durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
 attr &amp;lt;floorplan&amp;gt; stylesheet myfloorplanstylesheet.css&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die Auswahl eines floorplan-Stylesheets erfolgt nicht in der fhem-Oberfläche unter &#039;&#039;Select Style&#039;&#039;! Wählen Sie dort nur default oder dark aus!&lt;br /&gt;
&lt;br /&gt;
==Verwendung besonderer Icons==&lt;br /&gt;
&lt;br /&gt;
===Andere Symbole (Icons) verwenden===&lt;br /&gt;
&lt;br /&gt;
fhem gestattet die Verwendung eigener Symbole (Icons). Das geht ganz einfach:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Icon-Bilddatei speichern (Ablageort siehe Abschnitt [[#Zuweisen eines Hintergrundbilds]])&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; Der Dateiname ist folgendermaßen aufgebaut: &#039;&#039;&amp;lt;devicename&amp;gt;.&amp;lt;state&amp;gt;.[jpg|png|gif]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beispiel: &#039;&#039;&#039;&#039;&#039;sz_Rollo.on.jpg&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;sz_Rollo.off.jpg&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Werden diese Dateien nicht gefunden, verwendet fhem die Standard-icons &#039;&#039;&amp;lt;type&amp;gt;.&amp;lt;state&amp;gt;.[jpg|jpg|gif]&#039;&#039; , also z.B. &#039;&#039;FS20.on.jpg&#039;&#039;, &#039;&#039;FS20.off.jpg&#039;&#039;, ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3.&#039;&#039;&#039; Um eine konsistente Darstellung zu erreichen, verwenden Sie dieselbe Bildgröße wie die Standard-Icons, z.B. indem Sie &#039;&#039;FS20.on.jpg&#039;&#039; auf Ihren zukünftigen Icon-Namen kopieren und diese Datei dann bearbeiten, ohne die Größe zu ändern.&lt;br /&gt;
&lt;br /&gt;
===Andere Symbole (Icons) im floorplan als im fhem Web-Frontend===&lt;br /&gt;
&lt;br /&gt;
Um in einem floorplan andere Icons zu verwenden, als im fhem Standard-Web-Frontend (z.B. größere oder animierte Icons), werden diese einfach in einem Ordner abgelegt, der denselben Namen trägt, wie der floorplan selbst.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
Es existiert bereits ein floorplan namens &#039;&#039;PlotsPage&#039;&#039;, darin ein Device namens &#039;&#039;ez_Schreibtisch&#039;&#039;&lt;br /&gt;
 define PlotsPage FLOORPLAN&lt;br /&gt;
 define ez_Schreibtisch FS20 …&lt;br /&gt;
 attr ez_Schreibtisch fp_PlotsPage 100,100,1&lt;br /&gt;
Die zugrundeliegende fhemweb-Instanz heißt &#039;&#039;WEB&#039;&#039; und hat die Attribute &#039;&#039;longpoll 1&#039;&#039; sowie &#039;&#039;iconPath default:openautomation&#039;&#039;.&lt;br /&gt;
 define WEB FHEMWEB global&lt;br /&gt;
 attr WEB longpoll 1&lt;br /&gt;
 attr WEB iconPath default:openautomation&lt;br /&gt;
Für die Anzeige des Device &#039;&#039;ez_Schreibtisch&#039;&#039; werden also die &amp;quot;ganz normalen&amp;quot; Icons aus dem Ordner &#039;&#039;www/images/default&#039;&#039; verwendet.&lt;br /&gt;
&lt;br /&gt;
Um für dieses Device nun ein eigenes Icon zu verwenden, erzeugen Sie den entsprechenden Ordner &#039;&#039;&#039;&#039;&#039;www/images/PlotsPage&#039;&#039;&#039;&#039;&#039;. Darin legen Sie die Icons &#039;&#039;&#039;&#039;&#039;ez_Schreibtisch.on.png&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;ez_Schreibtisch.off.png&#039;&#039;&#039;&#039;&#039; ab. Anschließend rufen Sie zur Aktualisierung der Bild-Bibliothek einmal &lt;br /&gt;
set WEB rereadicons&lt;br /&gt;
auf.&lt;br /&gt;
&lt;br /&gt;
Bei Anzeige des floorplans &#039;&#039;PlotsPage&#039;&#039; wird nun das Device &#039;&#039;ez_Schreibtisch&#039;&#039; mit den speziellen Icons angezeigt.&lt;br /&gt;
In anderen floorplans wie auch in fhemweb wird für dasselbe Device weiterhin das Icon aus dem Ordner &amp;quot;default&amp;quot; verwendet.&lt;br /&gt;
&lt;br /&gt;
==Relevante Web-Instanz-Attribute==&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie, dass die folgenden Attribute des zugrundeliegenden Web-Device [[FHEMWEB]] auch für floorplans berücksichtigt werden:&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;smallscreen&#039;&#039;&#039;&lt;br /&gt;
|Der Apple Vollbildmodus wird ermöglicht: Klicken Sie in Safari auf &#039;&#039;Zum Homescreen hinzufügen&#039;&#039; um ein Icon zu erhalten, mit dem Sie fhem bzw. Ihren floorplan im Vollbildmodus - also ohne URL-Leiste - öffnen. Dadurch wirkt Ihr floorplan wie eine eigenständige App.&lt;br /&gt;
Außerdem wird die Bildschirmdarstellung für kleine Displays optimiert.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;touchpad&#039;&#039;&#039;&lt;br /&gt;
|Wie smallscreen, optimiert für die Darstellung auf Tablet-PCs.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;refresh&#039;&#039;&#039;&lt;br /&gt;
|Aktualisiert die angezeigte Browser-Seite regelmäßig.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;plotmode&#039;&#039;&#039;&lt;br /&gt;
|Für Plots (Graphen) kann der plotmode geändert werden. Default ist SVG.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;plotsize&#039;&#039;&#039;&lt;br /&gt;
|Für Plots (Graphen) kann die Darstellungsgröße geändert werden. Diese wird automatisch durch die Attribute &#039;&#039;smallscreen&#039;&#039; und &#039;&#039;touchpad&#039;&#039; gesetzt.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;webname&#039;&#039;&#039;&lt;br /&gt;
|ändert die URL (default: /fhem)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;redirectCmd&#039;&#039;&#039;&lt;br /&gt;
|Wenn Sie die Schaltbefehle für ein Gerät in der URL zum Lernen betrachten möchten, setzen Sie dieses Attribut auf 0. Es wird dann die gesamte ausgewertete URL angezeigt. Default ist 1.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top;&amp;quot;|&#039;&#039;&#039;longpoll&#039;&#039;&#039;&lt;br /&gt;
|Wenn Sie den Wert dieses Attributs auf 1 setzen (das ist auch der default), werden alle durch Icons dargestellten Schaltzustände einer bereits angezeigten Seite auch ohne ein &amp;quot;refresh&amp;quot; im Browser aktualisiert.&lt;br /&gt;
Dieses Attribut wirkt auch für alle floorplans, die unter dieser Webinstanz angezeigt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Verwendung mehrerer floorplans==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mehrere floorplans verwenden, für die Sie underschiedliche css-Stylesheets verwenden möchten, verwenden Sie das Attribut &amp;lt;code&amp;gt;stylesheet&amp;lt;/code&amp;gt;.&lt;br /&gt;
Wenn nur wenige Formatierungen abweichen sollen, folgen Sie dem u.g. Beipiel. Für gewöhnlich müssen Sie lediglich die class &#039;&#039;fp_&amp;lt;name&amp;gt;&#039;&#039; hinzufügen, wie bei &#039;&#039;&#039;&#039;&#039;.devicecommands&#039;&#039;&#039;&#039;&#039; unten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
body[id~=Grundriss]     { background-color: #F0F0F0;&lt;br /&gt;
                            font-family:Arial, sans-serif; &lt;br /&gt;
                            font-size:9px;  &lt;br /&gt;
                            background-image:url(Grundriss.png); &lt;br /&gt;
                            background-repeat:no-repeat;  }&lt;br /&gt;
#logo    { position:fixed; top:10px; left:20px;&lt;br /&gt;
           width:100px;  height:105px; background-image:url(fhem.png); }&lt;br /&gt;
#content { position:absolute; top:10px; left:10px; bottom:10px; right:10px; text-align:center}&lt;br /&gt;
&lt;br /&gt;
a {  color: #278727; }&lt;br /&gt;
img {  border-style: none; }&lt;br /&gt;
table { -moz-border-radius:8px; border-radius:8px; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.fp_Grundriss            {border:0px solid gray;}&lt;br /&gt;
&lt;br /&gt;
.devicename.fp_Grundriss     {font-size: 11px; text-align:center; }&lt;br /&gt;
.devicestate.fp_Grundriss    {text-align:center; }&lt;br /&gt;
.devicecommands.fp_Grundriss {font-size:14px; text-align:center; }&lt;br /&gt;
.devicecommands.fp_FirstFloor {font-size:8px; color:grey; text-align:center; }&lt;br /&gt;
&lt;br /&gt;
#sz_Rollo.devicename.fp_Grundriss     {font-size:14px;}&lt;br /&gt;
#sz_Rollo.devicecommands.fp_Grundriss {font-size:12px; text-align:center; }&lt;br /&gt;
#ez_Aussensensor.devicestate.fp_Grundriss  {color:green; font-size:30px; }&lt;br /&gt;
#HomeStatus.devicestate.fp_Grundriss  {color:green; font-size:30px; }&lt;br /&gt;
table.dummy.fp_Grundriss              {width:100px; }&lt;br /&gt;
table.FHT.fp_Grundriss                {width:100px; }&lt;br /&gt;
#wakeup.devicestate.fp_Grundriss      {color:green; font-size:11px; }&lt;br /&gt;
#ez_FHT.devicestate.fp_Grundriss      {color:green; font-size:30px; }&lt;br /&gt;
#Home                                 {font-size:14px; width:100px; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Standardmäßig angezeigter floorplan==&lt;br /&gt;
&lt;br /&gt;
Um nach dem Klick auf &#039;&#039;Floorplans&#039;&#039; auf der fhem Startseite unter Umgehung der floorplan-Auswahl direkt in einen floorplan zu springen, ordnen Sie das &#039;&#039;fp_default&#039;&#039;-Attribut einem Ihrer floorplans zu. So gelangen Sie direkt in Ihren default-floorplan, in dem Sie über das Menü auf der linken Seite in andere floorplans weiterspringen können.&lt;br /&gt;
 attr &amp;lt;floorplan-name&amp;gt; fp_default 1&lt;br /&gt;
Sie können dieses Attribut einfach in der Detail-Ansicht Ihres floorplans anlegen:&lt;br /&gt;
[[File:FloorplanInstallationGuide17.png]]&lt;br /&gt;
&lt;br /&gt;
==Ohne Menü==&lt;br /&gt;
Um einen völlig leeren floorplan – auch ohne Menü - zu erhalten, verwenden Sie das Attribut &#039;&#039;fp_noMenu&#039;&#039;.&lt;br /&gt;
 attr Grundriss fp_noMenu 1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Bedenken Sie, dass sie Ihren floorplan nicht mehr über das Menü verlassen können. Möglicherweise müssen Sie die URL in Ihrem Browser ändern, um den floorplan zu verlassen.&lt;br /&gt;
&lt;br /&gt;
Alternativ können Sie eigene &amp;quot;Menüpunkte&amp;quot; einfügen wie in [[#Weblinks]] und [[#Weblink mit Bild]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
==Anderes Hintergrundbild==&lt;br /&gt;
&lt;br /&gt;
Wenn der Name Ihres Hintergrundbilds unabhängig sein soll vom Namen des floorplan, verwenden Sie das Attribut &#039;&#039;fp_backgroundimg&#039;&#039;. &lt;br /&gt;
 attr Grundriss fp_backgroundimg dateiname.png&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Sie können z.B. nachts ein anderes Hintergrundbild verwenden, als tagsüber:&lt;br /&gt;
 define a_fpbackimg at +*01:00 { \&lt;br /&gt;
      if ( isday() ) {fhem &amp;quot;attr Grundriss fp_backgroundimg Tag.png&amp;quot;} \&lt;br /&gt;
      else {fhem &amp;quot;attr Grundriss fp_backgroundimg Nacht.png&amp;quot;} }&lt;br /&gt;
&lt;br /&gt;
==Beispiele: Screenshot &amp;amp; Definition==&lt;br /&gt;
Es folgen einige Beispiele mit einem Screenshot, den zugehörigen Attributen und relevanten Einträgen in der css-Datei.&lt;br /&gt;
===Nur Symbol===&lt;br /&gt;
[[File:FloorplanInstallationGuide18.png]]&lt;br /&gt;
 define ez_LichtRegal FS20 6969 01&lt;br /&gt;
 attr ez_LichtRegal fp_Grundriss 220,230,0&lt;br /&gt;
 attr ez_LichtRegal model fs20st&lt;br /&gt;
 attr ez_LichtRegal room Esszimmer&lt;br /&gt;
&lt;br /&gt;
===Beschreibung und Symbol===&lt;br /&gt;
[[File:FloorplanInstallationGuide19.png]]&lt;br /&gt;
 define ku_Downlight FS20 696e 00&lt;br /&gt;
 attr ku_Downlight fp_Grundriss 620,520,1&lt;br /&gt;
 attr ku_Downlight model fs20st&lt;br /&gt;
 attr ku_Downlight room Kueche&lt;br /&gt;
&lt;br /&gt;
===Beschreibung, Symbol und Befehle===&lt;br /&gt;
[[File:FloorplanInstallationGuide20.png]] &lt;br /&gt;
 define sz_Leselampe FS20 696b 00&lt;br /&gt;
 attr sz_Leselampe fp_Grundriss 460,900,2,Leselampe&lt;br /&gt;
 attr sz_Leselampe webCmd on:dim50%:off&lt;br /&gt;
 attr sz_Leselampe eventMap on:on dim50%:half off:off&lt;br /&gt;
 attr sz_Leselampe model fs20di	&lt;br /&gt;
 attr sz_Leselampe room Schlafzimmer&lt;br /&gt;
&lt;br /&gt;
===Beschreibung und State===&lt;br /&gt;
[[File:FloorplanInstallationGuide21.png]] &lt;br /&gt;
 define HomeStatus dummy&lt;br /&gt;
 attr HomeStatus fp_Grundriss 110,75,1&lt;br /&gt;
&lt;br /&gt;
 #HomeStatus.devicestate  {color:green; font-size:30px; }&lt;br /&gt;
&lt;br /&gt;
===FHT-Temperatur===&lt;br /&gt;
[[File:FloorplanInstallationGuide22.png]] &lt;br /&gt;
 define ez_FHT FHT 5151&lt;br /&gt;
 attr ez_FHT fp_Grundriss 330,75,1,Innen&lt;br /&gt;
 attr ez_FHT retrycount 3&lt;br /&gt;
 attr ez_FHT room Wohnung,Esszimmer&lt;br /&gt;
&lt;br /&gt;
 #ez_FHT.devicestate      {color:green; font-size:30px; }&lt;br /&gt;
&lt;br /&gt;
===Device-Reading===&lt;br /&gt;
[[File:FloorplanInstallationGuide23.png|none]]&lt;br /&gt;
Z.B. können einzelne S300TH-Readings direkt angezeigt werden, wenn sie die Darstellung mit T: x H:y vermeiden möchten. Verwenden Sie dafür Stil 3. Verwenden Sie die Reading-ID (Groß-/Kleinschreibung beachten) als Beschreibung.&lt;br /&gt;
Besonderheit an diesem Stil: Die Beschreibung kann entweder nur die Reading-ID enthalten oder die Reading-ID gefolgt von der Anzeige-Beschreibung, leerstellenfrei getrennt durch ein Komma.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide24.png]]&lt;br /&gt;
ergibt&lt;br /&gt;
[[File:FloorplanInstallationGuide23.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:FloorplanInstallationGuide25.png]]&lt;br /&gt;
ergibt&lt;br /&gt;
[[File:FloorplanInstallationGuide26.png]]&lt;br /&gt;
&lt;br /&gt;
 define ez_Aussensensor CUL_WS 1&lt;br /&gt;
 attr ez_Aussensensor fp_Grundriss 260,75,3,temperature,Aussen&lt;br /&gt;
 attr ez_Aussensensor model S300&lt;br /&gt;
 attr ez_Aussensensor room Wohnung,Esszimmer&lt;br /&gt;
&lt;br /&gt;
 #ez_Aussensensor.devicestate  {color:green; font-size:30px; }&lt;br /&gt;
&lt;br /&gt;
===Temperatur &amp;amp; Feuchtigkeit===&lt;br /&gt;
 &lt;br /&gt;
[[File:FloorplanInstallationGuide09.png|none]]&lt;br /&gt;
S300TH-Sensoren liefern Messwerte zu Temperatur und Feuchtigkeit. Wollen Sie beide anzeigen, verwenden Sie Stil 4.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Um die Beschreibung auszublenden, geben Sie im Beschreibungsfeld &#039;&#039;&#039;&#039;&#039;&amp;amp;nbsp&#039;&#039;&#039;&#039;&#039; ein.&lt;br /&gt;
&lt;br /&gt;
 define ez_Aussensensor CUL_WS 1&lt;br /&gt;
 attr ez_Aussensensor fp_PlotsPage 100,600,4,Außen&lt;br /&gt;
 attr ez_Aussensensor model S300&lt;br /&gt;
 attr ez_Aussensensor room Wohnung,Esszimmer&lt;br /&gt;
&lt;br /&gt;
 .fp_tempvalue            {color:red; font-size:20px; }&lt;br /&gt;
 .fp_humvalue             {color:blue; font-size:20px; }&lt;br /&gt;
&lt;br /&gt;
===Weblinks===&lt;br /&gt;
[[File:FloorplanInstallationGuide27.png]] &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Home weblink link http://fritz.box:8083/fhem&lt;br /&gt;
attr Home fp_Grundriss 50,75,0,Home&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #Home                    {font-size:14px; width:100px; }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Da floorplans eine eigene URL haben, können Sie auch eigene links auf andere floorplans verwenden.&lt;br /&gt;
&lt;br /&gt;
===Weblink mit Bild===&lt;br /&gt;
Wie im vorhergehenden Beispiel gezeigt, können Sie &#039;&#039;&#039;&#039;&#039;weblink link&#039;&#039;&#039;&#039;&#039; verwenden, um einen Text-Anchor zum Wechsel zu anderen URLs zu verwenden. Da floorplans eine eigene URL haben, können Sie so auch zwischen floorplans wechseln.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie als Link statt eines Texts ein Bild verwenden möchten, verwenden Sie dieses Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;define ImageAnchor weblink htmlCode { &#039;&amp;lt;a href=&amp;quot;http://&amp;lt;ip&amp;gt;:&amp;lt;port&amp;gt;/fhem/floorplan/Grundriss2&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;/icons/pic.png&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039; }&amp;lt;/pre&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;href&#039;&#039;&#039; gibt die URL an, zu der Sie springen möchten, z.B. ein anderer floorplan.&lt;br /&gt;
*&#039;&#039;&#039;img&#039;&#039;&#039; gibt den Pfad der Bilddatei an&lt;br /&gt;
Nachdem Sie diesen &#039;&#039;weblink htmlCode&#039;&#039; definiert haben, können Sie ihn zu ihrem floorplan hinzufügen.&lt;br /&gt;
&lt;br /&gt;
===Bilddatei einfügen===&lt;br /&gt;
Um eine Bilddatei ohne Link einzufügen, verwenden Sie statt &#039;&#039;weblink htmlcode&#039;&#039; einfach  &#039;&#039;&#039;&#039;&#039;weblink image&#039;&#039;&#039;&#039;&#039;, Details siehe [http://fhem.de/commandref.html#weblink commandref].&lt;br /&gt;
&lt;br /&gt;
===Eigene Readings-Listen anzeigen===&lt;br /&gt;
&lt;br /&gt;
Das Einbinden beliebiger Listen von Device-Readings lässt sich ebenfalls mit &#039;&#039;weblink htmlCode&#039;&#039; erreichen. &lt;br /&gt;
#Laden Sie dazu aus [http://fhem.svn.sourceforge.net/viewvc/fhem/trunk/fhem/contrib/95_FLOORPLAN/?sortby=file diesem] SVN-Ordner die Datei &#039;&#039;&#039;&#039;&#039;99_myFloorplanList.pm&#039;&#039;&#039;&#039;&#039; herunter. &lt;br /&gt;
#Passen Sie die Zeilen im Abschnitt &#039;&#039;&#039;&#039;&#039;## Change this list as needed&#039;&#039;&#039;&#039;&#039; auf Ihre Bedürfnisse an. Sie können in diesem Abschnitt ggf. Zeilen löschen oder auch hinzufügen.&lt;br /&gt;
#Laden Sie mit dem fhem-Befehl &#039;&#039;&#039;&#039;&#039;reload 99_myFloorplanList.pm&#039;&#039;&#039;&#039;&#039; neu - ebenso nach jeder weiteren Programmänderung. Achten Sie nach jedem reload auf eventuelle Fehlermeldungen im Log.&lt;br /&gt;
#Binden Sie die Routine in das webfrontend ein mit &amp;lt;code&amp;gt;define w_WertListe1 weblink htmlCode {doWertListe1()}&amp;lt;/code&amp;gt;&lt;br /&gt;
#Dieser Weblink kann nun auf Ihrem floorplan hinzugefügt werden [[File:FloorplanInstallationGuide28.png|none]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht dann z.B. so aus:&lt;br /&gt;
[[File:FloorplanInstallationGuide29.png|none]]&lt;br /&gt;
&lt;br /&gt;
===iFrames, z.B. Wettervorhersage===&lt;br /&gt;
[[File:FloorplanInstallationGuide30.png|none]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Wetter weblink iframe http://www.wetteronline.de/cgi-bin/hpweather?PLZ=80331&lt;br /&gt;
attr Wetter fp_Grundriss 420,25&lt;br /&gt;
attr Wetter htmlattr width=&amp;quot;220&amp;quot; height=&amp;quot;330&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
attr Wetter room Plots&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anwendungsbeispiele==&lt;br /&gt;
* Aktuelle Uhrzeit auf einem FLOORPLAN anzeigen: {{Link2Forum|Topic=23629|Message=169082}}&lt;br /&gt;
* Animierte SVG-Icons für responsiven Floorplan: {{Link2Forum|Topic=26673|Message=196337}}&lt;br /&gt;
* [[Floorplan FHT Temperatur]]&lt;br /&gt;
* [[Remotecontrol]]&lt;br /&gt;
* [[Browsersteuerung, Seiten per JS autom. aufrufen]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12328</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12328"/>
		<updated>2015-10-01T09:51:15Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Mehrere Devices schalten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bittte mit dem Autor abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;Readings&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySchalter1 schalten myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;sleep 60;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12327</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12327"/>
		<updated>2015-10-01T09:47:57Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* Mehrere Devices schalten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bittte mit dem Autor abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;Readings&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Auch innerhalb eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 on&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 on&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 on&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 on&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 on;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort einschalten, und erst nach dem Event von maSchalter1 auch myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;sleep 60;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12326</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12326"/>
		<updated>2015-10-01T09:44:33Z</updated>

		<summary type="html">&lt;p&gt;Uli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bittte mit dem Autor abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;Readings&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
Auch innerhlab eines notify (oder anderen fhem-Befehlen) kann man mehrere Befehle auflisten, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;set myLampe2 on&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das notify schaltet myLampe1 wann immer mySchalter1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 on&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst nach dem Event von mySchalter1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 on&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 on&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySchalter1:on set myLampe1 on;;set myLampe2 on;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort einschalten, und erst nach dem Event von maSchalter1 auch myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;sleep 60;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12325</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12325"/>
		<updated>2015-10-01T09:36:08Z</updated>

		<summary type="html">&lt;p&gt;Uli: /* at mit mehreren Befehlen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bittte mit dem Autor abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;Readings&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
==at mit mehreren Befehlen==&lt;br /&gt;
&lt;br /&gt;
Wie wir zuvor gesehen haben, kann man mehrere fhem-Befehle in einer Zeile durch Semikolon-getrennte Auflistung kombinieren, z.B.&lt;br /&gt;
 set myLampe1 on;set myLampe2 on&lt;br /&gt;
Das geht auch bei einem at, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define a4 at *12:00 set myLampe1 on;set myLampe2 on&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: das at wird um 12:00 ausgeführt und schaltet myLampe1. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 on&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLampe2 sofort, myLampe1 erst um 12:00 .&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 on&#039;&#039; erst um 12:00 ausgeführt werden, muss man ein doppeltes Semikolon nutzen:&lt;br /&gt;
 define a4 at *12:00 set myLampe1 on;;set myLampe2 on&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define a5 at *12:00 set myLampe1 on;;set myLampe2 on;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort einschalten, und erst um 12:00 auch myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;sleep 60;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12324</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12324"/>
		<updated>2015-10-01T09:33:07Z</updated>

		<summary type="html">&lt;p&gt;Uli: Kapitel &amp;quot;at mit mehreren Befehlen&amp;quot; hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bittte mit dem Autor abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;Readings&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
==at mit mehreren Befehlen==&lt;br /&gt;
&lt;br /&gt;
Wie wir zuvor gesehen haben, kann man mehrere fhem-Befehle in einer Zeile durch Semikolon-getrennte Auflistung kombinieren, z.B.&lt;br /&gt;
 set myLampe1 on;set myLampe2 on&lt;br /&gt;
Das geht auch bei einem at, jedoch ist hier eines zu beachten:&lt;br /&gt;
 define a4 at *12:00 set myLampe1 on;set myLampe2 on&lt;br /&gt;
Die Befehle sind mit einem smikolon getrennt. Effekt ist; das at wird um 12:00 ausgeführt und schaltet myLampe1. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLampe2 on&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet.&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLampe2 on&#039;&#039; erst um 12:00 ausgeführt werden, muss man ein doppeltes Semikolon nutzen:&lt;br /&gt;
 define a4 at *12:00 set myLampe1 on;;set myLampe2 on&lt;br /&gt;
&lt;br /&gt;
 define a5 at *12:00 set myLampe1 on;;set myLampe2 on; set myLampe3 on&lt;br /&gt;
Dieses define würde also myLampe3 sofort einschalten, und erst um 12:00 auch myLampe1 und myLampe2.&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;sleep 60;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12323</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12323"/>
		<updated>2015-09-30T19:55:50Z</updated>

		<summary type="html">&lt;p&gt;Uli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und nach dem installieren der fhem-Software sofort loslegen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bittte mit dem Autor abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;Readings&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;sleep 60;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12322</id>
		<title>Erste Schritte in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=12322"/>
		<updated>2015-09-30T19:55:04Z</updated>

		<summary type="html">&lt;p&gt;Uli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
Für alle, die das erste mal mit fhem arbeiten, hier ein kleiner Kurs zum Einstieg.&lt;br /&gt;
Dieser ist so aufgebaut, dass man noch keine Hardware benötigt und erst einmal testen kann.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung wurde ursprünglich von Ulrich Maass publiziert, der die Genehmigung erteilt hat, sie auch im Wiki zu veröffentlichen.&lt;br /&gt;
Anmerkung zur Bearbeitung: Korrekturen von Tippfehlern kann jeder machen. Redaktionelle Änderungen und Erweiterungen aber bittte mit dem Autor abstimmen.&lt;br /&gt;
&lt;br /&gt;
==Der erste Einstieg==&lt;br /&gt;
Um fhem zum ersten Mal aufzurufen, geben Sie im Browser ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-Adresse&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
also z.B. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
Sie gelangen auf den Startbildschirm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png]]&lt;br /&gt;
&lt;br /&gt;
*Am oberen Bildschirmrand sehen Sie das weiße &#039;&#039;Kommandofeld&#039;&#039;, in das Sie Befehle tippen können.&lt;br /&gt;
*Als ersten Menüpunkt sehen Sie die Schaltfläche &#039;&#039;Save config&#039;&#039;, mit der Änderungen so gespeichert werden, dass sie auch nach einem Neustart noch vorhanden sind.&lt;br /&gt;
*Außerdem gibt es bereits die Räume &#039;&#039;Unsorted&#039;&#039; und &#039;&#039;Everything&#039;&#039;, die wir bald kennenlernen.&lt;br /&gt;
*Im unteren Block befinden sich weitere Links, auf die wir später ebenfalls eingehen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis &#039;&#039;Security Check&#039;&#039; besagt, dass Sie noch kein Passwort für fhem eingerichtet haben. Wie man einen Passwortschutz einrichten kann, steht in der fhem-Befehlsreferenz [http://fhem.de/commandref_DE.html commandref], in der es übrigens eine Beschreibung zu allen Funktionen und Modulen von fhem gibt. Um diese Meldung erst einmal zu unterdrücken, geben Sie in das Kommandofeld ein:&lt;br /&gt;
 attr global motd none&lt;br /&gt;
und bestätigen Ihre Eingabe mit der {{Taste|Enter}}-Taste.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Um fhem kennenzulernen, legen wir erst einmal einige &amp;quot;Dummy&amp;quot;-Devices an. So können Sie diese Tests auch ohne ein Hardware-System durchführen bzw. kann hier eine allgemeine Einführung erfolgen, ohne auf die Unterschiede der einzelnen Hardwaresysteme einzugehen. Ein Dummy-Device sieht auf der fhem-Oberfläche im Allgemeinen genau so aus, wie ein fhem-Device zu einem &amp;quot;echten&amp;quot; Gerät Ihres Hardwaresystems.&lt;br /&gt;
&lt;br /&gt;
Zunächst legen wir einen Schalter an. Dieser soll einen Lichtschalter an der Wand simulieren. Geben Sie dazu folgenden Befehl in das Kommandofeld ein:&lt;br /&gt;
 define mySchalter1 dummy&lt;br /&gt;
Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen fhem-Device &#039;&#039;mySchalter1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
Der Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; zeigt immer die grundlegende Ausprägung eines fhem-device an:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME&#039;&#039;&#039;&#039;&#039;  ist der von Ihnen vergebene Name.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE&#039;&#039;&#039;&#039;&#039;  ist der Typ des fhem-device, hier dummy.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE&#039;&#039;&#039;&#039;&#039; ist der in allen Übersichten angezeigte Status des Geräts. Da noch keine Zuordnung stattgefunden hat, ist dieser zunächst &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Räume definieren==&lt;br /&gt;
In Räumen können Sie Geräte gruppieren, die sich auch physisch in einem Raum (Wohnzimmer, Schlafzimmer, etc.) befinden.&lt;br /&gt;
&lt;br /&gt;
Um ein Device einem Raum zuzuordnen (der Raum muss zu diesem Zeitpunkt noch nicht existieren), verwenden Sie folgenden Befehl:&lt;br /&gt;
 attr mySchalter1 room Schulungsraum&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld und Abschließen der Eingabe mit {{Taste|Enter}} ist das Device dem Raum &#039;&#039;Schulungsraum&#039;&#039; zugeordnet. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einmal auf den Raum &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
Es werden nun alle Geräte angezeigt, die diesem Raum zugeordnet wurden. Bisher haben wir hier nur ein Gerät: &#039;&#039;mySchalter1&#039;&#039;. Es wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt.&lt;br /&gt;
Neben dem Device-Namen wird immer der Status des Device angezeigt, hier noch &#039;&#039;???&#039;&#039;.&lt;br /&gt;
Wenn Sie auf den Namen &#039;&#039;mySchalter1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySchalter1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySchalter1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Statt den o.g. Befehl in das Kommandofeld einzugeben, können Sie auch im unteren Bereich der Detailansicht das gewünschte Attribut (hier: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) auswählen und in dem Textfeld rechts daneben die gewünschten Werte eintragen, hier &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Schließen Sie Ihre Eingabe durch Klick auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie nun wieder links auf den &#039;&#039;Schulungsraum&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie sehen, dass durch die Attribut-Angabe im vorhergehenden Schritt, nun in der Raumansicht die Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; hinzugekommen sind.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie versuchsweise auf &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039;: Statt der bisher angezeigten &#039;&#039;???&#039;&#039; erscheint nun ein Glühbirnensymbol, das den aktuellen Status darstellt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie durch Klicken auf den Device-Namen &#039;&#039;mySchalter1&#039;&#039; wieder in die Detailansicht wechseln, sehen Sie, dass im Block &#039;&#039;Internals&#039;&#039; nun auch der aktuelle Zustand &#039;&#039;STATE&#039;&#039; angezeigt wird. Dieser wird in der Raumansicht als Icon (Glühbirne) dargestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
Auch sehen Sie im Detail-Bildschirm einen neuen Block &#039;&#039;Readings&#039;&#039;. Dieser zeigt Informationen an, die - anders als Attribute - nicht direkt vom Anwender geändert werden können. Unter anderem werden hier Datum und Uhrzeit der letzten Zustandsänderung angezeigt.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySchalter1&#039;&#039; noch einmal aus und prüfen Sie, ob das Reading &#039;&#039;STATE&#039;&#039; incl. seines Zeitstempels aktualisiert wurde.&lt;br /&gt;
&lt;br /&gt;
==Event Monitor==&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun in Ihrem Browser ein zusätzliches Fenster, in dem Sie ebenfalls fhem und darin den &#039;&#039;&#039;Event Monitor&#039;&#039;&#039; anzeigen. Am Schnellsten geht das, indem Sie mit der rechten Maustaste auf &#039;&#039;Event Monitor&#039;&#039; klicken und aus dem Kontextmenü des Browsers &#039;&#039;Öffnen in neuem Fenster&#039;&#039; auswählen. Legen Sie die Fenster so übereinander, dass Sie gleichzeitig den Event Monitor sehen und Ihren &#039;&#039;mySchalter1&#039;&#039; bedienen können. Unter Windows ab Version 7 geht das am Einfachsten, wenn Sie zuerst das eine Fenster aktivieren und {{Taste|Windows}}+{{Taste|Pfeil rechts}} drücken, anschließend das selbe mit dem anderen Fenster und {{Taste|Windows}}+{{Taste|Pfeil links}} wiederholen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Bei jedem Schalten von &#039;&#039;mySchalter1&#039;&#039; wird in fhem ein Ereignis, englisch event, ausgelöst. Bei jeder Betätigung des Schalters erscheint ein neuer Event im &#039;&#039;Event Monitor&#039;&#039;. Probieren Sie auch, was passiert, wenn Sie zweimal hintereinander auf &#039;&#039;on&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Ein Event besteht immer aus dem Zeitstempel, gefolgt vom Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), dem auslösenden Device-Namen (hier &#039;&#039;mySchalter1&#039;&#039;), sowie dem ausgelösten Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Auch &amp;quot;echte&amp;quot; sendende fhem-Geräte, also z.B. eine Fernbedienung oder ein Funkschalter an der Wand, lösen bei jedem Tastendruck auf dieses Gerät oder bei Klick auf das zugehörige fhem-Device einen Event aus. Das Verständnis von Events und wie sie aufgebaut sind ist also elementar, wir werden sie noch oft benötigen. Probieren Sie ein wenig damit herum.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySchalter1&#039;&#039; kann also über Klicken auf &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geschaltet werden. Alternativ geht das auch über die Eingabe eines Befehls in das Kommandofeld.&lt;br /&gt;
&lt;br /&gt;
Geben Sie dazu in das Kommandofeld &amp;lt;code&amp;gt;set mySchalter1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySchalter1 off&amp;lt;/code&amp;gt; ein und bestätigen jeweils mit der {{Taste|Enter}}-Taste. Auch hierbei ändert sich der Schaltzustand und ein Event wird ausgelöst. Den &#039;&#039;set&#039;&#039;-Befehl werden wir ebenfalls noch häufig verwenden.&lt;br /&gt;
&lt;br /&gt;
Für weitere Tests legen wir nun ein neues Device &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySchalter1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLampe1 dummy&lt;br /&gt;
Da dies eine Lampe, also einen Aktor darstellen soll, werden wir der Lampe selbst keine Buttons für &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; geben.&lt;br /&gt;
&lt;br /&gt;
Die Lampe soll im Schulungsraum stehen. Diese Zuordnung könnten Sie wie zuvor über die Kommandozeile erreichen. Diesmal sind wir aber tippfaul und möchten die Zuordnung durch Klicken vornehmen.&lt;br /&gt;
&lt;br /&gt;
Da &#039;&#039;myLampe1&#039;&#039; noch keinem Raum zugeordnet ist, erscheint sie im Raum &#039;&#039;Unsorted&#039;&#039;. Wechseln Sie in diesen Raum und klicken Sie auf den Namen von &#039;&#039;myLampe1&#039;&#039;, um in die Detailansicht zu gelangen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich können wir wieder die Attributzuordnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
Praktischerweise ist das Attribut &#039;&#039;room&#039;&#039; bereits ausgewählt, auch der Raum &#039;&#039;Schulungsraum&#039;&#039; ist bereits voreingestellt. Sie müssen also nur noch auf den Button &#039;&#039;&#039;&#039;&#039;attr&#039;&#039;&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Schulungsraum&#039;&#039;. Es werden beide Geräte angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
==Bei Event ausführen - notify==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden wir fhem beibringen, auf einen Event von &#039;&#039;mySchalter1&#039;&#039; zu reagieren. Immer dann, wenn &#039;&#039;mySchalter1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, soll &#039;&#039;myLampe1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
Dazu wird in fhem ein &amp;quot;notify&amp;quot; verwendet. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;NAME&amp;gt; notify &amp;lt;REGEXP&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Der Name &#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; dient später dazu, dieses fhem-Device anzeigen und wiederfinden zu können. Als Name verwende ich hier &#039;&#039;n_mySchalter1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySchalter1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Dieser Name scheint jetzt kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. Sie können es ganz nach Gusto auch &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;. Device-Namen dürfen aus den Zeichen &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, Unterstrich &#039;&#039;&#039;_&#039;&#039;&#039; und Punkt &#039;&#039;&#039;.&#039;&#039;&#039; bestehen, wobei ein Punkt nicht an erster Stelle stehen darf. Sie werden später sehen, dass der Punkt in perl und damit fhem eine besondere Bedeutung hat, wenn möglich sollten Sie daher auf seine Verwendung in Device-Namen verzichten.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;regex&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; und ist die Bedingung, unter der das Notify ausgeführt werden soll. Wann immer in fhem ein Event auftritt, wird für alle vorhandenen Notify geprüft, ob die angegebene Regex zutrifft. Der auslösende Event ist in unserem Fall, dass &#039;&#039;mySchalter1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; erzeugt. Dafür wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySchalter1:on&amp;lt;/code&amp;gt; verwendet. Regular Expressions werden in perl und fhem häufig verwendet, Sie werden sich damit später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; definiert, was denn eigentlich ausgeführt werden soll. In unserem Beispiel soll das &amp;lt;code&amp;gt;set myLampe1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySchalter1_on notify mySchalter1:on set myLampe1 on&lt;br /&gt;
&lt;br /&gt;
Nach Eingabe dieses Befehls in das Kommandofeld, abgeschlossen durch {{Taste|Enter}}, sehen Sie wieder die Detailansicht des neuen fhem-Device, also des Notify (siehe TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
Im Block &#039;&#039;Internals&#039;&#039; sehen Sie hier die Definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Angezeigt wird hier alles, was bei der Definition nach dem Wort &amp;quot;notify&amp;quot;, also nach dem Gerätetyp angegeben wurde. Es erscheinen also &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; und &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im unteren Bereich werden die fhem-Devices angezeigt, die mit dem Notify verbunden sind. Die Geräte werden als klickbare Device-Namen angezeigt. Das ist praktisch, da man so mit einem Klick zur Detailansicht des jeweiligen Geräts springen kann.&lt;br /&gt;
&lt;br /&gt;
Ordnen Sie auch das Notify unserem Schulungsraum zu (im unteren Bereich das Attribut &#039;&#039;room&#039;&#039; und den passenden Raum auswählen und dann auf &#039;&#039;attr&#039;&#039; klicken).&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun im fhem-Menü auf Schulungsraum klicken, werden unsere drei fhem-Devices angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Üblicherweise würde man das Notify nicht dem Raum zuordnen, da es später für den Benutzer gar nicht sichtbar sein soll. Für unsere Testdurchläufe ist es aber praktischer.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun &#039;&#039;mySchalter1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLampe1&#039;&#039; auf &#039;&#039;on&#039;&#039; geschaltet. Das funktioniert scheinbar nur beim ersten Mal – wenn Sie aber den Event Monitor prüfen oder in der Detailansicht von &#039;&#039;myLampe1&#039;&#039; auf den Zeitstempel der letzten Statusänderung schauen, werden Sie sehen, dass es jedes Mal ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Damit das Ganze auch beim Ausschalten funktioniert, legen Sie ein zweites notify an:&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
Funktioniert es wie erwartet?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich möchte man nicht für jeden Befehl, den ein Device auslöst, ein eigenes Notify anlegen. Es geht auch einfacher.&lt;br /&gt;
Statt&lt;br /&gt;
 define n_mySchalter1_on  notify mySchalter1:on  set myLampe1 on&lt;br /&gt;
 define n_mySchalter1_off notify mySchalter1:off set myLampe1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySchalter1     notify mySchalter1     set myLampe1 $EVENT&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySchalter1&#039;&#039; den Event &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039; sendet. Lassen wir diese Angabe weg, löst dieses Notify bei jedem Event von &#039;&#039;mySchalter1&#039;&#039; aus, egal mit welchem Kommando. Im auszuführenden &#039;&#039;set&#039;&#039;-Befehl verwenden wir nun die fhem-Variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (Groß/Kleinschreibung beachten!). Dies ist ein Platzhalter für den Befehl, der vom auslösenden Event übernommen wird. Wenn also &#039;&#039;mySchalter1&#039;&#039; ein &#039;&#039;on&#039;&#039; auslöst, nimmt &#039;&#039;&#039;$EVENT&#039;&#039;&#039; den Wert &#039;&#039;on&#039;&#039; an. Entsprechend für &#039;&#039;off&#039;&#039; oder jeden anderen Befehl.&lt;br /&gt;
&lt;br /&gt;
==Devices löschen oder deaktivieren – delete, disable==&lt;br /&gt;
Wenn Sie den Event Monitor beachten, werden Sie sehen, dass nach jeder Betätigung von &#039;&#039;mySchalter1&#039;&#039; der Befehl für &#039;&#039;myLampe1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySchalter1&#039;&#039; zwei Notify reagieren – sowohl die &amp;quot;alten&amp;quot; Notify wie auch das Neue. Um dies zu umgehen, müssen wir die alten Notify loswerden. Dazu gibt es zwei Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
#Löschen Sie ein Notify mit dem Befehl &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, z.B. mit &amp;lt;code&amp;gt;delete n_mySchalter1_on&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; Befehl funktioniert übrigens für jedes Objekt in fhem. Sie können damit also auch &amp;quot;echte&amp;quot; Devices löschen.&lt;br /&gt;
#Deaktivieren Sie ein Notify, indem Sie das Attribut &#039;&#039;disable&#039;&#039; verwenden. Das können Sie wieder über die Detailansicht des Notify setzen (im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auswählen und den Wert &#039;&#039;1&#039;&#039; auswählen), oder in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySchalter1_off disable 1&amp;lt;/code&amp;gt; eingeben.&lt;br /&gt;
&lt;br /&gt;
==Save Config==&lt;br /&gt;
&lt;br /&gt;
Wann immer Sie mit dem aktuellen Zustand Ihrer fhem-Konfiguration zufrieden sind, klicken Sie im fhem-Menü oben links einmal auf &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; oder geben Sie in das Kommandofeld den Befehl &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; ein. Ihre Konfiguration wird nun gespeichert. Tun Sie das nicht, sind alle Änderungen nach dem nächsten fhem-Neustart &#039;&#039;&#039;verloren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Bestehende Devices verändern – modify==&lt;br /&gt;
&lt;br /&gt;
Wir legen nun eine zweite Lampe an, die ebenfalls durch unseren &#039;&#039;mySchalter1&#039;&#039; und unser Notify geschaltet werden soll.&lt;br /&gt;
Die neue Lampe wird durch folgende Eingabe in das Kommandofeld erzeugt:&lt;br /&gt;
 define myLampe2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLampe2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Schulungsraum&#039;&#039; zu und weisen ihr über das Attribut &#039;&#039;webCmd&#039;&#039; Schaltflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; zu.&lt;br /&gt;
&lt;br /&gt;
Nun passen wir das Notify &#039;&#039;n_mySchalter1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Schulungsraum&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySchalter1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im Detail-Bildschirm befindet sich die Zeile &#039;&#039;DEF&#039;&#039;, die wir uns vorhin schon einmal angeschaut haben. Wenn Sie auf das Wort &#039;&#039;DEF&#039;&#039; klicken, können Sie die Definition eines fhem-Objekts bearbeiten.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Im Feld &#039;&#039;DEF&#039;&#039; wird nur der Teil der Definition angezeigt, der beim Anlegen dieses Notify nach dem Objekttyp, also &#039;&#039;notify&#039;&#039; folgt. Sie finden hier also zunächst die Regex auf die das Notify reagiert, dann nach einer Leerstelle den auszuführenden Befehl.&lt;br /&gt;
Der Lesbarkeit halber ist im Folgenden immer das gesamte define-Statement dargestellt, auch wenn man es im Feld &#039;&#039;DEF&#039;&#039; nicht vollständig sieht.&lt;br /&gt;
&lt;br /&gt;
Wir ändern hier also von &lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myLampe2 $EVENT&lt;br /&gt;
&lt;br /&gt;
Zum Beenden der Bearbeitung klicken Sie auf die Schaltfläche &#039;&#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039;&#039;, hier also &#039;&#039;&#039;&#039;&#039;modify n_mySchalter1&#039;&#039;&#039;&#039;&#039;. Wenn Sie die Angaben im Detail-Bildschirm prüfen, sehen Sie, dass die &#039;&#039;DEF&#039;&#039;inition des Notify angepasst wurde.&lt;br /&gt;
Beachten Sie auch hier wieder, dass im Detailscreen im unteren Bereich unter &#039;&#039;Probably associated with&#039;&#039; die geschalteten Lampen erscheinen – das wird noch oft nützlich sein.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie testen, ob ein Klick auf &#039;&#039;mySchalter1&#039;&#039; auch wirklich beide Lampen schaltet. Schauen Sie sich dabei auch wieder in einem separaten Fenster mit dem Event Monitor die entstehenden Events an.&lt;br /&gt;
&lt;br /&gt;
==Mehrere Devices schalten==&lt;br /&gt;
&lt;br /&gt;
Zum Schalten mehrerer Devices kann also verwendet werden&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Eine alternative Schreibweise dafür ist&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Auch eine Kombination ist möglich:&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on; set &amp;lt;device3&amp;gt; off&lt;br /&gt;
&lt;br /&gt;
==Devices umbenennen==&lt;br /&gt;
&lt;br /&gt;
Schließlich wollen wir (zur Übung) noch ein Device umbenennen: Aus &#039;&#039;&#039;&#039;&#039;myLampe2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStehlampe&#039;&#039;&#039;&#039;&#039; werden. Dafür verwenden wir&lt;br /&gt;
 rename &amp;lt;alterName&amp;gt; &amp;lt;neuerName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei ist zu beachten, dass zugehörige notify-Anweisungen &#039;&#039;&#039;nicht&#039;&#039;&#039; automatisch aktualisiert werden. Beachten Sie also vor dem Umbenennen im unteren Bereich des Detail-Bildschirms die Liste &#039;&#039;Probably associated with&#039;&#039;, damit Sie bei der folgenden Anpassung keines Ihrer Notify vergessen.&lt;br /&gt;
&lt;br /&gt;
Geben Sie also in das Kommandofeld ein&lt;br /&gt;
 rename myLampe1 myStehlampe&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySchalter1&#039;&#039; an, indem Sie auf dessen Detail-Bildschirm im Bereich &#039;&#039;DEF&#039;&#039; die Definition anpassen.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung muss das Notify lauten&lt;br /&gt;
 define n_mySchalter1 notify mySchalter1 set myLampe1,myStehlampe $EVENT&lt;br /&gt;
&lt;br /&gt;
==Zeitgesteuert schalten - at==&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt soll eine Zeitsteuerung eingerichtet werden.&lt;br /&gt;
Zunächst möchten wir erreichen, dass &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet wird wie z.B. ein Treppenhauslicht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Damit Sie den Effekt sehen können, schalten Sie &#039;&#039;myLampe1&#039;&#039; vorher auf &#039;&#039;on&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Für Zeitsteuerungen gibt es den fhem-Device-Typ &#039;&#039;at&#039;&#039;. Die Befehlsstruktur ist&lt;br /&gt;
 define &amp;lt;name&amp;gt; at &amp;lt;timespec&amp;gt; &amp;lt;command&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;name&amp;gt;&#039;&#039;&#039; und &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; haben hier dieselbe Funktion wie bei notify. Neu ist hier lediglich &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), also die Zeitangabe. Diese erfolgt in der Schreibweise &#039;&#039;HH:MM:SS&#039;&#039; oder &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Um &#039;&#039;&#039;&#039;&#039;myLampe1&#039;&#039;&#039;&#039;&#039; also &#039;&#039;&#039;in einer Minute auszuschalten&#039;&#039;&#039;, erzeugen Sie folgendes &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLampe1 at +00:01:00 set myLampe1 off&lt;br /&gt;
&lt;br /&gt;
Probieren Sie es aus.&lt;br /&gt;
Wird &#039;&#039;myLampe1&#039;&#039; nach einer Minute ausgeschaltet?&lt;br /&gt;
Wird dabei ein Event erzeugt?&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sich die Detailansicht des &#039;&#039;at&#039;&#039; anschauen möchten, müssen Sie sich übrigens beeilen: Nach der einmaligen Ausführung wird das &#039;&#039;at&#039;&#039; automatisch gelöscht. Falls fhem schneller war, können Sie es ja noch einmal anlegen und ggf. eine längere Zeitspanne angeben :-)&lt;br /&gt;
&lt;br /&gt;
Bei  &amp;lt;timespec&amp;gt; kann man die Sekunden auch weglassen und einfach nur HH:MM schreiben. Außerdem gibt es mehrere Varianten:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Varianten von Zeitangaben für &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!Notation&lt;br /&gt;
!Erklärung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In zwei Minuten; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|Um zwei Minuten nach Mitternacht, also um 00:02 Uhr und 0 Sekunden; einmalige Ausführung&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Täglich um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Alle 2 Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Dreimal, alle zwei Minuten&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Dreimal um 00:02 Uhr&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Täglich zu Sonnenuntergang&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|Täglich 2 Minuten (120 Sekunden) nach Sonnenaufgang&lt;br /&gt;
|}&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;*&#039;&#039;&#039; wird also eine dauerhafte Wiederholung definiert. Die Wiederholungen laufen so lange, bis das &#039;&#039;at&#039;&#039; gelöscht oder disabled wird.&lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;+&#039;&#039;&#039; wird die angegebene Zeit nicht mehr als absolute Uhrzeit interpretiert, sondern als Timer, nach wie vielen Stunden:Minuten:Sekunden der Befehl ausgeführt wird. &lt;br /&gt;
*Durch die Angabe von &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; wird das &#039;&#039;at&#039;&#039; nur n-mal durchlaufen.&lt;br /&gt;
*Die Funktionen &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; und &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; liefern die passende Uhrzeit zurück. Durch Angabe von &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039; wird dies täglich wiederholt.&lt;br /&gt;
&lt;br /&gt;
Um bspw. täglich zu Sonnenaufgang die Gartenbeleuchtung auszuschalten, definieren Sie so etwas wie&lt;br /&gt;
 define a_GartenLicht_morgens_off at *{sunrise()} set GartenLicht off&lt;br /&gt;
&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
&lt;br /&gt;
Als letzte Übung wollen wir ein &#039;&#039;notify&#039;&#039; und ein &#039;&#039;at&#039;&#039; verbinden. Der Timer soll nun nicht starten, wenn Sie den Befehl in das Kommandofeld eingeben, sondern wenn ein Event eintritt.&lt;br /&gt;
&lt;br /&gt;
Dazu basteln wir uns ein Treppenhaus: Legen Sie dafür die Dummy-Devices &#039;&#039;th_Schalter&#039;&#039; und &#039;&#039;th_Licht&#039;&#039; im Raum &#039;&#039;Treppenhaus&#039;&#039; an. Zum Anlegen des Raums &#039;&#039;Treppenhaus&#039;&#039; ordnen Sie dem ersten Device den Raum über das Kommandofeld zu, alle weiteren Attribute dann durch Klicken im Detail-Bildschirm: &lt;br /&gt;
 define th_Schalter dummy&lt;br /&gt;
 attr   th_Schalter room Treppenhaus&lt;br /&gt;
 attr   th_Schalter webCmd on&lt;br /&gt;
 define th_Licht dummy&lt;br /&gt;
 attr   th_Licht room Treppenhaus&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;th_Schalter:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set th_Licht on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Einen Timer starten, der es nach einer Minute wieder ausschaltet. Also &amp;lt;code&amp;gt;define a1 at +00:01 set th_Licht off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das sieht dann so aus (und muss ins Kommandofeld als &#039;&#039;&#039;eine&#039;&#039;&#039; Zeile eingegeben werden):&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on &lt;br /&gt;
        set th_Licht on;define a1 at +00:01 set th_Licht off&lt;br /&gt;
Beim Auslösen des Notify wird also als Kommando das Einschalten des Treppenhauslichts ausgelöst, wie auch das Definieren eines Timers, der es eine Minute später wieder ausschaltet.&lt;br /&gt;
Funktioniert es?&lt;br /&gt;
&lt;br /&gt;
Da das ja doch recht sperrig ist, gibt es noch eine etwas einfachere Alternative:&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on;sleep 60;set th_Licht off&lt;br /&gt;
&lt;br /&gt;
Manche Hardwaresysteme bieten auch den Befehl &#039;&#039;on-for-timer&#039;&#039;, mit dem man alternativ schreiben kann&lt;br /&gt;
 define n_th_Schalter_on notify th_Schalter:on set th_Licht on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Uli</name></author>
	</entry>
</feed>