<?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=Afo-solar</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=Afo-solar"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Afo-solar"/>
	<updated>2026-04-30T18:18:26Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=First_steps_in_FHEM&amp;diff=39778</id>
		<title>First steps in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=First_steps_in_FHEM&amp;diff=39778"/>
		<updated>2024-12-31T20:03:59Z</updated>

		<summary type="html">&lt;p&gt;Afo-solar: In the English wiki the page &amp;quot;Import-of-Code-Snippets&amp;quot; is missing, hence I deleted the phrase &amp;quot;please note this article Import-of-Code-Snippets&amp;quot;. I corrected the German word &amp;quot;und&amp;quot; in the headline &amp;quot;Event-driven timer start - notify und at&amp;quot; to the English word &amp;quot;and&amp;quot;.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This a beginners course for those starting to work with FHEM. After you have installed FHEM on your server you may reproduce all steps without any additional smart home hardware.&lt;br /&gt;
&lt;br /&gt;
This guide was originally published by Ulrich Maass, who gave his permission to publish it in the FHEM wiki.&lt;br /&gt;
&lt;br /&gt;
Note to editors: Everybody is welcome to improve typo, grammar and style. Content changes and extentions should be discussed with the author (e. g. on associated [[Diskussion:First_steps_in_FHEM|discussion page]]).&lt;br /&gt;
&lt;br /&gt;
== First attempt ==&lt;br /&gt;
To start FHEM for the first time, enter in your browser&#039;s address field:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-address&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
e. g. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The FHEM homepage is displayed:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png|border]]&lt;br /&gt;
&lt;br /&gt;
* At the top of the screen you can see the white &#039;&#039;command line&#039;&#039; where you can enter commands.&lt;br /&gt;
* The first menu item is the &#039;&#039;Save config&#039;&#039; button, which saves changes so that they are still available even after a restart.&lt;br /&gt;
* Furthermore, there are already the rooms &#039;&#039;Unsorted&#039;&#039; and &#039;&#039;Everything&#039;&#039; that we will soon get to know&lt;br /&gt;
* In the lower block there are further links, which we will also discuss later.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Security Check&#039;&#039; note indicates that you have not yet set a password for FHEM. To set up password protection, see the FHEM command reference {{Link2CmdRef|Anker=allowed}}, which contains a description of all FHEM functions and modules. To suppress this message for now, enter the following in the command line: &lt;br /&gt;
 attr global motd none&lt;br /&gt;
and confirm this change with {{Taste|Enter}} or click on the link of the same name.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png|border]]&lt;br /&gt;
&lt;br /&gt;
== Creating device - define  ==&lt;br /&gt;
The basic element of FHEM is called &#039;&#039;device&#039;&#039;.Typical devices are, for example, remote controlled outlets, roller shutter motors, temperature sensors, solenoid valves etc.&lt;br /&gt;
&lt;br /&gt;
But other things that at first glance wouldn&#039;t appear to be a physical device are devices: for example, the user interface of FHEM itself is a device (&#039;&#039;&amp;quot;FHEMWEB&amp;quot;&#039;&#039;), and there are devices without physical equipment that can be used to store a variable. &lt;br /&gt;
&lt;br /&gt;
We will now create a very simple device, called &#039;&#039;dummy&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A dummy device is a special object in that it does not necessarily require a corresponding physical device (physical lamp, roller shutter, solenoid valve). In this way, you can carry out these steps without any hardware, and you can go through this general introduction without having to deal with the differences between the various hardware systems. A dummy device typically looks exactly the same in the FHEM interface as a FHEM device corresponding to a physical device in your hardware environment.  &lt;br /&gt;
&lt;br /&gt;
First, we&#039;ll create a switch. This simulates a light switch in the wall. To do this, enter the following command in the command field:&lt;br /&gt;
 define mySwitch1 dummy&lt;br /&gt;
&lt;br /&gt;
&amp;quot;define&amp;quot; is the needed FHEM command, &amp;quot;mySwitch1&amp;quot; the future name of our device, &amp;quot;dummy&amp;quot; describes its type. The words &amp;quot;define&amp;quot; and &amp;quot;dummy&amp;quot; are part of FHEM&#039;s command syntax and cannot be modified, &amp;quot;mySwitch1&amp;quot; is (more or less) arbitrary. After pressing {{Taste|Enter}} the detailed view of our new FHEM device &#039;&#039;mySwitch1&#039;&#039; is displayed.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png|border]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Each device has exactly one &amp;quot;type&amp;quot;. This type also defines the Perl command file (more precisely referred to as the &amp;quot;module&amp;quot;) in which certain routines and properties are coded. Since our device is of type &#039;&#039;dummy&#039;&#039;, FHEM knows that the routines and properties are located in module 98_dummy. pm. (The number 98 used to have a meaning, but today this is no longer the case, though it is still used for historical reasons.)}}&lt;br /&gt;
&lt;br /&gt;
Devices have a &amp;quot;state&amp;quot; that changes over time and that FHEM records. For example, a window is opened, a roller shutter curtain is closed and a radio socket is alive. A state does not have to contain exactly one variable (window either &amp;quot;open&amp;quot; or &amp;quot;closed&amp;quot;), a state can also be described by several variables (the state of a raspberry system, device-type sysmon, includes for example the CPU frequency, the CPU temperature, the workload and much more). &lt;br /&gt;
&lt;br /&gt;
The device status in FHEM consists of three blocks of values, called &#039;&#039;Internals&#039;&#039;, &#039;&#039;Attributes&#039;&#039; and &#039;&#039;Readings&#039;&#039;. It would be too early to go into the meaning of the three terms in detail, but the following remarks are important for the following steps:&lt;br /&gt;
* &#039;&#039;Internals&#039;&#039; store very basic information about a device. They are rarely edited directly by the user (usually only during device setup).&lt;br /&gt;
* &#039;&#039;Attributes&#039;&#039; control device behavior. Typically they can be changed (or even defined) by users.&lt;br /&gt;
* &#039;&#039;Readings&#039;&#039; have, in contrast to the values of the other two blocks, a timestamp. Usually they are measured values of your device.&lt;br /&gt;
&lt;br /&gt;
It may be confusing for beginners that there could be Internals and Readings with the same names (e.g. STATE and state). However, Perl is case sensitive!&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; always shows basic characteristics of a FHEM device:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME:&#039;&#039;&#039;&#039;&#039; device name assigned by the user&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE:&#039;&#039;&#039;&#039;&#039; device type of FHEM device, here: &#039;&#039;dummy&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE:&#039;&#039;&#039;&#039;&#039; device state shown in all summaries. Since there was no assignment till now it is initially &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
== Creating rooms ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s do a step forward and arrange our devices in rooms. You may consider it reasonable to put together devices physically (really) located in one room into a FHEM room. So you can find in &amp;quot;&#039;&#039;bedroom&#039;&#039;&amp;quot; appropriate devices like &amp;quot;&#039;&#039;shutter&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;time switch&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;radio set&#039;&#039;&amp;quot;. You may decide other assignments: put all measuring devices like thermometers, electric meters and hygrometers in one (possibly only virtually and not physically existing) room &amp;quot;&#039;&#039;measuring devices&#039;&#039;&amp;quot;. Name of a room is arbitrary.&lt;br /&gt;
&lt;br /&gt;
To achieve this you have to add to all devices which your room should contain an &amp;quot;Attribute&amp;quot; (see above). Name of the attribute is &amp;quot;room&amp;quot; and it should get as its value the room name. Let&#039;s try it with our room &#039;&#039;dummy&#039;&#039;. Use command&lt;br /&gt;
 attr mySwitch1 room Training&lt;br /&gt;
and finish input with {{Taste|Enter}}).&lt;br /&gt;
&lt;br /&gt;
With this command you have added to device &#039;&#039;mySwitch1&#039;&#039; Attribute &#039;&#039;room&#039;&#039; with value &#039;&#039;Training&#039;&#039;. Again, &#039;&#039;attr&#039;&#039;, &#039;&#039;mySwitch1&#039;&#039; (while referencing to an existing object&#039;s name) and &#039;&#039;room&#039;&#039; are part of FHEM&#039;s command syntax and are unalterable, &#039;&#039;Training&#039;&#039; is arbitrary.&lt;br /&gt;
&lt;br /&gt;
Now &#039;&#039;mySwitch1&#039;&#039; belongs to room &#039;&#039;Training&#039;&#039;. Due to this assignment room appears in navigation bar on the left hand side in room&#039;s block. Try to click at room &#039;&#039;Training&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
FHEM will show all devices belonging to this room. Until now we have only one device: &#039;&#039;mySwitch1&#039;&#039; - our dummy.&lt;br /&gt;
&lt;br /&gt;
Beside device name always device status is on display, we still get &#039;&#039;???&#039;&#039;. Clicking at name &#039;&#039;mySwitch1&#039;&#039; you will return to its detailed view.&lt;br /&gt;
&lt;br /&gt;
Our dummy is shown in a block with (type) label &#039;&#039;dummy&#039;&#039;. You may change label as well introducing a further attribute &amp;quot;&#039;&#039;group&#039;&#039;&amp;quot; and assigning to it (arbitrary as well) name: groups order devices inside a room.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;:&amp;lt;br /&amp;gt;If you want to delete a room, you may do so by removing all devices from this room. In our example of room &#039;&#039;Training&#039;&#039; you have to delete attribute room in all devices of room &#039;&#039;Training&#039;&#039;. Room &#039;&#039;Training&#039;&#039; will disappear by itself.&lt;br /&gt;
&lt;br /&gt;
== Creating switching commands ==&lt;br /&gt;
Now we want to add on/off buttons to &amp;quot;mySwitch1&amp;quot;: &lt;br /&gt;
 attr mySwitch1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Again we use an attribute named webCmd with values on:off, we want to add to device &amp;quot;mySwitch1&amp;quot;. Instead of entering mentioned above command into command line field you may choose desired attribute (in this case: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) in lower part of detail view and enter needed values into text field right next, in this case &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Complete your input with a click on button {{Taste|attr}}.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s click again on room &#039;&#039;Training&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
You may see, that due to attribute added in last step in room view switch buttons for &#039;&#039;on&#039;&#039; and &#039;&#039;off&#039;&#039; have appeared.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
Experimentally click on &#039;&#039;on&#039;&#039; and &#039;&#039;off&#039;&#039;: instead of &#039;&#039;???&#039;&#039; you got so far you may find a bulb symbol showing current state.&lt;br /&gt;
&lt;br /&gt;
Clicking on device name &#039;&#039;mySwitch1&#039;&#039; you change back to detail view and may see in block &#039;&#039;Internals&#039;&#039; current state &#039;&#039;STATE&#039;&#039; - being shown in room view as an icon (bulb).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
In detail view you can see a new block &#039;&#039;Readings&#039;&#039; as well.&lt;br /&gt;
&lt;br /&gt;
Please switch off &#039;&#039;mySwitch1&#039;&#039; once again. Pay attention to readings: next to internal &#039;&#039;STATE&#039;&#039; you may find a reading of same name (see above: Perl distinguishes lower and upper case), but equipped with a timestamp. Check reading &#039;&#039;state&#039;&#039; for updating at value and timestamp.&lt;br /&gt;
&lt;br /&gt;
== Event monitor ==&lt;br /&gt;
&lt;br /&gt;
Please, open in your browser another window with FHEM and in FHEM its &#039;&#039;&#039;[[Event monitor]]&#039;&#039;&#039;. The shortest way is to right-click on &#039;&#039;Event monitor&#039;&#039; and to select from the local menu &amp;quot;Open in new window&amp;quot;. Place windows in such a way, that you can follow event monitor and operate your &amp;quot;mySwitch1&amp;quot; at once. Using Windows 7 or newer simply activate one window and press {{Taste|Windows}}+{{Taste|Pfeil rechts}}, followed by activating second window and pressing {{Taste|Windows}}+{{Taste|Pfeil links}}.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Devices communicate via events. One device sends an event to FHEM and FHEM distributes this event to all devices. Devices decide whether to react or not and if yes - how. Let&#039;s have a closer look at this.&lt;br /&gt;
&lt;br /&gt;
Switching &#039;&#039;mySwitch1&#039;&#039; FHEM generates an event. With every actuation of the switch yet another event appears in &#039;&#039;Event monitor&#039;&#039;. Please look what happens when you consecutively click twice on &#039;&#039;on&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Events always consist of a timestamp followed by the type of the triggering device (in this case: &#039;&#039;dummy&#039;&#039;), name of the triggering device (in this case: &#039;&#039;mySwitch1&#039;&#039;) as well as triggered command (in this case: &#039;&#039;on&#039;&#039; or &#039;&#039;off&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
FHEM devices like remotes or remote-controlled wall switches, which trigger physical events, generate events in FHEM with every keypress in device itself or click on associated FHEM device. &lt;br /&gt;
&lt;br /&gt;
Understanding events, their structure and operation is crucial - we will frequently need them below.&lt;br /&gt;
&lt;br /&gt;
== Operating devices - set ==&lt;br /&gt;
&lt;br /&gt;
So you have learned to switch &#039;&#039;mySwitch1&#039;&#039; clicking at &#039;&#039;on&#039;&#039; or &#039;&#039;off&#039;&#039;. Alternatively you can use command line entering instructions there.&lt;br /&gt;
&lt;br /&gt;
So please, enter in command line field &amp;lt;code&amp;gt;set mySwitch1 on&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;set mySwitch1 off&amp;lt;/code&amp;gt; and confirm this with button {{Taste|Enter}}. Switching status will change accordingly as well and an Event will be triggered. By the way, we will frequently use command &#039;&#039;set&#039;&#039; in future.&lt;br /&gt;
&lt;br /&gt;
Preparing further tests we now create a new device &#039;&#039;&#039;&#039;&#039;myLamp1&#039;&#039;&#039;&#039;&#039; that we later on want to control with &#039;&#039;&#039;&#039;&#039;mySwitch1&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
 define myLamp1 dummy&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;myLamp1&#039;&#039; is a lamp - an actor - it won&#039;t get buttons for &#039;&#039;on&#039;&#039; or &#039;&#039;off&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Lamp should be located in room &#039;&#039;Training&#039;&#039;. You might set this assignment via command line, like shown above. But this time we will use computer mouse...&lt;br /&gt;
&lt;br /&gt;
Until now &#039;&#039;myLamp1&#039;&#039; has no room assignment, so it appears in room &#039;&#039;Unsorted&#039;&#039;. Switch over to this room and click at name &#039;&#039;myLamp1&#039;&#039; getting to detail view.&lt;br /&gt;
&lt;br /&gt;
In the lower part we can set attribute assignments.&lt;br /&gt;
&lt;br /&gt;
Attribute &#039;&#039;room&#039;&#039; is already selected (as default). When you click at text field next to &#039;&#039;room&#039;&#039;, a dialog box opens that contains all rooms FHEM knows so far. You may select one ore more checkboxes and assign this or these rooms to device. Now select only room &#039;&#039;Training&#039;&#039; and confirm selection with button {{Taste|OK}}. Selected room will be transferred into text field and it remains only to click at button {{Taste|attr}} to activate assignment. &lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Now change back to room &#039;&#039;Training&#039;&#039; and you will see both devices:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
== Event trigger - notify ==&lt;br /&gt;
Now we will enable FHEM to react to an event of &#039;&#039;mySwitch1&#039;&#039;: Every time &#039;&#039;mySwitch1&#039;&#039; is triggering event with command &#039;&#039;on&#039;&#039; we want to switch on &#039;&#039;myLamp1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For it FHEM uses a &amp;quot;notify&amp;quot;. Defining syntax looks like&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;
* Name &#039;&#039;&#039;&amp;lt;NAME&amp;gt;&#039;&#039;&#039; will help us to find this FHEM device and display its properties. This time we name the device &#039;&#039;n_mySwitch1_on&#039;&#039; - &#039;&#039;n_&#039;&#039; for marking it a notify, followed by the name of triggering device and triggering command. Such a name may seem too complicated but it is very useful when working with a whole bunch of notifies. You may name it if desired &#039;&#039;n1&#039;&#039; or &#039;&#039;John Doe&#039;&#039;. Device names may consist of characters &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, &#039;&#039;&#039;_ (underscore)&#039;&#039;&#039; and &#039;&#039;&#039;. (period)&#039;&#039;&#039; with a period not at first position. In perl and therefore in FHEM period has a special meaning, so avoid if possible periods in device names.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;REGEXP&amp;gt;&#039;&#039;&#039; stands for &amp;quot;regular expression&amp;quot; and describes a condition for raising notify. We will meet regular expressions in perl and FHEM frequently. They are used to describe syntactical characteristics of strings, e. g. whether a string contains a given word or not, whether digits are in our string and much more. Whenever in FHEM an event raises for every notify runs a check for regexp matching. In our case &#039;&#039;mySwitch1&#039;&#039; raises an event with command &#039;&#039;on&#039;&#039;. To &amp;quot;catch&amp;quot; this event and react to it we have notation  &amp;lt;code&amp;gt;mySwitch1:on&amp;lt;/code&amp;gt;. In future you will have many more moments to deal with regexps in detail. :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; tells what to do. In our case: &amp;lt;code&amp;gt;set myLamp1 on&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So our notify looks like &lt;br /&gt;
 define n_mySwitch1_on notify mySwitch1:on set myLamp1 on&lt;br /&gt;
&lt;br /&gt;
After you have entered this in command field followed by {{Taste|Enter}}, you will see again detail view of the new FHEM notify device (see TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
In block &#039;&#039;Internals&#039;&#039; you can find definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Here you see all text you have entered in event definition after the word &amp;quot;notify&amp;quot; (device type). So you can see &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; and &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
{{Hinweis|In Block &#039;&#039;&#039;&#039;&#039;Probably associated with&#039;&#039;&#039;&#039;&#039; you can find all FHEM devices associated with this notify. Devices are listed as clickable device names, so you can jump over with only one click to detail view of the respective device.}}&lt;br /&gt;
&lt;br /&gt;
Please assign notify to room &#039;&#039;Training&#039;&#039; (find in the lower part attribute &#039;&#039;room&#039;&#039; and choose correct room followed by a click at &#039;&#039;attr&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
So clicking in FHEM&#039;s main menu at &#039;&#039;Training&#039;&#039; you will get our three FHEM devices.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Usally a notify wouldn&#039;t be assigned to a room since it shouldn&#039;t be visible to user later on. We will do it anyway for our training purposes.}}&lt;br /&gt;
&lt;br /&gt;
Now switch &#039;&#039;mySwitch1&#039;&#039; to &#039;&#039;on&#039;&#039; - &#039;&#039;myLamp1&#039;&#039; will be switched too. It seems that it works only at first time, but checking event monitor or looking in &#039;&#039;myLamp1&#039;&#039;&#039;s detail view at timestamp of last state change you can notice that it executes every time.&lt;br /&gt;
&lt;br /&gt;
To get it working for switching off too we define a second notify:&lt;br /&gt;
 define n_mySwitch1_off notify mySwitch1:off set myLamp1 off&lt;br /&gt;
&lt;br /&gt;
Does it work as expected?&lt;br /&gt;
&lt;br /&gt;
Doubtless you dislike defining an own notify for every command a device should raise. You can get it easier.&lt;br /&gt;
&lt;br /&gt;
Instead of &lt;br /&gt;
 define n_mySwitch1_on  notify mySwitch1:on  set myLamp1 on&lt;br /&gt;
 define n_mySwitch1_off notify mySwitch1:off set myLamp1 off&lt;br /&gt;
we define&lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1 &#039;&#039;&#039;$EVENT&#039;&#039;&#039;&lt;br /&gt;
We see that this time regexp doesn&#039;t differ events &#039;&#039;on&#039;&#039; and &#039;&#039;off&#039;&#039; of &#039;&#039;mySwitch1&#039;&#039;. With an absent regexp declaration notify raises for any event with whatsoever command. In executing set command we use FHEM variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (follow the capital notation!). This is a placeholder for the command taken over from the raising event. Having from &#039;&#039;mySwitch1&#039;&#039; an &#039;&#039;on&#039;&#039;, &#039;&#039;&#039;$EVENT&#039;&#039;&#039; will stand for value &#039;&#039;on&#039;&#039; too, accordingly for &#039;&#039;off&#039;&#039; and any other command.&lt;br /&gt;
&lt;br /&gt;
== Deleting or disabling devices – delete, disable ==&lt;br /&gt;
Looking at Event Monitor you see that after activation of &#039;&#039;mySwitch1&#039;&#039; command for &#039;&#039;myLamp1&#039;&#039; is executed twice. The reason is, that any event of &#039;&#039;mySwitch1&#039;&#039; is caught by two notifies - by the &amp;quot;old&amp;quot; notify as well as by the new one. To avoid this we should get rid of the old one. For that purpose we have two choices.&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Delete&#039;&#039;&#039; a notify with command &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, e. g. with &amp;lt;code&amp;gt;delete n_mySwitch1_on&amp;lt;/code&amp;gt;. By the way, command &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; works with any object in FHEM. So you can delete this way &amp;quot;real&amp;quot; devices too.&lt;br /&gt;
#&#039;&#039;&#039;Deactivate&#039;&#039;&#039; a notify, using attribute &#039;&#039;disable&#039;&#039;. You can assign it in detail view of the related notify. (Choose the attribute &#039;&#039;disable&#039;&#039; in drop-down menu next to {{Taste|attr}} in lower part and choose value &#039;&#039;1&#039;&#039; with a following click at {{Taste|attr}}.) Or enter in command line: &amp;lt;code&amp;gt;attr n_mySwitch1_off disable 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Save Config ==&lt;br /&gt;
Whenever you are satisfied with the current state of your FHEM configuration, click on &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; in the top left corner of the FHEM menu or enter the command &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; in the command field followed by {{Taste|Enter}}. Your configuration is now saved. If you do not do this, all changes will be lost after the next FHEM restart. FHEM therefore reminds you of unsaved changes with a red question mark next to &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Modifying existing devices – modify ==&lt;br /&gt;
&lt;br /&gt;
We now create a second lamp, which should also be switched by our &#039;&#039;mySwitch1&#039;&#039; and our Notify. The new lamp is created by entering the following in the command field: &lt;br /&gt;
 define myLamp2 dummy&lt;br /&gt;
&lt;br /&gt;
With several clicks in the detail screen of &#039;&#039;myLamp2&#039;&#039; you can also assign them to the room Training and assign buttons for &#039;&#039;on&#039;&#039; and &#039;&#039;off&#039;&#039; via the &#039;&#039;webCmd&#039;&#039; attribute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we adjust the Notify &#039;&#039;n_mySwitch1&#039;&#039;. To do this, navigate to the Notify detail screen: Switch to the &#039;&#039;Training&#039;&#039; room and click on the name of &#039;&#039;n_mySwitch1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In the detail screen there is the line &#039;&#039;DEF&#039;&#039;, which we have already looked at before. If you click on the word &#039;&#039;DEF&#039;&#039;, you can edit the definition of an FHEM object.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|The &#039;&#039;DEF&#039;&#039; field displays only the part of the definition that followed the object type, i. e. notify, as you created this notification. Here you will find the regex to which the Notify reacts, then the command to be executed after an empty space. For the sake of readability, the entire define statement is always shown below, even if it is not completely visible in the &#039;&#039;DEF&#039;&#039; field.}}&lt;br /&gt;
&lt;br /&gt;
We change here from &lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1 $EVENT&lt;br /&gt;
to&lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1,myLamp2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To finish editing click on the &#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039; button, i. e. {{Taste|modify n_mySwitch1}}. If you check the details in the detail screen, you will see that the &#039;&#039;DEF&#039;&#039;inition of the notify has been adjusted.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14B.png]]&lt;br /&gt;
&lt;br /&gt;
Note again that in the detail screen below under &#039;&#039;Probably associated with&#039;&#039; the switched lamps will appear in the lower section of the detail screen - this will often be useful.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|By the way, you can use the link &#039;&#039;&#039;&#039;Device specific help&#039;&#039;&#039;&#039; to view the complete help text for your device type from commandref, i. e. the help text for &#039;&#039;notify&#039;&#039;. This link is often helpful, especially at the beginning.}}&lt;br /&gt;
&lt;br /&gt;
Now you can test whether a click on &#039;&#039;mySwitch1&#039;&#039; really switches both lamps. Take a look at the events in a separate window with the Event Monitor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
== Switching a couple of devices at once ==&lt;br /&gt;
&lt;br /&gt;
For switching several devices can therefore be used&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
An alternative spelling for it is&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Also a combination is possible:&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;
Even within a notify (or other FHEM commands) you can list several commands, but here is one thing to note:&lt;br /&gt;
 define n1 notify mySwitch1:on set myLamp1 on;set myLamp2 off&lt;br /&gt;
The commands are separated by a semicolon. Effect is: The notify switches myLamp1 whenever mySwitch1 sends the event on. The next command in this line is &#039;&#039;set myLamp2 off&#039;&#039;. This is processed &#039;&#039;&#039;immediately&#039;&#039;&#039; when the above-mentioned command line is entered. It switches myLamp2 immediately, myLamp1 only after the mySwitch1 event.&lt;br /&gt;
&lt;br /&gt;
If the second command &#039;&#039;set myLamp2 off&#039;&#039; should also be executed after the event, a double semicolon must be used:&lt;br /&gt;
 define n1 notify mySwitch1:on set myLamp1 on;;set myLamp2 off&lt;br /&gt;
&lt;br /&gt;
The combined variant could look like this:&lt;br /&gt;
 define n1 notify mySwitch1:on set myLamp1 on;;set myLamp2 off;set myLampe3 on&lt;br /&gt;
This command line would switch myLamp3 immediately, but only after the mySwitch1 event myLamp1 and myLamp2 switch.&lt;br /&gt;
&lt;br /&gt;
== Renaming devices ==&lt;br /&gt;
&lt;br /&gt;
Finally we want to rename (for the exercise) another device: &#039;&#039;&#039;&#039;&#039;myLamp2&#039;&#039;&#039;&#039;&#039; should be &#039;&#039;&#039;&#039;&#039;myStandardLamp&#039;&#039;&#039;&#039;&#039;.  For this we use&lt;br /&gt;
 rename &amp;lt;oldName&amp;gt; &amp;lt;newName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should be noted that related notify statements are &#039;&#039;&#039;not&#039;&#039;&#039; updated automatically. So, before renaming, note the &#039;&#039;Probably associated with&#039;&#039; list at the bottom of the detail screen so that you do not forget any of your Notify during the following adjustment.&lt;br /&gt;
&lt;br /&gt;
So enter in the command box&lt;br /&gt;
 rename myLamp2 myStandardLamp&lt;br /&gt;
and then adjust &#039;&#039;n_mySwitch1&#039;&#039; by customizing the definition on its detail screen in the &#039;DEF&#039; section.&lt;br /&gt;
&lt;br /&gt;
After the change, the Notify must be&lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1,myStandardLamp $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
== Scheduler - at ==&lt;br /&gt;
The next step is to set up a time control.&lt;br /&gt;
First of all, we want to ensure that &#039;&#039;myLamp1&#039;&#039; is switched off after one minute, such as a staircase light.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|To see the effect, first switch &#039;&#039;myLamp1&#039;&#039; to &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
The FHEM device type &#039;&#039;at&#039;&#039; is available for time control. The command structure is&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; and &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; have the same function here as with notify. New here is only &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), so the time specification. This is done in the notation &#039;&#039;HH:MM:SS&#039;&#039; or &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To turn off &#039;&#039;&#039;&#039;&#039;myLamp1&#039;&#039;&#039;&#039;&#039; so &#039;&#039;&#039;in one minute&#039;&#039;&#039;, create the following &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLamp1 at +00:01:00 set myLamp1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
Try it.&lt;br /&gt;
Will &#039;&#039;myLamp1&#039;&#039; be turned off after one minute?&lt;br /&gt;
Is an event generated during this process?&lt;br /&gt;
&lt;br /&gt;
If you want to see the detail view of the &#039;&#039;at&#039;&#039;, you have to hurry up: After a single execution, the &#039;&#039;at&#039;&#039; is automatically deleted. If FHEM was faster, you can create it again and specify a longer period of time if necessary. :-)&lt;br /&gt;
&lt;br /&gt;
With &amp;lt;timespec&amp;gt; you can omit the seconds and just write HH:MM. There are also several variants:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Variants of time specifications for &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!notation&lt;br /&gt;
!explanation&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In two minutes; single execution&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|At two minutes past midnight, i.e. at 00:02 and 0 seconds; one-time execution&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Daily at 00:02&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Every 2 minutes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Three times, every two minutes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Three times at 00:02&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Daily at sunset&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|2 minutes (120 seconds) daily after sunrise&lt;br /&gt;
|}&lt;br /&gt;
*By specifying &#039;&#039;&#039;*&#039;&#039;&#039; a permanent repetition is defined. The repetitions continue until the &#039;&#039;at&#039;&#039; is deleted or disabled.&lt;br /&gt;
*By specifying &#039;&#039;&#039;+&#039;&#039;&#039; the specified time is no longer interpreted as an absolute time, but as a timer, after how many hours:minutes:seconds the command is executed.&lt;br /&gt;
*By specifying &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; the &#039;&#039;at&#039;&#039; will only be run n times.&lt;br /&gt;
*The functions &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; and &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; return the appropriate time. This is repeated daily by specifying &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039;. The curly braces indicate that FHEM directly executes the contents of these braces as perl functions. &lt;br /&gt;
&lt;br /&gt;
For example, to switch off the garden lighting every day at sunrise, define something like&lt;br /&gt;
 define a_gardenLight_morning_off at *{sunrise()} set gardenLight off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
In the detail screen of an &#039;&#039;at&#039;&#039; the time of the next execution is displayed in the &#039;&#039;STATE&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
This info also appears in the room view if you show the &#039;&#039;at&#039;&#039; there:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18B.png]]&lt;br /&gt;
&lt;br /&gt;
== Event-driven timer start - notify and at ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Time and Event Control with DOIF&#039;&#039;&#039;&lt;br /&gt;
Since the release of the original article in early 2014, another way of time and event control has been introduced. See: {{Link2CmdRef|Anker=DOIF}} for DOIF}}&lt;br /&gt;
As a last exercise we want to combine a  &#039;&#039;notify&#039;&#039; and an &#039;&#039;at&#039;&#039;. The timer should now not start when you enter the command in the command field, but when an event occurs.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GotoRAW-Import firststeps.PNG|thumb|left|300px]]For this purpose, we create a Stairwell: create the Dummy-Devices &#039;&#039;sw_Switch&#039;&#039; and &#039;&#039;sw_Light&#039;&#039; in the &#039;&#039;room Stairwell&#039;&#039;. In order to enter the following commands on one piece, click the framed &amp;quot;+&amp;quot; icon next to the command line (only available in the default Style f18), add the following lines with copy&amp;amp;paste to the dialog box that appears and press {{Taste|Execute}}:&lt;br /&gt;
 define sw_Switch dummy&lt;br /&gt;
 attr   sw_Switch room Stairwell&lt;br /&gt;
 attr   sw_Switch webCmd on&lt;br /&gt;
 define sw_Light dummy&lt;br /&gt;
 attr   sw_Light room Stairwell&lt;br /&gt;
[[Datei:RAW-Import firststeps.PNG]]&lt;br /&gt;
&lt;br /&gt;
Then you can close the dialog or enter the following commands. Note that with &#039;&#039;Execute&#039;&#039; all statements from the dialog box are executed, which may lead to error messages e.g. if a device has already been defined before. Lines with commands that have already been adopted into the configuration can therefore confidently delete to avoid such effects. &lt;br /&gt;
&lt;br /&gt;
Now the Notify is missing, which reacts to &#039;&#039;sw_Switch:on&#039;&#039; and executes two commands: &lt;br /&gt;
*Switching on the staircase light with &amp;lt;code&amp;gt;set sw_Light on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Start a timer that switches it off after one minute. So &amp;lt;code&amp;gt;define a1 at +00:01 set sw_Light off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This will look like this (and must be entered in the command field as a single line):&lt;br /&gt;
 define n_sw_Switch_on notify sw_Switch:on &lt;br /&gt;
        set sw_Light on;;define a1 at +00:01 set sw_Light off&lt;br /&gt;
When the Notify is triggered, the staircase lighting is switched on as a command, as well as the definition of a timer that switches it off a minute later.&lt;br /&gt;
Is it working?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since this is quite bulky, there is a slightly simpler alternative:&lt;br /&gt;
 define n_sw_Switch_on notify sw_Switch:on set sw_Light on;;sleep 60;;set sw_Light off&lt;br /&gt;
&lt;br /&gt;
Some hardware systems also offer the command &#039;&#039;on-for-timer&#039;&#039;, which can be used to write alternatively&lt;br /&gt;
 define n_sw_Switch_on notify sw_Switch:on set sw_Light on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==What&#039;s next?==&lt;br /&gt;
You have now been introduced to:&lt;br /&gt;
*Creating FHEM devices with &#039;&#039;&#039;define&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Events&#039;&#039;&#039; and the Event Monitor&lt;br /&gt;
*Switching Devices with &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
*Modifying Devices with &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; and &#039;&#039;&#039;delete&#039;&#039;&#039; &lt;br /&gt;
*Setting and editing &#039;&#039;&#039;Attributs&#039;&#039;&#039;&lt;br /&gt;
*Event driven actions by &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
*Time-controlled switching with &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So you know the most basic mechanisms of FHEM. Details of these commands can be found in the FHEM command reference {{Link2CmdRef}}&lt;br /&gt;
&lt;br /&gt;
In the commandref you will find the description of all FHEM commands as well as the list of all device types that can be integrated in FHEM.&lt;br /&gt;
&lt;br /&gt;
You will find that &amp;quot;real&amp;quot; FHEM devices look exactly like the dummy devices you have already seen here. The main difference is that you no longer have to define the available commands yourself using &#039;&#039;attr webCmd&#039;&#039;, since they are already predefined by the FHEM device. And events are triggered not only when you click on the FHEM web frontend, but also when the physical device (i. e. the motion sensor or the light switch on the wall) is triggered.&lt;br /&gt;
&lt;br /&gt;
Once you have paired your first devices with FHEM, look at the event monitor to see when which events will be triggered.&lt;br /&gt;
&lt;br /&gt;
A more comprehensive introduction to FHEM can be found in the document [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-FHEM] (German)&lt;br /&gt;
&lt;br /&gt;
The basics of the programming language Perl, which are important for FHEM, can be read in the first chapters of a Perl book or in various free online tutorials.&lt;br /&gt;
&lt;br /&gt;
Have fun and success with FHEM!&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
This is the english version of [[Erste Schritte in FHEM]]&lt;br /&gt;
* Last edit German article: {{REVISIONDAY2: Erste Schritte in FHEM}}.{{REVISIONMONTH: Erste Schritte in FHEM}}.{{REVISIONYEAR: Erste Schritte in FHEM}}&lt;br /&gt;
*Last edit English article: {{REVISIONDAY2: First steps in FHEM}}.{{REVISIONMONTH: First steps in FHEM}}.{{REVISIONYEAR: First steps in FHEM}}&lt;br /&gt;
*&#039;&#039;&#039;Newer&#039;&#039;&#039; Version is: &#039;&#039;&#039;{{#ifexpr: {{REVISIONTIMESTAMP: Erste Schritte in FHEM}} &amp;gt; {{REVISIONTIMESTAMP: First steps in FHEM}}| dt. Version|engl. Version}}&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afo-solar</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=First_steps_in_FHEM&amp;diff=39777</id>
		<title>First steps in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=First_steps_in_FHEM&amp;diff=39777"/>
		<updated>2024-12-31T19:56:58Z</updated>

		<summary type="html">&lt;p&gt;Afo-solar: I changed the English text according to the German version. The German version makes use of the framed &amp;quot;+&amp;quot; button, which is very useful, if you want to enter multiple commands in one run. When using the &amp;quot;first steps&amp;quot; text myself I started with the German version and switched to the English one in the end. This had the consequence that I missed section about the usage of the &amp;quot;+&amp;quot; button. Hence, in the ongoing work I wondered how one can upload batch files and used only single command lines.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This a beginners course for those starting to work with FHEM. After you have installed FHEM on your server you may reproduce all steps without any additional smart home hardware.&lt;br /&gt;
&lt;br /&gt;
This guide was originally published by Ulrich Maass, who gave his permission to publish it in the FHEM wiki.&lt;br /&gt;
&lt;br /&gt;
Note to editors: Everybody is welcome to improve typo, grammar and style. Content changes and extentions should be discussed with the author (e. g. on associated [[Diskussion:First_steps_in_FHEM|discussion page]]).&lt;br /&gt;
&lt;br /&gt;
== First attempt ==&lt;br /&gt;
To start FHEM for the first time, enter in your browser&#039;s address field:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-address&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
e. g. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The FHEM homepage is displayed:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png|border]]&lt;br /&gt;
&lt;br /&gt;
* At the top of the screen you can see the white &#039;&#039;command line&#039;&#039; where you can enter commands.&lt;br /&gt;
* The first menu item is the &#039;&#039;Save config&#039;&#039; button, which saves changes so that they are still available even after a restart.&lt;br /&gt;
* Furthermore, there are already the rooms &#039;&#039;Unsorted&#039;&#039; and &#039;&#039;Everything&#039;&#039; that we will soon get to know&lt;br /&gt;
* In the lower block there are further links, which we will also discuss later.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Security Check&#039;&#039; note indicates that you have not yet set a password for FHEM. To set up password protection, see the FHEM command reference {{Link2CmdRef|Anker=allowed}}, which contains a description of all FHEM functions and modules. To suppress this message for now, enter the following in the command line: &lt;br /&gt;
 attr global motd none&lt;br /&gt;
and confirm this change with {{Taste|Enter}} or click on the link of the same name.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png|border]]&lt;br /&gt;
&lt;br /&gt;
== Creating device - define  ==&lt;br /&gt;
The basic element of FHEM is called &#039;&#039;device&#039;&#039;.Typical devices are, for example, remote controlled outlets, roller shutter motors, temperature sensors, solenoid valves etc.&lt;br /&gt;
&lt;br /&gt;
But other things that at first glance wouldn&#039;t appear to be a physical device are devices: for example, the user interface of FHEM itself is a device (&#039;&#039;&amp;quot;FHEMWEB&amp;quot;&#039;&#039;), and there are devices without physical equipment that can be used to store a variable. &lt;br /&gt;
&lt;br /&gt;
We will now create a very simple device, called &#039;&#039;dummy&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A dummy device is a special object in that it does not necessarily require a corresponding physical device (physical lamp, roller shutter, solenoid valve). In this way, you can carry out these steps without any hardware, and you can go through this general introduction without having to deal with the differences between the various hardware systems. A dummy device typically looks exactly the same in the FHEM interface as a FHEM device corresponding to a physical device in your hardware environment.  &lt;br /&gt;
&lt;br /&gt;
First, we&#039;ll create a switch. This simulates a light switch in the wall. To do this, enter the following command in the command field:&lt;br /&gt;
 define mySwitch1 dummy&lt;br /&gt;
&lt;br /&gt;
&amp;quot;define&amp;quot; is the needed FHEM command, &amp;quot;mySwitch1&amp;quot; the future name of our device, &amp;quot;dummy&amp;quot; describes its type. The words &amp;quot;define&amp;quot; and &amp;quot;dummy&amp;quot; are part of FHEM&#039;s command syntax and cannot be modified, &amp;quot;mySwitch1&amp;quot; is (more or less) arbitrary. After pressing {{Taste|Enter}} the detailed view of our new FHEM device &#039;&#039;mySwitch1&#039;&#039; is displayed.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png|border]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Each device has exactly one &amp;quot;type&amp;quot;. This type also defines the Perl command file (more precisely referred to as the &amp;quot;module&amp;quot;) in which certain routines and properties are coded. Since our device is of type &#039;&#039;dummy&#039;&#039;, FHEM knows that the routines and properties are located in module 98_dummy. pm. (The number 98 used to have a meaning, but today this is no longer the case, though it is still used for historical reasons.)}}&lt;br /&gt;
&lt;br /&gt;
Devices have a &amp;quot;state&amp;quot; that changes over time and that FHEM records. For example, a window is opened, a roller shutter curtain is closed and a radio socket is alive. A state does not have to contain exactly one variable (window either &amp;quot;open&amp;quot; or &amp;quot;closed&amp;quot;), a state can also be described by several variables (the state of a raspberry system, device-type sysmon, includes for example the CPU frequency, the CPU temperature, the workload and much more). &lt;br /&gt;
&lt;br /&gt;
The device status in FHEM consists of three blocks of values, called &#039;&#039;Internals&#039;&#039;, &#039;&#039;Attributes&#039;&#039; and &#039;&#039;Readings&#039;&#039;. It would be too early to go into the meaning of the three terms in detail, but the following remarks are important for the following steps:&lt;br /&gt;
* &#039;&#039;Internals&#039;&#039; store very basic information about a device. They are rarely edited directly by the user (usually only during device setup).&lt;br /&gt;
* &#039;&#039;Attributes&#039;&#039; control device behavior. Typically they can be changed (or even defined) by users.&lt;br /&gt;
* &#039;&#039;Readings&#039;&#039; have, in contrast to the values of the other two blocks, a timestamp. Usually they are measured values of your device.&lt;br /&gt;
&lt;br /&gt;
It may be confusing for beginners that there could be Internals and Readings with the same names (e.g. STATE and state). However, Perl is case sensitive!&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; always shows basic characteristics of a FHEM device:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME:&#039;&#039;&#039;&#039;&#039; device name assigned by the user&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE:&#039;&#039;&#039;&#039;&#039; device type of FHEM device, here: &#039;&#039;dummy&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE:&#039;&#039;&#039;&#039;&#039; device state shown in all summaries. Since there was no assignment till now it is initially &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
== Creating rooms ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s do a step forward and arrange our devices in rooms. You may consider it reasonable to put together devices physically (really) located in one room into a FHEM room. So you can find in &amp;quot;&#039;&#039;bedroom&#039;&#039;&amp;quot; appropriate devices like &amp;quot;&#039;&#039;shutter&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;time switch&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;radio set&#039;&#039;&amp;quot;. You may decide other assignments: put all measuring devices like thermometers, electric meters and hygrometers in one (possibly only virtually and not physically existing) room &amp;quot;&#039;&#039;measuring devices&#039;&#039;&amp;quot;. Name of a room is arbitrary.&lt;br /&gt;
&lt;br /&gt;
To achieve this you have to add to all devices which your room should contain an &amp;quot;Attribute&amp;quot; (see above). Name of the attribute is &amp;quot;room&amp;quot; and it should get as its value the room name. Let&#039;s try it with our room &#039;&#039;dummy&#039;&#039;. Use command&lt;br /&gt;
 attr mySwitch1 room Training&lt;br /&gt;
and finish input with {{Taste|Enter}}).&lt;br /&gt;
&lt;br /&gt;
With this command you have added to device &#039;&#039;mySwitch1&#039;&#039; Attribute &#039;&#039;room&#039;&#039; with value &#039;&#039;Training&#039;&#039;. Again, &#039;&#039;attr&#039;&#039;, &#039;&#039;mySwitch1&#039;&#039; (while referencing to an existing object&#039;s name) and &#039;&#039;room&#039;&#039; are part of FHEM&#039;s command syntax and are unalterable, &#039;&#039;Training&#039;&#039; is arbitrary.&lt;br /&gt;
&lt;br /&gt;
Now &#039;&#039;mySwitch1&#039;&#039; belongs to room &#039;&#039;Training&#039;&#039;. Due to this assignment room appears in navigation bar on the left hand side in room&#039;s block. Try to click at room &#039;&#039;Training&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
FHEM will show all devices belonging to this room. Until now we have only one device: &#039;&#039;mySwitch1&#039;&#039; - our dummy.&lt;br /&gt;
&lt;br /&gt;
Beside device name always device status is on display, we still get &#039;&#039;???&#039;&#039;. Clicking at name &#039;&#039;mySwitch1&#039;&#039; you will return to its detailed view.&lt;br /&gt;
&lt;br /&gt;
Our dummy is shown in a block with (type) label &#039;&#039;dummy&#039;&#039;. You may change label as well introducing a further attribute &amp;quot;&#039;&#039;group&#039;&#039;&amp;quot; and assigning to it (arbitrary as well) name: groups order devices inside a room.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;:&amp;lt;br /&amp;gt;If you want to delete a room, you may do so by removing all devices from this room. In our example of room &#039;&#039;Training&#039;&#039; you have to delete attribute room in all devices of room &#039;&#039;Training&#039;&#039;. Room &#039;&#039;Training&#039;&#039; will disappear by itself.&lt;br /&gt;
&lt;br /&gt;
== Creating switching commands ==&lt;br /&gt;
Now we want to add on/off buttons to &amp;quot;mySwitch1&amp;quot;: &lt;br /&gt;
 attr mySwitch1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Again we use an attribute named webCmd with values on:off, we want to add to device &amp;quot;mySwitch1&amp;quot;. Instead of entering mentioned above command into command line field you may choose desired attribute (in this case: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) in lower part of detail view and enter needed values into text field right next, in this case &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Complete your input with a click on button {{Taste|attr}}.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s click again on room &#039;&#039;Training&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
You may see, that due to attribute added in last step in room view switch buttons for &#039;&#039;on&#039;&#039; and &#039;&#039;off&#039;&#039; have appeared.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
Experimentally click on &#039;&#039;on&#039;&#039; and &#039;&#039;off&#039;&#039;: instead of &#039;&#039;???&#039;&#039; you got so far you may find a bulb symbol showing current state.&lt;br /&gt;
&lt;br /&gt;
Clicking on device name &#039;&#039;mySwitch1&#039;&#039; you change back to detail view and may see in block &#039;&#039;Internals&#039;&#039; current state &#039;&#039;STATE&#039;&#039; - being shown in room view as an icon (bulb).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
In detail view you can see a new block &#039;&#039;Readings&#039;&#039; as well.&lt;br /&gt;
&lt;br /&gt;
Please switch off &#039;&#039;mySwitch1&#039;&#039; once again. Pay attention to readings: next to internal &#039;&#039;STATE&#039;&#039; you may find a reading of same name (see above: Perl distinguishes lower and upper case), but equipped with a timestamp. Check reading &#039;&#039;state&#039;&#039; for updating at value and timestamp.&lt;br /&gt;
&lt;br /&gt;
== Event monitor ==&lt;br /&gt;
&lt;br /&gt;
Please, open in your browser another window with FHEM and in FHEM its &#039;&#039;&#039;[[Event monitor]]&#039;&#039;&#039;. The shortest way is to right-click on &#039;&#039;Event monitor&#039;&#039; and to select from the local menu &amp;quot;Open in new window&amp;quot;. Place windows in such a way, that you can follow event monitor and operate your &amp;quot;mySwitch1&amp;quot; at once. Using Windows 7 or newer simply activate one window and press {{Taste|Windows}}+{{Taste|Pfeil rechts}}, followed by activating second window and pressing {{Taste|Windows}}+{{Taste|Pfeil links}}.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Devices communicate via events. One device sends an event to FHEM and FHEM distributes this event to all devices. Devices decide whether to react or not and if yes - how. Let&#039;s have a closer look at this.&lt;br /&gt;
&lt;br /&gt;
Switching &#039;&#039;mySwitch1&#039;&#039; FHEM generates an event. With every actuation of the switch yet another event appears in &#039;&#039;Event monitor&#039;&#039;. Please look what happens when you consecutively click twice on &#039;&#039;on&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Events always consist of a timestamp followed by the type of the triggering device (in this case: &#039;&#039;dummy&#039;&#039;), name of the triggering device (in this case: &#039;&#039;mySwitch1&#039;&#039;) as well as triggered command (in this case: &#039;&#039;on&#039;&#039; or &#039;&#039;off&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
FHEM devices like remotes or remote-controlled wall switches, which trigger physical events, generate events in FHEM with every keypress in device itself or click on associated FHEM device. &lt;br /&gt;
&lt;br /&gt;
Understanding events, their structure and operation is crucial - we will frequently need them below.&lt;br /&gt;
&lt;br /&gt;
== Operating devices - set ==&lt;br /&gt;
&lt;br /&gt;
So you have learned to switch &#039;&#039;mySwitch1&#039;&#039; clicking at &#039;&#039;on&#039;&#039; or &#039;&#039;off&#039;&#039;. Alternatively you can use command line entering instructions there.&lt;br /&gt;
&lt;br /&gt;
So please, enter in command line field &amp;lt;code&amp;gt;set mySwitch1 on&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;set mySwitch1 off&amp;lt;/code&amp;gt; and confirm this with button {{Taste|Enter}}. Switching status will change accordingly as well and an Event will be triggered. By the way, we will frequently use command &#039;&#039;set&#039;&#039; in future.&lt;br /&gt;
&lt;br /&gt;
Preparing further tests we now create a new device &#039;&#039;&#039;&#039;&#039;myLamp1&#039;&#039;&#039;&#039;&#039; that we later on want to control with &#039;&#039;&#039;&#039;&#039;mySwitch1&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
 define myLamp1 dummy&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;myLamp1&#039;&#039; is a lamp - an actor - it won&#039;t get buttons for &#039;&#039;on&#039;&#039; or &#039;&#039;off&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Lamp should be located in room &#039;&#039;Training&#039;&#039;. You might set this assignment via command line, like shown above. But this time we will use computer mouse...&lt;br /&gt;
&lt;br /&gt;
Until now &#039;&#039;myLamp1&#039;&#039; has no room assignment, so it appears in room &#039;&#039;Unsorted&#039;&#039;. Switch over to this room and click at name &#039;&#039;myLamp1&#039;&#039; getting to detail view.&lt;br /&gt;
&lt;br /&gt;
In the lower part we can set attribute assignments.&lt;br /&gt;
&lt;br /&gt;
Attribute &#039;&#039;room&#039;&#039; is already selected (as default). When you click at text field next to &#039;&#039;room&#039;&#039;, a dialog box opens that contains all rooms FHEM knows so far. You may select one ore more checkboxes and assign this or these rooms to device. Now select only room &#039;&#039;Training&#039;&#039; and confirm selection with button {{Taste|OK}}. Selected room will be transferred into text field and it remains only to click at button {{Taste|attr}} to activate assignment. &lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Now change back to room &#039;&#039;Training&#039;&#039; and you will see both devices:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
== Event trigger - notify ==&lt;br /&gt;
Now we will enable FHEM to react to an event of &#039;&#039;mySwitch1&#039;&#039;: Every time &#039;&#039;mySwitch1&#039;&#039; is triggering event with command &#039;&#039;on&#039;&#039; we want to switch on &#039;&#039;myLamp1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For it FHEM uses a &amp;quot;notify&amp;quot;. Defining syntax looks like&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;
* Name &#039;&#039;&#039;&amp;lt;NAME&amp;gt;&#039;&#039;&#039; will help us to find this FHEM device and display its properties. This time we name the device &#039;&#039;n_mySwitch1_on&#039;&#039; - &#039;&#039;n_&#039;&#039; for marking it a notify, followed by the name of triggering device and triggering command. Such a name may seem too complicated but it is very useful when working with a whole bunch of notifies. You may name it if desired &#039;&#039;n1&#039;&#039; or &#039;&#039;John Doe&#039;&#039;. Device names may consist of characters &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, &#039;&#039;&#039;_ (underscore)&#039;&#039;&#039; and &#039;&#039;&#039;. (period)&#039;&#039;&#039; with a period not at first position. In perl and therefore in FHEM period has a special meaning, so avoid if possible periods in device names.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;REGEXP&amp;gt;&#039;&#039;&#039; stands for &amp;quot;regular expression&amp;quot; and describes a condition for raising notify. We will meet regular expressions in perl and FHEM frequently. They are used to describe syntactical characteristics of strings, e. g. whether a string contains a given word or not, whether digits are in our string and much more. Whenever in FHEM an event raises for every notify runs a check for regexp matching. In our case &#039;&#039;mySwitch1&#039;&#039; raises an event with command &#039;&#039;on&#039;&#039;. To &amp;quot;catch&amp;quot; this event and react to it we have notation  &amp;lt;code&amp;gt;mySwitch1:on&amp;lt;/code&amp;gt;. In future you will have many more moments to deal with regexps in detail. :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; tells what to do. In our case: &amp;lt;code&amp;gt;set myLamp1 on&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So our notify looks like &lt;br /&gt;
 define n_mySwitch1_on notify mySwitch1:on set myLamp1 on&lt;br /&gt;
&lt;br /&gt;
After you have entered this in command field followed by {{Taste|Enter}}, you will see again detail view of the new FHEM notify device (see TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
In block &#039;&#039;Internals&#039;&#039; you can find definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Here you see all text you have entered in event definition after the word &amp;quot;notify&amp;quot; (device type). So you can see &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; and &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
{{Hinweis|In Block &#039;&#039;&#039;&#039;&#039;Probably associated with&#039;&#039;&#039;&#039;&#039; you can find all FHEM devices associated with this notify. Devices are listed as clickable device names, so you can jump over with only one click to detail view of the respective device.}}&lt;br /&gt;
&lt;br /&gt;
Please assign notify to room &#039;&#039;Training&#039;&#039; (find in the lower part attribute &#039;&#039;room&#039;&#039; and choose correct room followed by a click at &#039;&#039;attr&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
So clicking in FHEM&#039;s main menu at &#039;&#039;Training&#039;&#039; you will get our three FHEM devices.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Usally a notify wouldn&#039;t be assigned to a room since it shouldn&#039;t be visible to user later on. We will do it anyway for our training purposes.}}&lt;br /&gt;
&lt;br /&gt;
Now switch &#039;&#039;mySwitch1&#039;&#039; to &#039;&#039;on&#039;&#039; - &#039;&#039;myLamp1&#039;&#039; will be switched too. It seems that it works only at first time, but checking event monitor or looking in &#039;&#039;myLamp1&#039;&#039;&#039;s detail view at timestamp of last state change you can notice that it executes every time.&lt;br /&gt;
&lt;br /&gt;
To get it working for switching off too we define a second notify:&lt;br /&gt;
 define n_mySwitch1_off notify mySwitch1:off set myLamp1 off&lt;br /&gt;
&lt;br /&gt;
Does it work as expected?&lt;br /&gt;
&lt;br /&gt;
Doubtless you dislike defining an own notify for every command a device should raise. You can get it easier.&lt;br /&gt;
&lt;br /&gt;
Instead of &lt;br /&gt;
 define n_mySwitch1_on  notify mySwitch1:on  set myLamp1 on&lt;br /&gt;
 define n_mySwitch1_off notify mySwitch1:off set myLamp1 off&lt;br /&gt;
we define&lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1 &#039;&#039;&#039;$EVENT&#039;&#039;&#039;&lt;br /&gt;
We see that this time regexp doesn&#039;t differ events &#039;&#039;on&#039;&#039; and &#039;&#039;off&#039;&#039; of &#039;&#039;mySwitch1&#039;&#039;. With an absent regexp declaration notify raises for any event with whatsoever command. In executing set command we use FHEM variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (follow the capital notation!). This is a placeholder for the command taken over from the raising event. Having from &#039;&#039;mySwitch1&#039;&#039; an &#039;&#039;on&#039;&#039;, &#039;&#039;&#039;$EVENT&#039;&#039;&#039; will stand for value &#039;&#039;on&#039;&#039; too, accordingly for &#039;&#039;off&#039;&#039; and any other command.&lt;br /&gt;
&lt;br /&gt;
== Deleting or disabling devices – delete, disable ==&lt;br /&gt;
Looking at Event Monitor you see that after activation of &#039;&#039;mySwitch1&#039;&#039; command for &#039;&#039;myLamp1&#039;&#039; is executed twice. The reason is, that any event of &#039;&#039;mySwitch1&#039;&#039; is caught by two notifies - by the &amp;quot;old&amp;quot; notify as well as by the new one. To avoid this we should get rid of the old one. For that purpose we have two choices.&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Delete&#039;&#039;&#039; a notify with command &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, e. g. with &amp;lt;code&amp;gt;delete n_mySwitch1_on&amp;lt;/code&amp;gt;. By the way, command &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; works with any object in FHEM. So you can delete this way &amp;quot;real&amp;quot; devices too.&lt;br /&gt;
#&#039;&#039;&#039;Deactivate&#039;&#039;&#039; a notify, using attribute &#039;&#039;disable&#039;&#039;. You can assign it in detail view of the related notify. (Choose the attribute &#039;&#039;disable&#039;&#039; in drop-down menu next to {{Taste|attr}} in lower part and choose value &#039;&#039;1&#039;&#039; with a following click at {{Taste|attr}}.) Or enter in command line: &amp;lt;code&amp;gt;attr n_mySwitch1_off disable 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Save Config ==&lt;br /&gt;
Whenever you are satisfied with the current state of your FHEM configuration, click on &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; in the top left corner of the FHEM menu or enter the command &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; in the command field followed by {{Taste|Enter}}. Your configuration is now saved. If you do not do this, all changes will be lost after the next FHEM restart. FHEM therefore reminds you of unsaved changes with a red question mark next to &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Modifying existing devices – modify ==&lt;br /&gt;
&lt;br /&gt;
We now create a second lamp, which should also be switched by our &#039;&#039;mySwitch1&#039;&#039; and our Notify. The new lamp is created by entering the following in the command field: &lt;br /&gt;
 define myLamp2 dummy&lt;br /&gt;
&lt;br /&gt;
With several clicks in the detail screen of &#039;&#039;myLamp2&#039;&#039; you can also assign them to the room Training and assign buttons for &#039;&#039;on&#039;&#039; and &#039;&#039;off&#039;&#039; via the &#039;&#039;webCmd&#039;&#039; attribute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we adjust the Notify &#039;&#039;n_mySwitch1&#039;&#039;. To do this, navigate to the Notify detail screen: Switch to the &#039;&#039;Training&#039;&#039; room and click on the name of &#039;&#039;n_mySwitch1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In the detail screen there is the line &#039;&#039;DEF&#039;&#039;, which we have already looked at before. If you click on the word &#039;&#039;DEF&#039;&#039;, you can edit the definition of an FHEM object.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|The &#039;&#039;DEF&#039;&#039; field displays only the part of the definition that followed the object type, i. e. notify, as you created this notification. Here you will find the regex to which the Notify reacts, then the command to be executed after an empty space. For the sake of readability, the entire define statement is always shown below, even if it is not completely visible in the &#039;&#039;DEF&#039;&#039; field.}}&lt;br /&gt;
&lt;br /&gt;
We change here from &lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1 $EVENT&lt;br /&gt;
to&lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1,myLamp2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To finish editing click on the &#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039; button, i. e. {{Taste|modify n_mySwitch1}}. If you check the details in the detail screen, you will see that the &#039;&#039;DEF&#039;&#039;inition of the notify has been adjusted.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14B.png]]&lt;br /&gt;
&lt;br /&gt;
Note again that in the detail screen below under &#039;&#039;Probably associated with&#039;&#039; the switched lamps will appear in the lower section of the detail screen - this will often be useful.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|By the way, you can use the link &#039;&#039;&#039;&#039;Device specific help&#039;&#039;&#039;&#039; to view the complete help text for your device type from commandref, i. e. the help text for &#039;&#039;notify&#039;&#039;. This link is often helpful, especially at the beginning.}}&lt;br /&gt;
&lt;br /&gt;
Now you can test whether a click on &#039;&#039;mySwitch1&#039;&#039; really switches both lamps. Take a look at the events in a separate window with the Event Monitor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
== Switching a couple of devices at once ==&lt;br /&gt;
&lt;br /&gt;
For switching several devices can therefore be used&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
An alternative spelling for it is&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Also a combination is possible:&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;
Even within a notify (or other FHEM commands) you can list several commands, but here is one thing to note:&lt;br /&gt;
 define n1 notify mySwitch1:on set myLamp1 on;set myLamp2 off&lt;br /&gt;
The commands are separated by a semicolon. Effect is: The notify switches myLamp1 whenever mySwitch1 sends the event on. The next command in this line is &#039;&#039;set myLamp2 off&#039;&#039;. This is processed &#039;&#039;&#039;immediately&#039;&#039;&#039; when the above-mentioned command line is entered. It switches myLamp2 immediately, myLamp1 only after the mySwitch1 event.&lt;br /&gt;
&lt;br /&gt;
If the second command &#039;&#039;set myLamp2 off&#039;&#039; should also be executed after the event, a double semicolon must be used:&lt;br /&gt;
 define n1 notify mySwitch1:on set myLamp1 on;;set myLamp2 off&lt;br /&gt;
&lt;br /&gt;
The combined variant could look like this:&lt;br /&gt;
 define n1 notify mySwitch1:on set myLamp1 on;;set myLamp2 off;set myLampe3 on&lt;br /&gt;
This command line would switch myLamp3 immediately, but only after the mySwitch1 event myLamp1 and myLamp2 switch.&lt;br /&gt;
&lt;br /&gt;
== Renaming devices ==&lt;br /&gt;
&lt;br /&gt;
Finally we want to rename (for the exercise) another device: &#039;&#039;&#039;&#039;&#039;myLamp2&#039;&#039;&#039;&#039;&#039; should be &#039;&#039;&#039;&#039;&#039;myStandardLamp&#039;&#039;&#039;&#039;&#039;.  For this we use&lt;br /&gt;
 rename &amp;lt;oldName&amp;gt; &amp;lt;newName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should be noted that related notify statements are &#039;&#039;&#039;not&#039;&#039;&#039; updated automatically. So, before renaming, note the &#039;&#039;Probably associated with&#039;&#039; list at the bottom of the detail screen so that you do not forget any of your Notify during the following adjustment.&lt;br /&gt;
&lt;br /&gt;
So enter in the command box&lt;br /&gt;
 rename myLamp2 myStandardLamp&lt;br /&gt;
and then adjust &#039;&#039;n_mySwitch1&#039;&#039; by customizing the definition on its detail screen in the &#039;DEF&#039; section.&lt;br /&gt;
&lt;br /&gt;
After the change, the Notify must be&lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1,myStandardLamp $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
== Scheduler - at ==&lt;br /&gt;
The next step is to set up a time control.&lt;br /&gt;
First of all, we want to ensure that &#039;&#039;myLamp1&#039;&#039; is switched off after one minute, such as a staircase light.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|To see the effect, first switch &#039;&#039;myLamp1&#039;&#039; to &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
The FHEM device type &#039;&#039;at&#039;&#039; is available for time control. The command structure is&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; and &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; have the same function here as with notify. New here is only &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), so the time specification. This is done in the notation &#039;&#039;HH:MM:SS&#039;&#039; or &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To turn off &#039;&#039;&#039;&#039;&#039;myLamp1&#039;&#039;&#039;&#039;&#039; so &#039;&#039;&#039;in one minute&#039;&#039;&#039;, create the following &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLamp1 at +00:01:00 set myLamp1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
Try it.&lt;br /&gt;
Will &#039;&#039;myLamp1&#039;&#039; be turned off after one minute?&lt;br /&gt;
Is an event generated during this process?&lt;br /&gt;
&lt;br /&gt;
If you want to see the detail view of the &#039;&#039;at&#039;&#039;, you have to hurry up: After a single execution, the &#039;&#039;at&#039;&#039; is automatically deleted. If FHEM was faster, you can create it again and specify a longer period of time if necessary. :-)&lt;br /&gt;
&lt;br /&gt;
With &amp;lt;timespec&amp;gt; you can omit the seconds and just write HH:MM. There are also several variants:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Variants of time specifications for &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!notation&lt;br /&gt;
!explanation&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In two minutes; single execution&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|At two minutes past midnight, i.e. at 00:02 and 0 seconds; one-time execution&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Daily at 00:02&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Every 2 minutes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Three times, every two minutes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Three times at 00:02&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Daily at sunset&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|2 minutes (120 seconds) daily after sunrise&lt;br /&gt;
|}&lt;br /&gt;
*By specifying &#039;&#039;&#039;*&#039;&#039;&#039; a permanent repetition is defined. The repetitions continue until the &#039;&#039;at&#039;&#039; is deleted or disabled.&lt;br /&gt;
*By specifying &#039;&#039;&#039;+&#039;&#039;&#039; the specified time is no longer interpreted as an absolute time, but as a timer, after how many hours:minutes:seconds the command is executed.&lt;br /&gt;
*By specifying &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; the &#039;&#039;at&#039;&#039; will only be run n times.&lt;br /&gt;
*The functions &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; and &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; return the appropriate time. This is repeated daily by specifying &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039;. The curly braces indicate that FHEM directly executes the contents of these braces as perl functions. &lt;br /&gt;
&lt;br /&gt;
For example, to switch off the garden lighting every day at sunrise, define something like&lt;br /&gt;
 define a_gardenLight_morning_off at *{sunrise()} set gardenLight off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
In the detail screen of an &#039;&#039;at&#039;&#039; the time of the next execution is displayed in the &#039;&#039;STATE&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
This info also appears in the room view if you show the &#039;&#039;at&#039;&#039; there:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18B.png]]&lt;br /&gt;
&lt;br /&gt;
== Event-driven timer start - notify und at ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Time and Event Control with DOIF&#039;&#039;&#039;&lt;br /&gt;
Since the release of the original article in early 2014, another way of time and event control has been introduced. See: {{Link2CmdRef|Anker=DOIF}} for DOIF}}&lt;br /&gt;
As a last exercise we want to combine a  &#039;&#039;notify&#039;&#039; and an &#039;&#039;at&#039;&#039;. The timer should now not start when you enter the command in the command field, but when an event occurs.&lt;br /&gt;
&lt;br /&gt;
[[Datei:GotoRAW-Import firststeps.PNG|thumb|left|300px]]For this purpose, we create a Stairwell: create the Dummy-Devices &#039;&#039;sw_Switch&#039;&#039; and &#039;&#039;sw_Light&#039;&#039; in the &#039;&#039;room Stairwell&#039;&#039;. In order to enter the following commands on one piece, click the framed &amp;quot;+&amp;quot; icon next to the command line (only available in the default Style f18 - please note this article [[Import von Code Snippets|Import-of-Code-Snippets]]), add the following lines with copy&amp;amp;paste to the dialog box that appears and press {{Taste|Execute}}:&lt;br /&gt;
 define sw_Switch dummy&lt;br /&gt;
 attr   sw_Switch room Stairwell&lt;br /&gt;
 attr   sw_Switch webCmd on&lt;br /&gt;
 define sw_Light dummy&lt;br /&gt;
 attr   sw_Light room Stairwell&lt;br /&gt;
[[Datei:RAW-Import firststeps.PNG]]&lt;br /&gt;
&lt;br /&gt;
Then you can close the dialog or enter the following commands. Note that with &#039;&#039;Execute&#039;&#039; all statements from the dialog box are executed, which may lead to error messages e.g. if a device has already been defined before. Lines with commands that have already been adopted into the configuration can therefore confidently delete to avoid such effects. &lt;br /&gt;
&lt;br /&gt;
Now the Notify is missing, which reacts to &#039;&#039;sw_Switch:on&#039;&#039; and executes two commands: &lt;br /&gt;
*Switching on the staircase light with &amp;lt;code&amp;gt;set sw_Light on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Start a timer that switches it off after one minute. So &amp;lt;code&amp;gt;define a1 at +00:01 set sw_Light off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This will look like this (and must be entered in the command field as a single line):&lt;br /&gt;
 define n_sw_Switch_on notify sw_Switch:on &lt;br /&gt;
        set sw_Light on;;define a1 at +00:01 set sw_Light off&lt;br /&gt;
When the Notify is triggered, the staircase lighting is switched on as a command, as well as the definition of a timer that switches it off a minute later.&lt;br /&gt;
Is it working?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since this is quite bulky, there is a slightly simpler alternative:&lt;br /&gt;
 define n_sw_Switch_on notify sw_Switch:on set sw_Light on;;sleep 60;;set sw_Light off&lt;br /&gt;
&lt;br /&gt;
Some hardware systems also offer the command &#039;&#039;on-for-timer&#039;&#039;, which can be used to write alternatively&lt;br /&gt;
 define n_sw_Switch_on notify sw_Switch:on set sw_Light on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
==What&#039;s next?==&lt;br /&gt;
You have now been introduced to:&lt;br /&gt;
*Creating FHEM devices with &#039;&#039;&#039;define&#039;&#039;&#039; &lt;br /&gt;
*&#039;&#039;&#039;Events&#039;&#039;&#039; and the Event Monitor&lt;br /&gt;
*Switching Devices with &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
*Modifying Devices with &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; and &#039;&#039;&#039;delete&#039;&#039;&#039; &lt;br /&gt;
*Setting and editing &#039;&#039;&#039;Attributs&#039;&#039;&#039;&lt;br /&gt;
*Event driven actions by &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
*Time-controlled switching with &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So you know the most basic mechanisms of FHEM. Details of these commands can be found in the FHEM command reference {{Link2CmdRef}}&lt;br /&gt;
&lt;br /&gt;
In the commandref you will find the description of all FHEM commands as well as the list of all device types that can be integrated in FHEM.&lt;br /&gt;
&lt;br /&gt;
You will find that &amp;quot;real&amp;quot; FHEM devices look exactly like the dummy devices you have already seen here. The main difference is that you no longer have to define the available commands yourself using &#039;&#039;attr webCmd&#039;&#039;, since they are already predefined by the FHEM device. And events are triggered not only when you click on the FHEM web frontend, but also when the physical device (i. e. the motion sensor or the light switch on the wall) is triggered.&lt;br /&gt;
&lt;br /&gt;
Once you have paired your first devices with FHEM, look at the event monitor to see when which events will be triggered.&lt;br /&gt;
&lt;br /&gt;
A more comprehensive introduction to FHEM can be found in the document [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-FHEM] (German)&lt;br /&gt;
&lt;br /&gt;
The basics of the programming language Perl, which are important for FHEM, can be read in the first chapters of a Perl book or in various free online tutorials.&lt;br /&gt;
&lt;br /&gt;
Have fun and success with FHEM!&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
This is the english version of [[Erste Schritte in FHEM]]&lt;br /&gt;
* Last edit German article: {{REVISIONDAY2: Erste Schritte in FHEM}}.{{REVISIONMONTH: Erste Schritte in FHEM}}.{{REVISIONYEAR: Erste Schritte in FHEM}}&lt;br /&gt;
*Last edit English article: {{REVISIONDAY2: First steps in FHEM}}.{{REVISIONMONTH: First steps in FHEM}}.{{REVISIONYEAR: First steps in FHEM}}&lt;br /&gt;
*&#039;&#039;&#039;Newer&#039;&#039;&#039; Version is: &#039;&#039;&#039;{{#ifexpr: {{REVISIONTIMESTAMP: Erste Schritte in FHEM}} &amp;gt; {{REVISIONTIMESTAMP: First steps in FHEM}}| dt. Version|engl. Version}}&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afo-solar</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=First_steps_in_FHEM&amp;diff=39727</id>
		<title>First steps in FHEM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=First_steps_in_FHEM&amp;diff=39727"/>
		<updated>2024-12-05T08:11:50Z</updated>

		<summary type="html">&lt;p&gt;Afo-solar: To set the attribute &amp;quot;disable&amp;quot; in detail view, one has to chose the attribute in a drop-down menu. This point is clarified by the submitted changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This a beginners course for those starting to work with FHEM. After you have installed FHEM on your server you may reproduce all steps without any additional smart home hardware.&lt;br /&gt;
&lt;br /&gt;
This guide was originally published by Ulrich Maass, who gave his permission to publish it in the FHEM wiki.&lt;br /&gt;
&lt;br /&gt;
Note to editors: Everybody is welcome to improve typo, grammar and style. Content changes and extentions should be discussed with the author (e. g. on associated [[Diskussion:First_steps_in_FHEM|discussion page]]).&lt;br /&gt;
&lt;br /&gt;
== First attempt ==&lt;br /&gt;
To start FHEM for the first time, enter in your browser&#039;s address field:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;ip-address&amp;gt;:8083&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
e. g. &amp;lt;nowiki&amp;gt;http://192.168.1.1:8083&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The FHEM homepage is displayed:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem01.png|border]]&lt;br /&gt;
&lt;br /&gt;
* At the top of the screen you can see the white &#039;&#039;command line&#039;&#039; where you can enter commands.&lt;br /&gt;
* The first menu item is the &#039;&#039;Save config&#039;&#039; button, which saves changes so that they are still available even after a restart.&lt;br /&gt;
* Furthermore, there are already the rooms &#039;&#039;Unsorted&#039;&#039; and &#039;&#039;Everything&#039;&#039; that we will soon get to know&lt;br /&gt;
* In the lower block there are further links, which we will also discuss later.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Security Check&#039;&#039; note indicates that you have not yet set a password for FHEM. To set up password protection, see the FHEM command reference {{Link2CmdRef|Anker=allowed}}, which contains a description of all FHEM functions and modules. To suppress this message for now, enter the following in the command line: &lt;br /&gt;
 attr global motd none&lt;br /&gt;
and confirm this change with {{Taste|Enter}} or click on the link of the same name.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png|border]]&lt;br /&gt;
&lt;br /&gt;
== Creating device - define  ==&lt;br /&gt;
The basic element of FHEM is called &#039;&#039;device&#039;&#039;.Typical devices are, for example, remote controlled outlets, roller shutter motors, temperature sensors, solenoid valves etc.&lt;br /&gt;
&lt;br /&gt;
But other things that at first glance wouldn&#039;t appear to be a physical device are devices: for example, the user interface of FHEM itself is a device (&#039;&#039;&amp;quot;FHEMWEB&amp;quot;&#039;&#039;), and there are devices without physical equipment that can be used to store a variable. &lt;br /&gt;
&lt;br /&gt;
We will now create a very simple device, called &#039;&#039;dummy&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A dummy device is a special object in that it does not necessarily require a corresponding physical device (physical lamp, roller shutter, solenoid valve). In this way, you can carry out these steps without any hardware, and you can go through this general introduction without having to deal with the differences between the various hardware systems. A dummy device typically looks exactly the same in the FHEM interface as a FHEM device corresponding to a physical device in your hardware environment.  &lt;br /&gt;
&lt;br /&gt;
First, we&#039;ll create a switch. This simulates a light switch in the wall. To do this, enter the following command in the command field:&lt;br /&gt;
 define mySwitch1 dummy&lt;br /&gt;
&lt;br /&gt;
&amp;quot;define&amp;quot; is the needed FHEM command, &amp;quot;mySwitch1&amp;quot; the future name of our device, &amp;quot;dummy&amp;quot; describes its type. The words &amp;quot;define&amp;quot; and &amp;quot;dummy&amp;quot; are part of FHEM&#039;s command syntax and cannot be modified, &amp;quot;mySwitch1&amp;quot; is (more or less) arbitrary. After pressing {{Taste|Enter}} the detailed view of our new FHEM device &#039;&#039;mySwitch1&#039;&#039; is displayed.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png|border]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Each device has exactly one &amp;quot;type&amp;quot;. This type also defines the Perl command file (more precisely referred to as the &amp;quot;module&amp;quot;) in which certain routines and properties are coded. Since our device is of type &#039;&#039;dummy&#039;&#039;, FHEM knows that the routines and properties are located in module 98_dummy. pm. (The number 98 used to have a meaning, but today this is no longer the case, though it is still used for historical reasons.)}}&lt;br /&gt;
&lt;br /&gt;
Devices have a &amp;quot;state&amp;quot; that changes over time and that FHEM records. For example, a window is opened, a roller shutter curtain is closed and a radio socket is alive. A state does not have to contain exactly one variable (window either &amp;quot;open&amp;quot; or &amp;quot;closed&amp;quot;), a state can also be described by several variables (the state of a raspberry system, device-type sysmon, includes for example the CPU frequency, the CPU temperature, the workload and much more). &lt;br /&gt;
&lt;br /&gt;
The device status in FHEM consists of three blocks of values, called &#039;&#039;Internals&#039;&#039;, &#039;&#039;Attributes&#039;&#039; and &#039;&#039;Readings&#039;&#039;. It would be too early to go into the meaning of the three terms in detail, but the following remarks are important for the following steps:&lt;br /&gt;
* &#039;&#039;Internals&#039;&#039; store very basic information about a device. They are rarely edited directly by the user (usually only during device setup).&lt;br /&gt;
* &#039;&#039;Attributes&#039;&#039; control device behavior. Typically they can be changed (or even defined) by users.&lt;br /&gt;
* &#039;&#039;Readings&#039;&#039; have, in contrast to the values of the other two blocks, a timestamp. Usually they are measured values of your device.&lt;br /&gt;
&lt;br /&gt;
It may be confusing for beginners that there could be Internals and Readings with the same names (e.g. STATE and state). However, Perl is case sensitive!&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Block &#039;&#039;&#039;&#039;&#039;Internals&#039;&#039;&#039;&#039;&#039; always shows basic characteristics of a FHEM device:&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;NAME:&#039;&#039;&#039;&#039;&#039; device name assigned by the user&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;TYPE:&#039;&#039;&#039;&#039;&#039; device type of FHEM device, here: &#039;&#039;dummy&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;STATE:&#039;&#039;&#039;&#039;&#039; device state shown in all summaries. Since there was no assignment till now it is initially &#039;&#039;&#039;&#039;&#039;???&#039;&#039;&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
== Creating rooms ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s do a step forward and arrange our devices in rooms. You may consider it reasonable to put together devices physically (really) located in one room into a FHEM room. So you can find in &amp;quot;&#039;&#039;bedroom&#039;&#039;&amp;quot; appropriate devices like &amp;quot;&#039;&#039;shutter&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;time switch&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;radio set&#039;&#039;&amp;quot;. You may decide other assignments: put all measuring devices like thermometers, electric meters and hygrometers in one (possibly only virtually and not physically existing) room &amp;quot;&#039;&#039;measuring devices&#039;&#039;&amp;quot;. Name of a room is arbitrary.&lt;br /&gt;
&lt;br /&gt;
To achieve this you have to add to all devices which your room should contain an &amp;quot;Attribute&amp;quot; (see above). Name of the attribute is &amp;quot;room&amp;quot; and it should get as its value the room name. Let&#039;s try it with our room &#039;&#039;dummy&#039;&#039;. Use command&lt;br /&gt;
 attr mySwitch1 room Training&lt;br /&gt;
and finish input with {{Taste|Enter}}).&lt;br /&gt;
&lt;br /&gt;
With this command you have added to device &#039;&#039;mySwitch1&#039;&#039; Attribute &#039;&#039;room&#039;&#039; with value &#039;&#039;Training&#039;&#039;. Again, &#039;&#039;attr&#039;&#039;, &#039;&#039;mySwitch1&#039;&#039; (while referencing to an existing object&#039;s name) and &#039;&#039;room&#039;&#039; are part of FHEM&#039;s command syntax and are unalterable, &#039;&#039;Training&#039;&#039; is arbitrary.&lt;br /&gt;
&lt;br /&gt;
Now &#039;&#039;mySwitch1&#039;&#039; belongs to room &#039;&#039;Training&#039;&#039;. Due to this assignment room appears in navigation bar on the left hand side in room&#039;s block. Try to click at room &#039;&#039;Training&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem04.png]]&lt;br /&gt;
&lt;br /&gt;
FHEM will show all devices belonging to this room. Until now we have only one device: &#039;&#039;mySwitch1&#039;&#039; - our dummy.&lt;br /&gt;
&lt;br /&gt;
Beside device name always device status is on display, we still get &#039;&#039;???&#039;&#039;. Clicking at name &#039;&#039;mySwitch1&#039;&#039; you will return to its detailed view.&lt;br /&gt;
&lt;br /&gt;
Our dummy is shown in a block with (type) label &#039;&#039;dummy&#039;&#039;. You may change label as well introducing a further attribute &amp;quot;&#039;&#039;group&#039;&#039;&amp;quot; and assigning to it (arbitrary as well) name: groups order devices inside a room.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;:&amp;lt;br /&amp;gt;If you want to delete a room, you may do so by removing all devices from this room. In our example of room &#039;&#039;Training&#039;&#039; you have to delete attribute room in all devices of room &#039;&#039;Training&#039;&#039;. Room &#039;&#039;Training&#039;&#039; will disappear by itself.&lt;br /&gt;
&lt;br /&gt;
== Creating switching commands ==&lt;br /&gt;
Now we want to add on/off buttons to &amp;quot;mySwitch1&amp;quot;: &lt;br /&gt;
 attr mySwitch1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Again we use an attribute named webCmd with values on:off, we want to add to device &amp;quot;mySwitch1&amp;quot;. Instead of entering mentioned above command into command line field you may choose desired attribute (in this case: &#039;&#039;&#039;&#039;&#039;webCmd&#039;&#039;&#039;&#039;&#039;) in lower part of detail view and enter needed values into text field right next, in this case &#039;&#039;&#039;&#039;&#039;on:off&#039;&#039;&#039;&#039;&#039;. Complete your input with a click on button {{Taste|attr}}.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem05.png]]&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s click again on room &#039;&#039;Training&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
You may see, that due to attribute added in last step in room view switch buttons for &#039;&#039;on&#039;&#039; and &#039;&#039;off&#039;&#039; have appeared.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem06.png]]&lt;br /&gt;
Experimentally click on &#039;&#039;on&#039;&#039; and &#039;&#039;off&#039;&#039;: instead of &#039;&#039;???&#039;&#039; you got so far you may find a bulb symbol showing current state.&lt;br /&gt;
&lt;br /&gt;
Clicking on device name &#039;&#039;mySwitch1&#039;&#039; you change back to detail view and may see in block &#039;&#039;Internals&#039;&#039; current state &#039;&#039;STATE&#039;&#039; - being shown in room view as an icon (bulb).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem07.png]]&lt;br /&gt;
&lt;br /&gt;
In detail view you can see a new block &#039;&#039;Readings&#039;&#039; as well.&lt;br /&gt;
&lt;br /&gt;
Please switch off &#039;&#039;mySwitch1&#039;&#039; once again. Pay attention to readings: next to internal &#039;&#039;STATE&#039;&#039; you may find a reading of same name (see above: Perl distinguishes lower and upper case), but equipped with a timestamp. Check reading &#039;&#039;state&#039;&#039; for updating at value and timestamp.&lt;br /&gt;
&lt;br /&gt;
== Event monitor ==&lt;br /&gt;
&lt;br /&gt;
Please, open in your browser another window with FHEM and in FHEM its &#039;&#039;&#039;[[Event monitor]]&#039;&#039;&#039;. The shortest way is to right-click on &#039;&#039;Event monitor&#039;&#039; and to select from the local menu &amp;quot;Open in new window&amp;quot;. Place windows in such a way, that you can follow event monitor and operate your &amp;quot;mySwitch1&amp;quot; at once. Using Windows 7 or newer simply activate one window and press {{Taste|Windows}}+{{Taste|Pfeil rechts}}, followed by activating second window and pressing {{Taste|Windows}}+{{Taste|Pfeil links}}.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem08.png]]&lt;br /&gt;
&lt;br /&gt;
Devices communicate via events. One device sends an event to FHEM and FHEM distributes this event to all devices. Devices decide whether to react or not and if yes - how. Let&#039;s have a closer look at this.&lt;br /&gt;
&lt;br /&gt;
Switching &#039;&#039;mySwitch1&#039;&#039; FHEM generates an event. With every actuation of the switch yet another event appears in &#039;&#039;Event monitor&#039;&#039;. Please look what happens when you consecutively click twice on &#039;&#039;on&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Events always consist of a timestamp followed by the type of the triggering device (in this case: &#039;&#039;dummy&#039;&#039;), name of the triggering device (in this case: &#039;&#039;mySwitch1&#039;&#039;) as well as triggered command (in this case: &#039;&#039;on&#039;&#039; or &#039;&#039;off&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
FHEM devices like remotes or remote-controlled wall switches, which trigger physical events, generate events in FHEM with every keypress in device itself or click on associated FHEM device. &lt;br /&gt;
&lt;br /&gt;
Understanding events, their structure and operation is crucial - we will frequently need them below.&lt;br /&gt;
&lt;br /&gt;
== Operating devices - set ==&lt;br /&gt;
&lt;br /&gt;
So you have learned to switch &#039;&#039;mySwitch1&#039;&#039; clicking at &#039;&#039;on&#039;&#039; or &#039;&#039;off&#039;&#039;. Alternatively you can use command line entering instructions there.&lt;br /&gt;
&lt;br /&gt;
So please, enter in command line field &amp;lt;code&amp;gt;set mySwitch1 on&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;set mySwitch1 off&amp;lt;/code&amp;gt; and confirm this with button {{Taste|Enter}}. Switching status will change accordingly as well and an Event will be triggered. By the way, we will frequently use command &#039;&#039;set&#039;&#039; in future.&lt;br /&gt;
&lt;br /&gt;
Preparing further tests we now create a new device &#039;&#039;&#039;&#039;&#039;myLamp1&#039;&#039;&#039;&#039;&#039; that we later on want to control with &#039;&#039;&#039;&#039;&#039;mySwitch1&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
 define myLamp1 dummy&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;myLamp1&#039;&#039; is a lamp - an actor - it won&#039;t get buttons for &#039;&#039;on&#039;&#039; or &#039;&#039;off&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Lamp should be located in room &#039;&#039;Training&#039;&#039;. You might set this assignment via command line, like shown above. But this time we will use computer mouse...&lt;br /&gt;
&lt;br /&gt;
Until now &#039;&#039;myLamp1&#039;&#039; has no room assignment, so it appears in room &#039;&#039;Unsorted&#039;&#039;. Switch over to this room and click at name &#039;&#039;myLamp1&#039;&#039; getting to detail view.&lt;br /&gt;
&lt;br /&gt;
In the lower part we can set attribute assignments.&lt;br /&gt;
&lt;br /&gt;
Attribute &#039;&#039;room&#039;&#039; is already selected (as default). When you click at text field next to &#039;&#039;room&#039;&#039;, a dialog box opens that contains all rooms FHEM knows so far. You may select one ore more checkboxes and assign this or these rooms to device. Now select only room &#039;&#039;Training&#039;&#039; and confirm selection with button {{Taste|OK}}. Selected room will be transferred into text field and it remains only to click at button {{Taste|attr}} to activate assignment. &lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem09.png]]&lt;br /&gt;
&lt;br /&gt;
Now change back to room &#039;&#039;Training&#039;&#039; and you will see both devices:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem10.png]]&lt;br /&gt;
&lt;br /&gt;
== Event trigger - notify ==&lt;br /&gt;
Now we will enable FHEM to react to an event of &#039;&#039;mySwitch1&#039;&#039;: Every time &#039;&#039;mySwitch1&#039;&#039; is triggering event with command &#039;&#039;on&#039;&#039; we want to switch on &#039;&#039;myLamp1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For it FHEM uses a &amp;quot;notify&amp;quot;. Defining syntax looks like&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;
* Name &#039;&#039;&#039;&amp;lt;NAME&amp;gt;&#039;&#039;&#039; will help us to find this FHEM device and display its properties. This time we name the device &#039;&#039;n_mySwitch1_on&#039;&#039; - &#039;&#039;n_&#039;&#039; for marking it a notify, followed by the name of triggering device and triggering command. Such a name may seem too complicated but it is very useful when working with a whole bunch of notifies. You may name it if desired &#039;&#039;n1&#039;&#039; or &#039;&#039;John Doe&#039;&#039;. Device names may consist of characters &#039;&#039;&#039;a-z&#039;&#039;&#039;, &#039;&#039;&#039;A-Z&#039;&#039;&#039;, &#039;&#039;&#039;0-9&#039;&#039;&#039;, &#039;&#039;&#039;_ (underscore)&#039;&#039;&#039; and &#039;&#039;&#039;. (period)&#039;&#039;&#039; with a period not at first position. In perl and therefore in FHEM period has a special meaning, so avoid if possible periods in device names.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;REGEXP&amp;gt;&#039;&#039;&#039; stands for &amp;quot;regular expression&amp;quot; and describes a condition for raising notify. We will meet regular expressions in perl and FHEM frequently. They are used to describe syntactical characteristics of strings, e. g. whether a string contains a given word or not, whether digits are in our string and much more. Whenever in FHEM an event raises for every notify runs a check for regexp matching. In our case &#039;&#039;mySwitch1&#039;&#039; raises an event with command &#039;&#039;on&#039;&#039;. To &amp;quot;catch&amp;quot; this event and react to it we have notation  &amp;lt;code&amp;gt;mySwitch1:on&amp;lt;/code&amp;gt;. In future you will have many more moments to deal with regexps in detail. :)&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; tells what to do. In our case: &amp;lt;code&amp;gt;set myLamp1 on&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So our notify looks like &lt;br /&gt;
 define n_mySwitch1_on notify mySwitch1:on set myLamp1 on&lt;br /&gt;
&lt;br /&gt;
After you have entered this in command field followed by {{Taste|Enter}}, you will see again detail view of the new FHEM notify device (see TYPE).&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem11.png]]&lt;br /&gt;
&lt;br /&gt;
In block &#039;&#039;Internals&#039;&#039; you can find definition &#039;&#039;&#039;DEF&#039;&#039;&#039;. Here you see all text you have entered in event definition after the word &amp;quot;notify&amp;quot; (device type). So you can see &#039;&#039;&amp;lt;regexp&amp;gt;&#039;&#039; and &#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;.&lt;br /&gt;
{{Hinweis|In Block &#039;&#039;&#039;&#039;&#039;Probably associated with&#039;&#039;&#039;&#039;&#039; you can find all FHEM devices associated with this notify. Devices are listed as clickable device names, so you can jump over with only one click to detail view of the respective device.}}&lt;br /&gt;
&lt;br /&gt;
Please assign notify to room &#039;&#039;Training&#039;&#039; (find in the lower part attribute &#039;&#039;room&#039;&#039; and choose correct room followed by a click at &#039;&#039;attr&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
So clicking in FHEM&#039;s main menu at &#039;&#039;Training&#039;&#039; you will get our three FHEM devices.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem12.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Usally a notify wouldn&#039;t be assigned to a room since it shouldn&#039;t be visible to user later on. We will do it anyway for our training purposes.}}&lt;br /&gt;
&lt;br /&gt;
Now switch &#039;&#039;mySwitch1&#039;&#039; to &#039;&#039;on&#039;&#039; - &#039;&#039;myLamp1&#039;&#039; will be switched too. It seems that it works only at first time, but checking event monitor or looking in &#039;&#039;myLamp1&#039;&#039;&#039;s detail view at timestamp of last state change you can notice that it executes every time.&lt;br /&gt;
&lt;br /&gt;
To get it working for switching off too we define a second notify:&lt;br /&gt;
 define n_mySwitch1_off notify mySwitch1:off set myLamp1 off&lt;br /&gt;
&lt;br /&gt;
Does it work as expected?&lt;br /&gt;
&lt;br /&gt;
Doubtless you dislike defining an own notify for every command a device should raise. You can get it easier.&lt;br /&gt;
&lt;br /&gt;
Instead of &lt;br /&gt;
 define n_mySwitch1_on  notify mySwitch1:on  set myLamp1 on&lt;br /&gt;
 define n_mySwitch1_off notify mySwitch1:off set myLamp1 off&lt;br /&gt;
we define&lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1 &#039;&#039;&#039;$EVENT&#039;&#039;&#039;&lt;br /&gt;
We see that this time regexp doesn&#039;t differ events &#039;&#039;on&#039;&#039; and &#039;&#039;off&#039;&#039; of &#039;&#039;mySwitch1&#039;&#039;. With an absent regexp declaration notify raises for any event with whatsoever command. In executing set command we use FHEM variable &#039;&#039;&#039;$EVENT&#039;&#039;&#039; (follow the capital notation!). This is a placeholder for the command taken over from the raising event. Having from &#039;&#039;mySwitch1&#039;&#039; an &#039;&#039;on&#039;&#039;, &#039;&#039;&#039;$EVENT&#039;&#039;&#039; will stand for value &#039;&#039;on&#039;&#039; too, accordingly for &#039;&#039;off&#039;&#039; and any other command.&lt;br /&gt;
&lt;br /&gt;
== Deleting or disabling devices – delete, disable ==&lt;br /&gt;
Looking at Event Monitor you see that after activation of &#039;&#039;mySwitch1&#039;&#039; command for &#039;&#039;myLamp1&#039;&#039; is executed twice. The reason is, that any event of &#039;&#039;mySwitch1&#039;&#039; is caught by two notifies - by the &amp;quot;old&amp;quot; notify as well as by the new one. To avoid this we should get rid of the old one. For that purpose we have two choices.&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Delete&#039;&#039;&#039; a notify with command &amp;lt;code&amp;gt;delete &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;, e. g. with &amp;lt;code&amp;gt;delete n_mySwitch1_on&amp;lt;/code&amp;gt;. By the way, command &amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt; works with any object in FHEM. So you can delete this way &amp;quot;real&amp;quot; devices too.&lt;br /&gt;
#&#039;&#039;&#039;Deactivate&#039;&#039;&#039; a notify, using attribute &#039;&#039;disable&#039;&#039;. You can assign it in detail view of the related notify. (Choose the attribute &#039;&#039;disable&#039;&#039; in drop-down menu next to {{Taste|attr}} in lower part and choose value &#039;&#039;1&#039;&#039; with a following click at {{Taste|attr}}.) Or enter in command line: &amp;lt;code&amp;gt;attr n_mySwitch1_off disable 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Save Config ==&lt;br /&gt;
Whenever you are satisfied with the current state of your FHEM configuration, click on &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039; in the top left corner of the FHEM menu or enter the command &amp;lt;code&amp;gt;save&amp;lt;/code&amp;gt; in the command field followed by {{Taste|Enter}}. Your configuration is now saved. If you do not do this, all changes will be lost after the next FHEM restart. FHEM therefore reminds you of unsaved changes with a red question mark next to &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Modifying existing devices – modify ==&lt;br /&gt;
&lt;br /&gt;
We now create a second lamp, which should also be switched by our &#039;&#039;mySwitch1&#039;&#039; and our Notify. The new lamp is created by entering the following in the command field: &lt;br /&gt;
 define myLamp2 dummy&lt;br /&gt;
&lt;br /&gt;
With several clicks in the detail screen of &#039;&#039;myLamp2&#039;&#039; you can also assign them to the room Training and assign buttons for &#039;&#039;on&#039;&#039; and &#039;&#039;off&#039;&#039; via the &#039;&#039;webCmd&#039;&#039; attribute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem13.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we adjust the Notify &#039;&#039;n_mySwitch1&#039;&#039;. To do this, navigate to the Notify detail screen: Switch to the &#039;&#039;Training&#039;&#039; room and click on the name of &#039;&#039;n_mySwitch1&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In the detail screen there is the line &#039;&#039;DEF&#039;&#039;, which we have already looked at before. If you click on the word &#039;&#039;DEF&#039;&#039;, you can edit the definition of an FHEM object.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|The &#039;&#039;DEF&#039;&#039; field displays only the part of the definition that followed the object type, i. e. notify, as you created this notification. Here you will find the regex to which the Notify reacts, then the command to be executed after an empty space. For the sake of readability, the entire define statement is always shown below, even if it is not completely visible in the &#039;&#039;DEF&#039;&#039; field.}}&lt;br /&gt;
&lt;br /&gt;
We change here from &lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1 $EVENT&lt;br /&gt;
to&lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1,myLamp2 $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To finish editing click on the &#039;&#039;&#039;&#039;modify &amp;lt;name&amp;gt;&#039;&#039;&#039;&#039; button, i. e. {{Taste|modify n_mySwitch1}}. If you check the details in the detail screen, you will see that the &#039;&#039;DEF&#039;&#039;inition of the notify has been adjusted.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem14B.png]]&lt;br /&gt;
&lt;br /&gt;
Note again that in the detail screen below under &#039;&#039;Probably associated with&#039;&#039; the switched lamps will appear in the lower section of the detail screen - this will often be useful.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|By the way, you can use the link &#039;&#039;&#039;&#039;Device specific help&#039;&#039;&#039;&#039; to view the complete help text for your device type from commandref, i. e. the help text for &#039;&#039;notify&#039;&#039;. This link is often helpful, especially at the beginning.}}&lt;br /&gt;
&lt;br /&gt;
Now you can test whether a click on &#039;&#039;mySwitch1&#039;&#039; really switches both lamps. Take a look at the events in a separate window with the Event Monitor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem15.png]]&lt;br /&gt;
&lt;br /&gt;
== Switching a couple of devices at once ==&lt;br /&gt;
&lt;br /&gt;
For switching several devices can therefore be used&lt;br /&gt;
 set &amp;lt;device1&amp;gt;,&amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
An alternative spelling for it is&lt;br /&gt;
 set &amp;lt;device1&amp;gt; on; set &amp;lt;device2&amp;gt; on&lt;br /&gt;
&lt;br /&gt;
Also a combination is possible:&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;
Even within a notify (or other FHEM commands) you can list several commands, but here is one thing to note:&lt;br /&gt;
 define n1 notify mySwitch1:on set myLamp1 on;set myLamp2 off&lt;br /&gt;
The commands are separated by a semicolon. Effect is: The notify switches myLamp1 whenever mySwitch1 sends the event on. The next command in this line is &#039;&#039;set myLamp2 off&#039;&#039;. This is processed &#039;&#039;&#039;immediately&#039;&#039;&#039; when the above-mentioned command line is entered. It switches myLamp2 immediately, myLamp1 only after the mySwitch1 event.&lt;br /&gt;
&lt;br /&gt;
If the second command &#039;&#039;set myLamp2 off&#039;&#039; should also be executed after the event, a double semicolon must be used:&lt;br /&gt;
 define n1 notify mySwitch1:on set myLamp1 on;;set myLamp2 off&lt;br /&gt;
&lt;br /&gt;
The combined variant could look like this:&lt;br /&gt;
 define n1 notify mySwitch1:on set myLamp1 on;;set myLamp2 off;set myLampe3 on&lt;br /&gt;
This command line would switch myLamp3 immediately, but only after the mySwitch1 event myLamp1 and myLamp2 switch.&lt;br /&gt;
&lt;br /&gt;
== Renaming devices ==&lt;br /&gt;
&lt;br /&gt;
Finally we want to rename (for the exercise) another device: &#039;&#039;&#039;&#039;&#039;myLamp2&#039;&#039;&#039;&#039;&#039; should be &#039;&#039;&#039;&#039;&#039;myStandardLamp&#039;&#039;&#039;&#039;&#039;.  For this we use&lt;br /&gt;
 rename &amp;lt;oldName&amp;gt; &amp;lt;newName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should be noted that related notify statements are &#039;&#039;&#039;not&#039;&#039;&#039; updated automatically. So, before renaming, note the &#039;&#039;Probably associated with&#039;&#039; list at the bottom of the detail screen so that you do not forget any of your Notify during the following adjustment.&lt;br /&gt;
&lt;br /&gt;
So enter in the command box&lt;br /&gt;
 rename myLamp2 myStandardLamp&lt;br /&gt;
and then adjust &#039;&#039;n_mySwitch1&#039;&#039; by customizing the definition on its detail screen in the &#039;DEF&#039; section.&lt;br /&gt;
&lt;br /&gt;
After the change, the Notify must be&lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1,myStandardLamp $EVENT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem16.png]]&lt;br /&gt;
&lt;br /&gt;
== Scheduler - at ==&lt;br /&gt;
The next step is to set up a time control.&lt;br /&gt;
First of all, we want to ensure that &#039;&#039;myLamp1&#039;&#039; is switched off after one minute, such as a staircase light.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|To see the effect, first switch &#039;&#039;myLamp1&#039;&#039; to &#039;&#039;on&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
The FHEM device type &#039;&#039;at&#039;&#039; is available for time control. The command structure is&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; and &#039;&#039;&#039;&amp;lt;command&amp;gt;&#039;&#039;&#039; have the same function here as with notify. New here is only &#039;&#039;&#039;&amp;lt;timespec&amp;gt;&#039;&#039;&#039; (time specification), so the time specification. This is done in the notation &#039;&#039;HH:MM:SS&#039;&#039; or &#039;&#039;HH:MM&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To turn off &#039;&#039;&#039;&#039;&#039;myLamp1&#039;&#039;&#039;&#039;&#039; so &#039;&#039;&#039;in one minute&#039;&#039;&#039;, create the following &#039;&#039;at&#039;&#039;:&lt;br /&gt;
 define a_myLamp1 at +00:01:00 set myLamp1 off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem17.png]]&lt;br /&gt;
&lt;br /&gt;
Try it.&lt;br /&gt;
Will &#039;&#039;myLamp1&#039;&#039; be turned off after one minute?&lt;br /&gt;
Is an event generated during this process?&lt;br /&gt;
&lt;br /&gt;
If you want to see the detail view of the &#039;&#039;at&#039;&#039;, you have to hurry up: After a single execution, the &#039;&#039;at&#039;&#039; is automatically deleted. If FHEM was faster, you can create it again and specify a longer period of time if necessary. :-)&lt;br /&gt;
&lt;br /&gt;
With &amp;lt;timespec&amp;gt; you can omit the seconds and just write HH:MM. There are also several variants:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Variants of time specifications for &#039;&#039;at&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!notation&lt;br /&gt;
!explanation&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+00:02:00&lt;br /&gt;
|In two minutes; single execution&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|00:02:00&lt;br /&gt;
|At two minutes past midnight, i.e. at 00:02 and 0 seconds; one-time execution&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*00:02:00&lt;br /&gt;
|Daily at 00:02&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*00:02:00&lt;br /&gt;
|Every 2 minutes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|+*{3}00:02&lt;br /&gt;
|Three times, every two minutes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{3}00:02&lt;br /&gt;
|Three times at 00:02&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunset_rel()}&lt;br /&gt;
|Daily at sunset&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: right;&amp;quot;|*{sunrise(+120)}&lt;br /&gt;
|2 minutes (120 seconds) daily after sunrise&lt;br /&gt;
|}&lt;br /&gt;
*By specifying &#039;&#039;&#039;*&#039;&#039;&#039; a permanent repetition is defined. The repetitions continue until the &#039;&#039;at&#039;&#039; is deleted or disabled.&lt;br /&gt;
*By specifying &#039;&#039;&#039;+&#039;&#039;&#039; the specified time is no longer interpreted as an absolute time, but as a timer, after how many hours:minutes:seconds the command is executed.&lt;br /&gt;
*By specifying &#039;&#039;&#039;&#039;&#039;{n}&#039;&#039;&#039;&#039;&#039; the &#039;&#039;at&#039;&#039; will only be run n times.&lt;br /&gt;
*The functions &#039;&#039;&#039;&#039;&#039;{sunset_rel()}&#039;&#039;&#039;&#039;&#039; and &#039;&#039;&#039;&#039;&#039;{sunrise()}&#039;&#039;&#039;&#039;&#039; return the appropriate time. This is repeated daily by specifying &#039;&#039;&#039;&#039;&#039;*&#039;&#039;&#039;&#039;&#039;. The curly braces indicate that FHEM directly executes the contents of these braces as perl functions. &lt;br /&gt;
&lt;br /&gt;
For example, to switch off the garden lighting every day at sunrise, define something like&lt;br /&gt;
 define a_gardenLight_morning_off at *{sunrise()} set gardenLight off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18.png]]&lt;br /&gt;
&lt;br /&gt;
In the detail screen of an &#039;&#039;at&#039;&#039; the time of the next execution is displayed in the &#039;&#039;STATE&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
This info also appears in the room view if you show the &#039;&#039;at&#039;&#039; there:&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem18B.png]]&lt;br /&gt;
&lt;br /&gt;
== Event-driven timer start - notify und at ==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Time and Event Control with DOIF&#039;&#039;&#039;&lt;br /&gt;
Since the release of the original article in early 2014, another way of time and event control has been introduced. See: {{Link2CmdRef|Anker=DOIF}} for DOIF}}&lt;br /&gt;
As a last exercise we want to combine a  &#039;&#039;notify&#039;&#039; and an &#039;&#039;at&#039;&#039;. The timer should now not start when you enter the command in the command field, but when an event occurs.&lt;br /&gt;
&lt;br /&gt;
To do this we create a Stairwell: create the Dummy-Devices &#039;&#039;sw_Switch&#039;&#039; and &#039;&#039;sw_Light&#039;&#039; in the room &#039;&#039;Stairwell&#039;&#039;. To create the &#039;&#039;Stairwell&#039;&#039; room assign the room to the first device via the command field, then click on all other attributes in the detail screen:&lt;br /&gt;
 define sw_Switch dummy&lt;br /&gt;
 attr   sw_Switch room Stairwell&lt;br /&gt;
 attr   sw_Switch webCmd on&lt;br /&gt;
 define sw_Light dummy&lt;br /&gt;
 attr   sw_Light room Stairwell&lt;br /&gt;
&lt;br /&gt;
Now the Notify is missing, which reacts to &#039;&#039;sw_Switch:on&#039;&#039; and executes two commands: &lt;br /&gt;
*Switching on the staircase light with &amp;lt;code&amp;gt;set sw_Light on&amp;lt;/code&amp;gt;&lt;br /&gt;
*Start a timer that switches it off after one minute. So &amp;lt;code&amp;gt;define a1 at +00:01 set sw_Light off&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This will look like this (and must be entered in the command field as a single line):&lt;br /&gt;
 define n_sw_Switch_on notify sw_Switch:on &lt;br /&gt;
        set sw_Light on;;define a1 at +00:01 set sw_Light off&lt;br /&gt;
When the Notify is triggered, the staircase lighting is switched on as a command, as well as the definition of a timer that switches it off a minute later.&lt;br /&gt;
Is it working?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem19.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since this is quite bulky, there is a slightly simpler alternative:&lt;br /&gt;
 define n_sw_Switch_on notify sw_Switch:on set sw_Light on;;sleep 60;;set sw_Light off&lt;br /&gt;
&lt;br /&gt;
Some hardware systems also offer the command &#039;&#039;on-for-timer&#039;&#039;, which can be used to write alternatively&lt;br /&gt;
 define n_sw_Switch_on notify sw_Switch:on set sw_Light on-for-timer 60&lt;br /&gt;
&lt;br /&gt;
== What&#039;s next? ==&lt;br /&gt;
You have now been introduced to:&lt;br /&gt;
* Creating FHEM devices with &#039;&#039;&#039;define&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Events&#039;&#039;&#039; and the Event Monitor&lt;br /&gt;
* Switching Devices with &#039;&#039;&#039;set&#039;&#039;&#039;&lt;br /&gt;
* Modifying Devices with &#039;&#039;&#039;modify&#039;&#039;&#039;, &#039;&#039;&#039;rename&#039;&#039;&#039; and &#039;&#039;&#039;delete&#039;&#039;&#039;&lt;br /&gt;
* Setting and editing &#039;&#039;&#039;Attributs&#039;&#039;&#039;&lt;br /&gt;
* Event driven actions by &#039;&#039;&#039;notify&#039;&#039;&#039;&lt;br /&gt;
* Time-controlled switching with &#039;&#039;&#039;at&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So you know the most basic mechanisms of FHEM. Details of these commands can be found in the FHEM command reference {{Link2CmdRef}}&lt;br /&gt;
&lt;br /&gt;
In the commandref you will find the description of all FHEM commands as well as the list of all device types that can be integrated in FHEM.&lt;br /&gt;
&lt;br /&gt;
You will find that &amp;quot;real&amp;quot; FHEM devices look exactly like the dummy devices you have already seen here. The main difference is that you no longer have to define the available commands yourself using &#039;&#039;attr webCmd&#039;&#039;, since they are already predefined by the FHEM device. And events are triggered not only when you click on the FHEM web frontend, but also when the physical device (i. e. the motion sensor or the light switch on the wall) is triggered.&lt;br /&gt;
&lt;br /&gt;
Once you have paired your first devices with FHEM, look at the event monitor to see when which events will be triggered.&lt;br /&gt;
&lt;br /&gt;
A more comprehensive introduction to FHEM can be found in the document [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung-mit-FHEM] (German)&lt;br /&gt;
&lt;br /&gt;
The basics of the programming language Perl, which are important for FHEM, can be read in the first chapters of a Perl book or in various free online tutorials.&lt;br /&gt;
&lt;br /&gt;
Have fun and success with FHEM!&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
This is the english version of [[Erste Schritte in FHEM]]&lt;br /&gt;
* Last edit German article: {{REVISIONDAY2: Erste Schritte in FHEM}}.{{REVISIONMONTH: Erste Schritte in FHEM}}.{{REVISIONYEAR: Erste Schritte in FHEM}} &lt;br /&gt;
* Last edit English article: {{REVISIONDAY2: First steps in FHEM}}.{{REVISIONMONTH: First steps in FHEM}}.{{REVISIONYEAR: First steps in FHEM}}&lt;br /&gt;
* &#039;&#039;&#039;Newer&#039;&#039;&#039; Version is: &#039;&#039;&#039;{{#ifexpr: {{REVISIONTIMESTAMP: Erste Schritte in FHEM}} &amp;gt; {{REVISIONTIMESTAMP: First steps in FHEM}}| dt. Version|engl. Version}}&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afo-solar</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:Erste_Schritte_in_FHEM&amp;diff=39726</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=39726"/>
		<updated>2024-12-05T07:14:12Z</updated>

		<summary type="html">&lt;p&gt;Afo-solar: /* Attribut &amp;quot;disable&amp;quot; */&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;br /&gt;
&lt;br /&gt;
{{Anker|neue_Antwort1}}&lt;br /&gt;
::::Hallo Uli,&lt;br /&gt;
&lt;br /&gt;
::::nachstehend 2 Vorschläge, wie ich einen Verweis auf die Zeit- und Eventsteuerung mit DOIF einbauen möchte.&lt;br /&gt;
&lt;br /&gt;
::::Welchen Vorschlag bevorzugst Du?&lt;br /&gt;
&lt;br /&gt;
::::LG --[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 18:55, 16. Mär. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Vorschlag 1&amp;lt;/b&amp;gt;&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;
=== Zeit- und Ereignissteuerung mit DOIF ===&lt;br /&gt;
Seit erscheinen des ursprünglichen Artikels Anfang 2014, ist eine neue Möglichkeit der Zeit- und Ereignissteuerung eingeführt worden.&lt;br /&gt;
&lt;br /&gt;
Siehe: [[DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erläuterungen#Erste_Schritte_mit_DOIF:_Zeit-_und_Ereignissteuerung|&#039;&#039;&#039;Erste Schritte mit DOIF: Zeit- und Ereignissteuerung&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
Der Autor des usprünglichen Artikel hat freundlicherweise zugestimmt den Artikel mit einem Link zu ergänzen.&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Vorschlag 2&amp;lt;/b&amp;gt;&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zeit- und Ereignissteuerung mit DOIF&#039;&#039;&#039;&lt;br /&gt;
Seit erscheinen des ursprünglichen Artikels Anfang 2014, ist eine neue Möglichkeit der Zeit- und Ereignissteuerung eingeführt worden.&lt;br /&gt;
&lt;br /&gt;
Siehe: [[DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erläuterungen#Erste_Schritte_mit_DOIF:_Zeit-_und_Ereignissteuerung|&#039;&#039;&#039;Erste Schritte mit DOIF: Zeit- und Ereignissteuerung&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
Der Autor des usprünglichen Artikels hat freundlicherweise zugestimmt den Artikel mit einem Link zu ergänzen.}}&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;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:Für mich sind beide Varianten ok. Wobei ich nicht sicher bin, ob eine Platzierung unter &amp;quot;Wie geht es weiter?&amp;quot; der Universalität von DOIF nicht gerechter würde. Unter &amp;quot;Timer bei einem Event starten...&amp;quot; wird die Bedeutung mMn ein wenig reduziert. Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 12:04, 29. Mär. 2017 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Änderungen am Artikel &amp;quot;Erste Schritte in FHEM&amp;quot; ==&lt;br /&gt;
Betrifft folgende Änderungen des Users Andies: https://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;amp;type=revision&amp;amp;diff=21496&amp;amp;oldid=21488&lt;br /&gt;
&lt;br /&gt;
Diskussion wurde nachträglich zur besseren Nachvollziehbarkeit von [[Benutzer_Diskussion:Andies]] hierin verlagert. --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 10:41, 12. Mai 2017 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Benutzer_Diskussion:Andies]] schlägt vor, diesen Abschnitt zu löschen. Die Sachen sind ja (in meinen Augen) umgesetzt und durch, momentan müllt das nur die Diskussionsseite zu. Was meint Ihr? --[[Benutzer:andies|Andreas]] 08:21, 03. März 2019 (CEST)&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
:&#039;&#039;Dagegen&#039;&#039; - Für weitere / andere Änderungen kann ja gern (wir üblich) ein neuer Abschnitt begonnen werden. --[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 16:46, 3. Mär. 2019 (CET)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hallo!&lt;br /&gt;
&lt;br /&gt;
Zunächst danke für Deine Mitarbeit am Wiki und bei FHEM. Aber -wie so oft im Leben- gibt es nur Rückmeldungen bei &amp;quot;Problemen&amp;quot; ;-) :&lt;br /&gt;
&lt;br /&gt;
Hast Du Deine Änderungen am Artikel [[Erste Schritte in FHEM]], so wie im Vorwort zum Artikel erbeten, mit dem Verfasser Uli abgestimmt? &lt;br /&gt;
&lt;br /&gt;
Die Änderungen widersprechen deutlich der Intention und dem Konzept des Artikels. Der Artikel soll nur einen kurzen Einstieg in FHEM geben; quasi einen &amp;quot;Vorgeschmack&amp;quot; auf FHEM liefern und nicht das Einsteiger-Pdf ersetzen.&lt;br /&gt;
&lt;br /&gt;
Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 13:51, 9. Mai 2017 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ja, habe ich abgestimmt. Ich hatte ihm vor einer Woche eine Mail geschrieben und er hat daraufhin OK gesagt, aber darum gebeten, es möglichst kurz zu halten. Kurze Nachfrage: Was genau ist der &#039;&#039;deutliche&#039;&#039; Widerspruch zur Intention?&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:andies]] 14:09, 9. Mai 2017&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
:Hallo andies!&lt;br /&gt;
:[[Erste_Schritte_in_FHEM#Grundbegriffe:_Device_und_Internal.2C_Attribut.2C_Reading]] geht meiner Meinung nach viel zu sehr in die Tiefe und ist gerade für einen groben Überblick nicht notwendig. Finde das persönlich eher verwirrend als hilfreich. Was interessiert mich bspw. beim ersten Kontakt mit FHEM, warum 98 vor einem Modul steht? Wofür muss man das für den schnellen Überblick wissen? Variablen, Zeichenketten, STATE, Readings, Internal, Attribut im &amp;quot;Vorwort&amp;quot; als Grundbegriffe schrecken mich ab. Das kommt doch im Artikelverlauf von selbst und muss man nicht schon im Vorhinein lesen. Der &amp;quot;device&amp;quot;-Erläuterung kann ich hingegen eine gewisse Notwendigkeit abgewinnen. &lt;br /&gt;
:Inhaltlich bin ich nicht im Detail eingestiegen, aber &amp;quot;Readings sollen während der Laufzeit vom Anwender&amp;quot; halte ich als Aussage für sehr gefährlich.&lt;br /&gt;
:Erlaube mir mal eine Gegenfrage: Hast Du beim Einstieg das Einsteiger-Pdf gelesen? Oder wie bist Du vorgegangen?&lt;br /&gt;
:Wenn Du die Änderungen mit Uli abgestimmt hast, ist das Ok und ich bin ruhig :-).&lt;br /&gt;
:Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 15:28, 9. Mai 2017 (CEST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
::Danke für die konstruktive Antwort; dann lass uns diskutieren! Ich erzähle mal, wieso ich das geschrieben habe und dann schauen wir, was wir am Ende daraus machen. Das wird jetzt aber ein längerer Text (Wir können das auch im Forum diskutieren, wäre das besser? Wenn ja, dann nimm einfach den Link, den ich da angegeben habe: https://forum.fhem.de/index.php/topic,71397.0.html). Ich habe mit FHEM angefangen, weil ich ein ganz konkretes Problem hatte, dass ich mit anderen Servern nicht habe lösen können (Garage übers Internet schalten, Rolladen auch) und ich glaube, dass das typisch ist - jedenfalls war das der Eindruck, den ich von einem Treffen in Berlin hatte. Dann habe ich die Einsteiger-PDF gelesen und hatte &amp;quot;irgendwie&amp;quot; Ahnung, wie das geht. Dann habe ich meine Rolladen in Griff gehabt und eigentlich wäre dann alles gut gewesen. Wäre ich da stehen geblieben, hätte ich den Wiki-Eintrag &#039;&#039;nicht&#039;&#039; verändert. &lt;br /&gt;
:: Der nächste Schritt war dann, dass ich (wie wahrscheinlich einige hier) Blut geleckt hatte. Nun sollte also auch noch der Stromverbrauch erfasst werden etc. Und auf einmal fingen die Probleme an. Ich habe zum Beispiel aus dem Wiki-Eintrag nicht verstanden, was überhaupt ein Attribut ist. Ständig wollte ich mit ReadingsVal die Werte der Attribute auslesen und bekam auch mal den Anpfiff: &amp;quot;Lies mal die commandref&amp;quot;. Wenn man aber noch nie mit Perl programmiert hat, kapiert man das auch nach dem zehnten Lesen nicht. Hinzu kommt, dass einige Dinge so erklärt sind, dass für einen Anfänger ein Verständnis nahezu unmöglich wird; einige Wiki-Einträge sind ja wirklich verwaist. Also habe ich überlegt: Warum kapiere ich das nicht? Dann wurde mir klar, weil zum einen recht viele kleine Schusselfehler in der Einleitung stehen (zum Beispiel &amp;quot;Reading &#039;STATE&#039;&amp;quot;, wo es doch ein Internal ist oder man das Reading &#039;state&#039; meint etc pp - so etwas verwirrt einen Anfänger total!) und zum anderen weil mehrere Grundbegriffe nicht vernünftig erklärt sind (zum Beispiel: &amp;quot;Nur Readings können von Menschen gelesen werden&amp;quot; - Internals auch!). Hinzu kommt, dass in der Einleitung zwar steht, was man genau tun soll (&amp;quot;tipp mal attr XY room sowieso&amp;quot; ein und dann siehst du was), aber nicht erklärt wird, &#039;&#039;was&#039;&#039; man da eigentlich macht - nämlich ein Attribut setzen und einen Wert zuweisen. Deshalb habe ich mich dran gesetzt und überlegt, was &#039;&#039;&#039;für mich&#039;&#039;&#039; wichtig gewesen wäre. &lt;br /&gt;
:: Nun zur Debatte. Was für mich wichtig ist, kann für andere verwirrend sein. Sehe ich sofort ein. Also lass uns im Detail diskutieren, was am Text verändert wird (nochmal: eventuell im Forum?). Das mit der Zeichenkette verstehe ich, das mit den Definitionen der Grundbegriffe finde ich aber wesentlich. Wir sollten vielleicht so debattieren: Was wollen wir beim Anfänger erreichen? Welches Vorwissen müssen wir voraussetzen, was nicht? Ich gehe davon aus, dass der typische Anwender mit einem ganz konkreten Problem zu FHEM stößt und zuerst das gelöst haben will. Dass er wenige Programmierkenntnisse besitzt und auch bereit ist, gewisses Leid in Kauf zu nehmen. Wir können aber nicht voraussetzen (auch wenn das der eine oder andere meint), dass er die gesamte Einsteiger-PDF verstanden, die commandref gelesen und verstanden hat und außerdem mit RegEx problemlos umgehen kann. Wenn wir uns bei der Beschreibung der Person, die den Wiki-Eintrag liest, einig sind, sollte sich ein besserer Text ergeben. Das man dabei sinnvollerweise vermeidet, bereits in der Einleitung eine Debatte zum Sinn und Unsinn von DOIF zu haben, ist auch mir Anfänger klar.&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
:::Zum Diskussionsort: Mir ist es letztlich gleich. Hier wird es vmtl. nur ruhiger und mit weniger Beteiligung als im Forum zu gehen.&lt;br /&gt;
&lt;br /&gt;
:::Also bist Du zum Einstieg mit dem Artikel &amp;quot;Erste Schritte in FHEM&amp;quot; problemlos klargekommen; erst als es weiter in die Tiefe ging, kamen die weiteren Probleme!? Daraus schließe ich zunächst einmal frech, dass der Artikel seinen Zweck erfüllt hat: Ein &amp;quot;Appetitanreger&amp;quot; auf FHEM, der erste Erfolgserlebnisse und erstes Verständniss schafft. Mehr soll er meiner Meinung nach auch nicht. Der Einsteiger soll sich in kurzer Zeit einen Überblick verschaffen (Zeitbedarf max. 60 Minuten): Ist FHEM etwas für mich? Wie geht das grundlegend? Wenn man neugierig geworden ist, dann weiterlernen.&lt;br /&gt;
&lt;br /&gt;
:::Tippfehler und Co. (state vs. STATE) sollten im Artikel natürlich behoben werden. Mit Deinen weiterführenden Erläuterungen insb. Grundbegriffe, die Du nach den ersten Erfolgserlebnissen vermisst hast, steigt der Zeitbedarf für die Durcharbeitung und auch die Komplexität des Artikels deutlich. Er verliert damit eben seine eigentliche Intention. Das, was unter Grundbegriffe steht braucht man zum Einstieg nicht und verwirrt. Er entwickelt sich mMn dadurch in Richtung universellen Einsteiger-PDF Ersatz. Weitergehende Informationen könnte man aus dem Artikel ja verlinken statt sie darin aufzunehmen; aber selbst dabei bin ich zweifelnd, da es schnell zum Verzetteln in Details führt.&lt;br /&gt;
&lt;br /&gt;
:::Auch Deine Definition der Grundbegriffe ist, wie Du im Forum liest, nicht unumstritten. Und die Bedenken kommen nicht von irgendjemanden, sondern von einem der Kern-Developer. Einen Punkt hatte ich gestern auch schon herausgepickt (Readings), den ich persönlich für gefährlich oder eher sogar falsch halte. Zudem existieren schon Definitionen der Begriffe im Wiki, die man verlinken könnte. Warum sollten wir 2 Definitionen im Wiki pflegen? Das ist zu pflegeaufwendig. Das ist aber auch eine Macke von mir: [https://wiki.fhem.de/w/index.php?title=SIGNALduino&amp;amp;diff=prev&amp;amp;oldid=21335] würde ich z.B. nicht so ausführlich machen, sondern auf [[Trick_der_Woche#CUL_.26_CO_.C3.BCber_Serial_ID-einbinden]] verlinken. Dadurch sind Fehler/Änderungen nur an einer Stelle zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
:::Wo steht eigentlich: &amp;quot;Nur Readings können von Menschen gelesen werden&amp;quot; ?&lt;br /&gt;
&lt;br /&gt;
:::Was für Dich wichtig ist, liegt doch an Deinem Wissensstand. Zunächst hat der Einsteiger-Artikel gereicht. Dann ist man weiter und liest das Pdf. Und dann kommen Fragen und noch mehr Fragen. Damit bin ich wieder beim Ausgangspunkt, dass Deine Erläuterungen schon für Fortgeschrittenere sind und nicht in den genannten Artikel sollten ;-).&lt;br /&gt;
&lt;br /&gt;
:::Was ich voraussetze? Nichts außer Lernbereitschaft. Dazu gehört auch, dass man sich zumindest mal Grundzüge von Perl anschaut. (Bin selbst kein Entwickler und werde keiner, sondern nur Anwender) Ohne Regex und Co. ist FHEM schwer  &amp;quot;verdaulich&amp;quot;. Das z.B. tritt mir mittlerweile zu sehr in den Hintergrund.&lt;br /&gt;
&lt;br /&gt;
:::Mir persönlich wäre es am Liebsten den Einsteiger-Artikel in die Kurzform zurückzubringen und Deine Überlegungen möglichst redudanzfrei in weiterführende Artikel zu packen oder in Ulis Einsteiger-Pdf einzubringen, falls er Hilfe mag. Was ich nicht möchte ist: Dich entmutigen und von der Mitarbeit abbringen, das wird nämmlich schnell so aufgefasst. Und meine Meinung muss auch nicht die Richtige sein, wenn es die überhaut gibt.&lt;br /&gt;
&lt;br /&gt;
:::Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 11:14, 10. Mai 2017 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::PS: (Langfristiges) Ziel ist bspw. [[FHEM_Installation_Windows]] und [[Erste Schritte in FHEM]] so zu gestalten, dass als Einsteiger ein Test von FHEM angefangen bei Installation bis zum Ende der ersten Experimente in ca. 90 Minuten möglich ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::::Was ist davon zu halten, wenn wir den Grundbegriffe-Artikel zu einem Absatz mit ein, zwei Sätzen zusammenkürzen und den Inhalt auf weiterführende Seiten verschieben? Das wäre dann, in schlechtem Deutsch von der Idee her so: &amp;quot;Also wir legen jetzt mal los und wir brauchen dazu Attribute und Readings (was das ist, kannst du HIER nachlesen), aber erst einmal reicht &amp;lt;XYZ&amp;gt;&amp;quot;? Das können wir bei den anderen Abschnitten, bei denen Du Probleme hast, auch machen. Ich würde mir dann mal was überlegen und das hier vorstellen? Es wäre aber wegen der reparierten Schreibfehler vermutlich einfacher, wenn wir diesen Abschnitt _bearbeiten_ und _nicht_ zurückstellen, denn ich weiß nicht mehr, welche Fehler ich genau geändert habe.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
:::::Ich mache nichts einfach rückgängig, wir diskutieren doch: Ändere es einfach einmal so ab, wie Du es dann machen würdest. Im Übrigen bin ich nicht der Nabel der Welt, aber habe ein Meinung :-) . Am meisten stören mich die &amp;quot;Grundbegriffe&amp;quot;. --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 16:08, 10. Mai 2017 (CEST)&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::::PS Aus dem Wiki: &amp;quot;Daten, welche von einem Gerät gelesen werden und in FHEM in einer für Menschen verständlichen Form zur Verfügung gestellt werden können, werden Readings genannt&amp;quot;. Der Logiker schließt daraus, dass Internals für Menschen nicht verständlich sind (jedenfalls habe ich mich das wirklich gefragt: gilt etwa Readings = UTF-8, Internals = binär o.Ä?!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
:::::Halte ich für eine erhebliche Überinterpretation der Aussage. Es wird doch nirgends eine Verbindung oder gar Vergleich zwischen Internals und Readings hergestellt und schon gar nicht, in welcher ihrer Merkmale/Eigenschaften aus Anwendersicht ein Gegensatz besteht. Eine klare und eindeutige Definition der Begriffe ist nicht so einfach und letztlich auch im Fluß. Zudem versuchst Du Begrifflichkeiten, die mMn eher aus Entwicklersicht entstanden sind, in ein Schema der Anwendersicht zu pressen. Ein bedeutendes Gegenbeispiel Deiner Definition finde ich beispielsweise auf die Schnelle noch bei Internals. Du schreibst: &amp;quot;Internals sollen vom Nutzer nicht direkt verändert werden&amp;quot;. Das ist so vereinfacht in einem wesentlichen Punkt falsch. Das DEF in den Internals soll gerade von Einsteigern genutzt werden und nicht die manuelle Editierei in der fhem.cfg (siehe bspw. [[Konfiguration#Objektdetails]]). Die Nutzung des DEF wollen wir gerade den Einsteigern krampfhaft vermitteln; jetzt verbieten wir es aber bereits in der Definition im &amp;quot;Vorwort&amp;quot; des Einsteiger-Artikels. Das verwirrt sicherlich. Wenn Du das dann gerade ziehen willst, musst Du noch mehr erklären. Das führt zu mehr Verwirrung. Darum eben besser Definitionen weglassen. --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 16:08, 10. Mai 2017 (CEST)&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
::::::Ich habe jetzt erst einmal Änderungen vorgenommen, wie sie hier oben besprochen wurden. Genauer habe ich folgendes gemacht: Ich habe den separaten Abschnitt &amp;quot;Grundbegriffe&amp;quot; entfernt und Teile davon, die nicht technisch sind, in den fortlaufenden Text integriert. Das mit den Zeichenketten habe ich weggelassen.  Ansonsten habe ich bei den ersten beiden Befehlen in FHEM etwas mehr Wert darauf gelegt, was man genau da eigentlich eingibt und welche Teile dieser Befehlszeile Syntax sind und wo man (mehr oder weniger) schreiben kann, was man will.  --[[Benutzer:andies|Andreas]] ([[Benutzer Diskussion:andies|Diskussion]]) 18:51, 20. Mai 2017 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Attribut &amp;quot;disable&amp;quot; ==&lt;br /&gt;
Hallo alle,&lt;br /&gt;
&lt;br /&gt;
zum Einstieg in FHEM habe ich den Text &amp;quot;Erste Schritte in FHEM&amp;quot; gelesen und fand, dass es Spass macht, FHEM so auszuprobieren und fand den Text und die Dummy-Experimente auch ziemlich gut. Ich hatte am Anfang Schwierigkeiten, die Attribute über die Detailansichten zu ändern, am nächsten Tag habe ich dann gemerkt, dass im Text immer steht, dass man auf den Button &amp;quot;attr&amp;quot; klicken soll. Das war also eigene Dummheit ...&lt;br /&gt;
&lt;br /&gt;
Aber an einer Stelle, denke ich sollte der Text geändert werden. Nämlich dort, wo von n_mySwitch1_off das Attribut disable auf 1 gesetzt werden soll. Das geht beim ersten Mal gar nicht über die Detailansicht, da es dort anfangs nicht auftaucht. Daher habe ich den entsprechenden Text geändert auf: &amp;quot;Geben Sie dazu in der Kommandozeile attr n_mySwitch1_off disable 1 ein. Dadurch taucht in der Detailansicht des Notify im unteren Bereich das Attribut disable auf. Dieses kann man nun auf zwei Arten ändern, entweder über die Kommandozeile oder über die Detailansicht (dort den Wert 1 oder 0 auswählen, dann attr klicken).&amp;quot; Ich hoffe das ist ok. Ulrich Maas kann man zur Zeit - soweit ich das verstanden habe - nicht kontaktieren, deshalb habe ich den Änderungsvorschlag direkt in den Text geschrieben.&lt;br /&gt;
&lt;br /&gt;
Grüße Felix&lt;br /&gt;
--[[Benutzer:Afo-solar|Afo-solar]] ([[Benutzer Diskussion:Afo-solar|Diskussion]]) 14:55, 22. Nov. 2024 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:Alternativ kann das Attribut &amp;quot;disable&amp;quot; (wie alle anderen relevanten Attribute auch) aber auch in der Drop-Down Liste der Attribute ausgewählt werden; dann lässt sich auch ohne Eingabe eines Befehls der gewünschte Wert setzen. --[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 18:40, 22. Nov. 2024 (CET)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:Hallo Peter, du hast mich überzeugt. Dass man das Attribut aus der Drop-Down-Liste auswählen kann, hatte ich übersehen. Den Teil des &amp;quot;Erste-Schritte&amp;quot;-Texts habe ich nochmals geändert und die Drop-Down-Liste explizit erwähnt.&lt;br /&gt;
Grüße Felix&lt;br /&gt;
--[[Benutzer:Afo-solar|Afo-solar]] ([[Benutzer Diskussion:Afo-solar|Diskussion]]) 08:14, 05. Dez. 2024 (CET)&lt;/div&gt;</summary>
		<author><name>Afo-solar</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=39725</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=39725"/>
		<updated>2024-12-05T07:09:26Z</updated>

		<summary type="html">&lt;p&gt;Afo-solar: Die vorigen Änderungen habe ich zum Teil rückgängig gemacht, jedoch jetzt explizit die Drop-Down-Liste neben &amp;quot;attr&amp;quot; erwähnt.&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 [[Diskussion:Erste Schritte in FHEM|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;
*Links daneben befindet sich ein umrahmtes &amp;quot;+&amp;quot;-Symbol, über das Sie ein mehrzeiliges Eingabefeld erreichen können; mehr dazu später.&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 im Detail in der FHEM-Befehlsreferenz {{Link2CmdRef|Lang=de|Anker=allowed}}, 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 oder klicken alternativ einfach auf den gleichnamigen Link.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Das Grundgerüst von FHEM sind &amp;quot;devices&amp;quot;. Typische Devices sind beispielsweise Funksteckdosen, Rolladenmotoren, Temperaturmessgeräte, Magnetventile usw. Aber andere Dinge, die man auf den ersten Blick nicht als physisches Gerät bezeichnen würde, sind Device: So etwa ist die Benutzeroberfläche von FHEM selbst ein device (&amp;quot;FHEMWEB&amp;quot;), ebenso gibt es Devices ohne physische Geräte, die dazu benutzt werden können, um eine Variable zu speichern. Ein sehr einfaches Device, dummy genannt, legen wir jetzt an.&lt;br /&gt;
&lt;br /&gt;
Das dummy devices ist insofern ein besonderes Objekt, weil es nicht unbedingt ein korrespondierendes physisches Gerät (eine physische Lampe, ein Rolladen, ein Magnetventil) benötigt. So können Sie diese Schritte 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 physisch vorhandenen 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 mySwitch1 dummy&lt;br /&gt;
&amp;quot;define&amp;quot; ist der FHEM-Befehl, &amp;quot;mySwitch1&amp;quot; der zukünftige Name des devices und &amp;quot;dummy&amp;quot; bezeichnet den Typ. Die Worte define und dummy gehören zur Befehlssyntax von FHEM und können nicht verändert werden, mySwitch1 ist (mehr oder weniger) frei wählbar. Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen FHEM-Device &#039;&#039;mySwitch1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Jedes Device hat genau einen &amp;quot;Typ&amp;quot;.  Dieser Typ legt gleichzeitig die Perl-Befehlsdatei (man spricht präziser vom &amp;quot;Modul&amp;quot;) fest, in der bestimmte Routinen und Eigenschaften festgehalten sind. Ist etwa ein Device vom Typ dummy, so weiß FHEM, dass die Routinen und Eigenschaften im Modul 98_dummy.pm liegen. (Die Zahl 98 hatte früher eine Bedeutung, heute ist das nicht mehr der Fall, aus historischen Gründen wird sie aber immer noch verwendet.)}}&lt;br /&gt;
{{Hinweis|Diese Einleitung soll Ihnen ein Gefühl für die Funktionsweise von FHEM vermitteln, ohne dass Ihnen konkrete physische Geräte (spezielle Funk- oder WLAN-Steckdosen, 433MHz-Sender,  Homematic-Lampen, ZWave-Aktoren usw.) zur Verfügung stehen müssen. Um für diesen Kurs ein rein &amp;quot;virtuelles Gerät&amp;quot; nutzen zu können, greifen wir auf ein dummy-device zurück. Ein &#039;&#039;dummy&#039;&#039; wird Ihnen auch später noch häufig begegnen, wenn es darum geht, einen Testaufbau zu erläutern oder zur Steuerung eines Programmablaufs Informationen userseitig verfügbar zu machen. Beachten Sie dabei aber bitte immer, dass Ihnen später auch &#039;&#039;&#039;sehr viele andere Möglichkeiten&#039;&#039;&#039; offenstehen, um Informationen abzuspeichern, auszuwerten oder anzuzeigen, sobald Sie FHEM-Geräte für physische Hardware angelegt haben. Statt hierfür Geräte des Typs &#039;&#039;dummy&#039;&#039; zu verwenden, wird es für Sie zukünftig häufig übersichtlicher sein, Informationen zu einem Gerät direkt bei diesem zu verwalten. Neben den Attributen und Readings, die die hierfür jeweils genutzen Module bereits automatisch bereitstellen, können Sie z.B. bei allen Devices weitere Attribute (userattr) oder Readings (setreading) selbst in fast beliebigem Umfang generieren und darin Ihre eigenen Informationen bereitstellen.}}&lt;br /&gt;
&lt;br /&gt;
Devices haben einen &amp;quot;Zustand&amp;quot;, der sich im Zeitablauf ändert und den FHEM registriert. So ist beispielsweise ein Fenster offen, ein Rolladenpanzer geschlossen und eine Funksteckdose hat Spannung. Ein Zustand muss dabei nicht exakt eine Variable beinhalten (Fenster entweder &amp;quot;offen&amp;quot; oder &amp;quot;geschlossen&amp;quot;), ein Zustand kann auch durch mehrere Variablen beschrieben werden (der Zustand eines Raspberry-Systems, device-type sysmon, umfasst beispielsweise die CPU-Frequenz, die CPU-Temperatur, den load und vieles mehr). &lt;br /&gt;
&lt;br /&gt;
Dieser Zustand wird in FHEM durch insgesamt drei Größen erfasst. Diese Größen heißen Internals, Attribute und Readings. Es wäre jetzt zu früh, auf die Bedeutung der drei Begriffe im Detail einzugehen, aber folgende Anmerkungen sind für die nachfolgenden Schritte wichtig:&lt;br /&gt;
*&#039;&#039;Internals&#039;&#039; enthalten ganz grundlegende Informationen zu dem device. Sie werden vom Nutzer in den seltensten Fällen direkt bearbeitet (meist nur bei der Einrichtung des devices).&lt;br /&gt;
*&#039;&#039;Attribute&#039;&#039; sollen das Verhalten des devices steuern. Sie können vom Anwender typischerweise verändert (oder erst angelegt) werden. &lt;br /&gt;
*&#039;&#039;Readings&#039;&#039; besitzen im Gegensatz zu den beiden anderen Größen einen Zeitstempel. Hier werden üblicherweise Messwerte des Gerätes erfasst. &lt;br /&gt;
&lt;br /&gt;
Verwirrend für einen Anfänger kann sein, dass manchmal Internals wie auch Readings mit gleichem Namen (STATE und state) existieren können. Allerdings unterscheidet Perl zwischen Groß- und Kleinschreibung!&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;
Im nächsten Schritt wollen wir Geräte ordnen und geeignet zusammenfassen. Beispielsweise könnten Sie es für sinnvoll erachten, die Geräte, die sich physisch (tatsächlich) in einem Raum befinden, auch in FHEM entsprechend anzuordnen. In einem &amp;quot;Schlafzimmer&amp;quot; sollen dann also entsprechende devices &amp;quot;Rolladen&amp;quot;, &amp;quot;Zeitschalter&amp;quot; und &amp;quot;Radios&amp;quot; zu finden sein. Sie können aber auch andere Zuordnungen vornehmen; man könnte etwa alle Messinstrumente wie Thermometer, Stromzähler und Feuchtigkeitsfühler in einem (eventuell nur logisch und nicht physisch existierenden) Raum &amp;quot;Messinstrumente&amp;quot; erfassen. Der Name eines Raumes ist dabei beliebig. &lt;br /&gt;
&lt;br /&gt;
Um dies zu tun, müssen Sie allen devices, die zum Raum gehören sollen, ein &amp;quot;Attribut&amp;quot; (siehe oben) hinzufügen. Dieses Attribut heißt room und muss als Wert den Namen des Raumes bekommen. Versuchen wir dies für unseren dummy. Hierzu verwenden Sie folgenden Befehl (abschließen der Eingabe mit {{Taste|Enter}}):&lt;br /&gt;
 attr mySwitch1 room Training&lt;br /&gt;
&lt;br /&gt;
Durch diesen Befehl wird dem Device &#039;&#039;mySwitch1&#039;&#039; das Attribut &#039;&#039;room&#039;&#039; mit dem Wert &#039;&#039;Training&#039;&#039; hinzugefügt. Wieder gehören attr, mySwitch1 und room zur Befehlssyntax von FHEM und können nicht verändert werden, Training ist frei wählbar. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mySwitch1&#039;&#039; gehört jetzt zum room &#039;&#039;Training&#039;&#039;. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden. Klicken Sie einmal auf den Raum &#039;&#039;Training&#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;mySwitch1&#039;&#039;, unseren dummy. &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;mySwitch1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
Unser dummy wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt. Diese Typbezeichnung können Sie ebenfalls ändern, wenn Sie ein weiteres Attribut &amp;quot;group&amp;quot; hinzufügen und einen (ebenfalls frei wählbaren) Namen vergeben: Gruppen sortieren devices innerhalb eines Raumes. &lt;br /&gt;
&lt;br /&gt;
Anmerkung: Wenn Sie einen Raum löschen wollen, so tun Sie dies, indem Sie sämtliche devices aus dem Raum entfernen. Für unser Beispiel des Raums &#039;&#039;Training&#039;&#039; bedeutet es, dass in allen devices das Attribut room entfernt wird. Der Raum &#039;&#039;Training&#039;&#039; verschwindet dann von alleine. &lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySwitch1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySwitch1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Auch hier handelt es sich um ein Attribut mit dem Namen webCmd und den Werten on:off, das dem device &#039;&#039;mySwitch1&#039;&#039; hinzugefügt wird. 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 Raum &#039;&#039;Training&#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;mySwitch1&#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;.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySwitch1&#039;&#039; noch einmal aus. Achten Sie beim Schalten auf die Readings: Neben dem Internal &#039;&#039;STATE&#039;&#039; gibt es ein Reading gleichen Namens, das aber (siehe oben: Grundbegriffe; Perl unterscheidet zwischen Groß- und Kleinschreibung) mit einem Zeitstempel versehen ist.  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;
Devices kommunizieren über so genannte &#039;&#039;Events&#039;&#039; (Ereignisse) miteinander. Ein device sendet ein Event an FHEM und FHEM verteilt dieses Event an alle devices. Diese devices wiederum entscheiden dann, ob und wie sie auf das Event reagieren. Das Verständnis von Events und wie sie aufgebaut sind ist elementar und wir werden sie noch oft benötigen. Wir wollen daher Events ein wenig näher kennenlernen und uns dazu den Eventmonitor anschauen. Dieser Eventmonitor zeigt alle aktuellen Events in FHEM an. &lt;br /&gt;
&lt;br /&gt;
Öffnen Sie dazu in Ihrem Browser ein zusätzliches Fenster, in dem Sie neben FHEM 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;mySwitch1&#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;
Schalten wir &#039;&#039;mySwitch1&#039;&#039;, so löst unser device ein Event aus und FHEM verteilt es an alle anderen devices. Bei jeder Betätigung des Schalters erscheint ein neues 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;
Im Eventmonitor wird ein Event immer durch einen Zeitstempel beschrieben. Es folgen der Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), der Name des Device, welches das Ereignis auslöst (hier &#039;&#039;mySwitch1&#039;&#039;) und zuletzt der ausgelöste Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Andere FHEM-Geräte (beispielsweise eine Fernbedienung oder ein Funkschalter an der Wand) erzeugen bei jedem Tastendruck oder bei Klick einen Event. Diese Events erscheinen ebenfalls im Event monitor.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySwitch1&#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 mySwitch1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySwitch1 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;myLamp1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySwitch1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLamp1 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 Training 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;myLamp1&#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;myLamp1&#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. Bei einem Klick in das Eingabefeld neben &#039;&#039;room&#039;&#039; öffnet sich eine Dialogbox mit allen in FHEM bereits angelegten Räumen. Durch Anklicken der Raumnamen können Sie ein oder mehrere Räume auswählen. Wählen Sie den Raum &#039;&#039;Training&#039;&#039; aus und bestätigen Sie die Dialogbox mit OK. Der ausgewählte Raum wird in das Eingabefeld übernommen und Sie müssen nur noch auf den Button {{Taste|attr}} klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Training&#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;mySwitch1&#039;&#039; zu reagieren. Im Beispiel soll immer dann, wenn &#039;&#039;mySwitch1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, das Gerät &#039;&#039;myLamp1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
&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;
Diese Befehlsstruktur besteht erkennbar aus drei Teilen.&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_mySwitch1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySwitch1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Sie können das notify ganz nach Gusto &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;.  Mein Name scheint auf den ersten Blick kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. 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;, &#039;&#039;&#039;Unterstrich _&#039;&#039;&#039; und &#039;&#039;&#039;Punkt .&#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;REGEXP&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; (auch reguläre Ausdrücke) und definiert die Bedingung, wann das Notify ausgeführt werden soll. Hierauf gehen wir gleich genauer ein, da reguläre Ausdrücke in perl und FHEM sehr häufig verwendet werden. &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 myLamp1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Reguläre Ausdrücke dienen dazu, bestimmte (syntaktische) Eigenschaften von Zeichenketten zu beschreiben. So kann man mit Hilfe eines Regex beispielsweise prüfen, ob ein bestimmtes Wort in einer Zeichenkette enthalten ist oder ob es nicht in der Zeichenkette vorkommt, man kann Zahlen in einer Zeichenkette identifizieren und vieles mehr. Sie werden sich mit Regex später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
&lt;br /&gt;
Wann immer in FHEM ein Event auftritt, wird dieses an alle notifies weitergeleitet. Jedes Notify prüft nun, ob es auf das Ereignis reagieren soll. Das geschieht, indem mit Hilfe reguläre Ausdrücke geprüft wird, ob das gerade weitergeleitete Event den oben genannten Befehl auslösen soll. Man spricht auch davon dass geprüft wird, ob Ereignis und notify &amp;quot;matchen&amp;quot;. In unserem Fall löst &#039;&#039;mySwitch1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; aus. Um dieses Event &amp;quot;abzufangen&amp;quot; und darauf zu reagieren, wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySwitch1:on&amp;lt;/code&amp;gt; verwendet. In einem notify werden Events also dadurch abgefangen, indem wir das device (auf das reagiert werden soll) und der Befehl (auf den reagiert wird) durch einen Doppelpunkt trennen. Diese Syntax gilt für alle notifies. (Bei anderen Modulen kann es sein, dass Events durch eine andere Schreibweise &amp;quot;angefangen&amp;quot; werden müssen.) &lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySwitch1_on notify mySwitch1:on set myLamp1 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; 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 Training 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;Training&#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;mySwitch1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLamp1&#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;myLamp1&#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_mySwitch1_off notify mySwitch1:off set myLamp1 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_mySwitch1_on  notify mySwitch1:on  set myLamp1 on&lt;br /&gt;
 define n_mySwitch1_off notify mySwitch1:off set myLamp1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1 &#039;&#039;&#039;$EVENT&#039;&#039;&#039;&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySwitch1&#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;mySwitch1&#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;mySwitch1&#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;mySwitch1&#039;&#039; der Befehl für &#039;&#039;myLamp1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySwitch1&#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_mySwitch1_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. Wählen Sie dazu zunächst aus der Drop-Down-Liste rechts neben dem Stichwort {{Taste|attr}} das Attribut &#039;&#039;disable&#039;&#039; aus. Tragen Sie dann in das Eingabefeld ganz rechts den Wert &#039;&#039;1&#039;&#039; ein und zur Bestätigung klicken Sie links auf {{Taste|attr}}. Alternativ dazu geben Sie in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySwitch1_off disable 1&amp;lt;/code&amp;gt; ein.&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;. FHEM erinnert Sie deshalb an ungespeicherte Änderungen durch ein rotes Fragezeichen neben &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#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;mySwitch1&#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 myLamp2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLamp2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Training&#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_mySwitch1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Training&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySwitch1&#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_mySwitch1 notify mySwitch1 set myLamp1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1,myLamp2 $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_mySwitch1}}. 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;
{{Hinweis|Ü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;mySwitch1&#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 mySwitch1:on set myLamp1 on;set myLamp2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: Das notify schaltet myLamp1 wann immer mySwitch1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLamp2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLamp2 sofort, myLamp1 erst nach dem Event von mySwitch1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLamp2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySwitch1:on set myLamp1 on;;set myLamp2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySwitch1:on set myLamp1 on;;set myLamp2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySwitch1 schalten myLamp1 und myLamp2.&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;myLamp2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStandardLamp&#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 myLamp2 myStandardLamp&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySwitch1&#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_mySwitch1 notify mySwitch1 set myLamp1,myStandardLamp $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;myLamp1&#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;myLamp1&#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;myLamp1&#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_myLamp1 at +00:01:00 set myLamp1 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;myLamp1&#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. Die geschweiften Klammer zeigen an, dass FHEM den Inhalt dieser Klammern direkt als Perl-Funktionen ausführt. &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_gardenLight_morning_off at *{sunrise()} set gardenLight 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;
{{Randnotiz|RNText=&#039;&#039;&#039;Zeit- und Ereignissteuerung mit DOIF&#039;&#039;&#039;&lt;br /&gt;
Seit Erscheinen des ursprünglichen Artikels Anfang 2014 ist eine weitere Möglichkeit der Zeit- und Ereignissteuerung eingeführt worden.&lt;br /&gt;
&lt;br /&gt;
Siehe: [[DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erläuterungen#Erste_Schritte_mit_DOIF:_Zeit-_und_Ereignissteuerung|&#039;&#039;&#039;Erste Schritte mit DOIF: Zeit- und Ereignissteuerung&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
Der Autor des ursprünglichen Artikels hat freundlicherweise zugestimmt diesen Artikel mit einem Link zu ergänzen.}}&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;
[[Datei:GotoRAW-Import firststeps.PNG|thumb|left|300px]]Dazu basteln wir uns ein Stairwell: Legen Sie dafür die Dummy-Devices &#039;&#039;sw_Switch&#039;&#039; und &#039;&#039;sw_Light&#039;&#039; im Raum &#039;&#039;Stairwell&#039;&#039; an. Um die folgenden Befehle an einem Stück eingeben zu können, klicken Sie auf das umrahmte &amp;quot;+&amp;quot;-Symbol neben der Kommandozeile (Nur im Standard Style f18 vorhanden - beachten Sie dazu diesen Artikel [[Import_von_Code_Snippets]]), fügen die folgenden Zeilen mit copy&amp;amp;paste in das daraufhin erscheinende Dialogfeld ein und drücken auf {{Taste|Execute}}:&lt;br /&gt;
&lt;br /&gt;
 define sw_Switch dummy&lt;br /&gt;
 attr   sw_Switch room Stairwell&lt;br /&gt;
 attr   sw_Switch webCmd on&lt;br /&gt;
 define sw_Light dummy&lt;br /&gt;
 attr   sw_Light room Stairwell&lt;br /&gt;
[[Datei:RAW-Import firststeps.PNG]]&lt;br /&gt;
&lt;br /&gt;
Anschließend können Sie das Dialogfeld wieder schließen oder auch die nachfolgenden Befehle darüber eingeben. Beachten Sie, dass mit &#039;&#039;Execute&#039;&#039; alle Anweisungen aus dem Dialogfeld ausgeführt werden, was ggf. zu Fehlermeldungen führen kann, wenn z.B. ein Gerät bereits definiert ist. Zeilen mit Anweisungen, die bereits in die Konfiguration übernommen wurden, können Sie daher getrost löschen, um solche Effekte zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;sw_Switch:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set sw_Light 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 sw_Light 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_sw_Switch_on notify sw_Switch:on &lt;br /&gt;
        set sw_Light on;;define a1 at +00:01 set sw_Light 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_sw_Switch_on notify sw_Switch:on set sw_Light on;;sleep 60;;set sw_Light 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_sw_Switch_on notify sw_Switch:on set sw_Light 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 {{Link2CmdRef}}.&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;
Die für FHEM wichtigen Grundlagen der Programmiersprache Perl kann man in den ersten Kapiteln eines Perl-Buches oder diversen frei im Internet verfügbaren Perl-Tutorials nachlesen.&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>Afo-solar</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Diskussion:Erste_Schritte_in_FHEM&amp;diff=39704</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=39704"/>
		<updated>2024-11-22T13:55:55Z</updated>

		<summary type="html">&lt;p&gt;Afo-solar: Neuer Abschnitt /* Attribut &amp;quot;disable&amp;quot; */&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;br /&gt;
&lt;br /&gt;
{{Anker|neue_Antwort1}}&lt;br /&gt;
::::Hallo Uli,&lt;br /&gt;
&lt;br /&gt;
::::nachstehend 2 Vorschläge, wie ich einen Verweis auf die Zeit- und Eventsteuerung mit DOIF einbauen möchte.&lt;br /&gt;
&lt;br /&gt;
::::Welchen Vorschlag bevorzugst Du?&lt;br /&gt;
&lt;br /&gt;
::::LG --[[Benutzer:Trelle|Trelle]] ([[Benutzer Diskussion:Trelle|Diskussion]]) 18:55, 16. Mär. 2017 (CET)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Vorschlag 1&amp;lt;/b&amp;gt;&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;
=== Zeit- und Ereignissteuerung mit DOIF ===&lt;br /&gt;
Seit erscheinen des ursprünglichen Artikels Anfang 2014, ist eine neue Möglichkeit der Zeit- und Ereignissteuerung eingeführt worden.&lt;br /&gt;
&lt;br /&gt;
Siehe: [[DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erläuterungen#Erste_Schritte_mit_DOIF:_Zeit-_und_Ereignissteuerung|&#039;&#039;&#039;Erste Schritte mit DOIF: Zeit- und Ereignissteuerung&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
Der Autor des usprünglichen Artikel hat freundlicherweise zugestimmt den Artikel mit einem Link zu ergänzen.&lt;br /&gt;
==Wie geht es weiter?==&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Vorschlag 2&amp;lt;/b&amp;gt;&lt;br /&gt;
==Timer bei einem Event starten - notify und at==&lt;br /&gt;
{{Randnotiz|RNText=&#039;&#039;&#039;Zeit- und Ereignissteuerung mit DOIF&#039;&#039;&#039;&lt;br /&gt;
Seit erscheinen des ursprünglichen Artikels Anfang 2014, ist eine neue Möglichkeit der Zeit- und Ereignissteuerung eingeführt worden.&lt;br /&gt;
&lt;br /&gt;
Siehe: [[DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erläuterungen#Erste_Schritte_mit_DOIF:_Zeit-_und_Ereignissteuerung|&#039;&#039;&#039;Erste Schritte mit DOIF: Zeit- und Ereignissteuerung&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
Der Autor des usprünglichen Artikels hat freundlicherweise zugestimmt den Artikel mit einem Link zu ergänzen.}}&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;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
:Für mich sind beide Varianten ok. Wobei ich nicht sicher bin, ob eine Platzierung unter &amp;quot;Wie geht es weiter?&amp;quot; der Universalität von DOIF nicht gerechter würde. Unter &amp;quot;Timer bei einem Event starten...&amp;quot; wird die Bedeutung mMn ein wenig reduziert. Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 12:04, 29. Mär. 2017 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Änderungen am Artikel &amp;quot;Erste Schritte in FHEM&amp;quot; ==&lt;br /&gt;
Betrifft folgende Änderungen des Users Andies: https://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;amp;type=revision&amp;amp;diff=21496&amp;amp;oldid=21488&lt;br /&gt;
&lt;br /&gt;
Diskussion wurde nachträglich zur besseren Nachvollziehbarkeit von [[Benutzer_Diskussion:Andies]] hierin verlagert. --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 10:41, 12. Mai 2017 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Benutzer_Diskussion:Andies]] schlägt vor, diesen Abschnitt zu löschen. Die Sachen sind ja (in meinen Augen) umgesetzt und durch, momentan müllt das nur die Diskussionsseite zu. Was meint Ihr? --[[Benutzer:andies|Andreas]] 08:21, 03. März 2019 (CEST)&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
:&#039;&#039;Dagegen&#039;&#039; - Für weitere / andere Änderungen kann ja gern (wir üblich) ein neuer Abschnitt begonnen werden. --[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 16:46, 3. Mär. 2019 (CET)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hallo!&lt;br /&gt;
&lt;br /&gt;
Zunächst danke für Deine Mitarbeit am Wiki und bei FHEM. Aber -wie so oft im Leben- gibt es nur Rückmeldungen bei &amp;quot;Problemen&amp;quot; ;-) :&lt;br /&gt;
&lt;br /&gt;
Hast Du Deine Änderungen am Artikel [[Erste Schritte in FHEM]], so wie im Vorwort zum Artikel erbeten, mit dem Verfasser Uli abgestimmt? &lt;br /&gt;
&lt;br /&gt;
Die Änderungen widersprechen deutlich der Intention und dem Konzept des Artikels. Der Artikel soll nur einen kurzen Einstieg in FHEM geben; quasi einen &amp;quot;Vorgeschmack&amp;quot; auf FHEM liefern und nicht das Einsteiger-Pdf ersetzen.&lt;br /&gt;
&lt;br /&gt;
Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 13:51, 9. Mai 2017 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ja, habe ich abgestimmt. Ich hatte ihm vor einer Woche eine Mail geschrieben und er hat daraufhin OK gesagt, aber darum gebeten, es möglichst kurz zu halten. Kurze Nachfrage: Was genau ist der &#039;&#039;deutliche&#039;&#039; Widerspruch zur Intention?&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:andies]] 14:09, 9. Mai 2017&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
:Hallo andies!&lt;br /&gt;
:[[Erste_Schritte_in_FHEM#Grundbegriffe:_Device_und_Internal.2C_Attribut.2C_Reading]] geht meiner Meinung nach viel zu sehr in die Tiefe und ist gerade für einen groben Überblick nicht notwendig. Finde das persönlich eher verwirrend als hilfreich. Was interessiert mich bspw. beim ersten Kontakt mit FHEM, warum 98 vor einem Modul steht? Wofür muss man das für den schnellen Überblick wissen? Variablen, Zeichenketten, STATE, Readings, Internal, Attribut im &amp;quot;Vorwort&amp;quot; als Grundbegriffe schrecken mich ab. Das kommt doch im Artikelverlauf von selbst und muss man nicht schon im Vorhinein lesen. Der &amp;quot;device&amp;quot;-Erläuterung kann ich hingegen eine gewisse Notwendigkeit abgewinnen. &lt;br /&gt;
:Inhaltlich bin ich nicht im Detail eingestiegen, aber &amp;quot;Readings sollen während der Laufzeit vom Anwender&amp;quot; halte ich als Aussage für sehr gefährlich.&lt;br /&gt;
:Erlaube mir mal eine Gegenfrage: Hast Du beim Einstieg das Einsteiger-Pdf gelesen? Oder wie bist Du vorgegangen?&lt;br /&gt;
:Wenn Du die Änderungen mit Uli abgestimmt hast, ist das Ok und ich bin ruhig :-).&lt;br /&gt;
:Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 15:28, 9. Mai 2017 (CEST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
::Danke für die konstruktive Antwort; dann lass uns diskutieren! Ich erzähle mal, wieso ich das geschrieben habe und dann schauen wir, was wir am Ende daraus machen. Das wird jetzt aber ein längerer Text (Wir können das auch im Forum diskutieren, wäre das besser? Wenn ja, dann nimm einfach den Link, den ich da angegeben habe: https://forum.fhem.de/index.php/topic,71397.0.html). Ich habe mit FHEM angefangen, weil ich ein ganz konkretes Problem hatte, dass ich mit anderen Servern nicht habe lösen können (Garage übers Internet schalten, Rolladen auch) und ich glaube, dass das typisch ist - jedenfalls war das der Eindruck, den ich von einem Treffen in Berlin hatte. Dann habe ich die Einsteiger-PDF gelesen und hatte &amp;quot;irgendwie&amp;quot; Ahnung, wie das geht. Dann habe ich meine Rolladen in Griff gehabt und eigentlich wäre dann alles gut gewesen. Wäre ich da stehen geblieben, hätte ich den Wiki-Eintrag &#039;&#039;nicht&#039;&#039; verändert. &lt;br /&gt;
:: Der nächste Schritt war dann, dass ich (wie wahrscheinlich einige hier) Blut geleckt hatte. Nun sollte also auch noch der Stromverbrauch erfasst werden etc. Und auf einmal fingen die Probleme an. Ich habe zum Beispiel aus dem Wiki-Eintrag nicht verstanden, was überhaupt ein Attribut ist. Ständig wollte ich mit ReadingsVal die Werte der Attribute auslesen und bekam auch mal den Anpfiff: &amp;quot;Lies mal die commandref&amp;quot;. Wenn man aber noch nie mit Perl programmiert hat, kapiert man das auch nach dem zehnten Lesen nicht. Hinzu kommt, dass einige Dinge so erklärt sind, dass für einen Anfänger ein Verständnis nahezu unmöglich wird; einige Wiki-Einträge sind ja wirklich verwaist. Also habe ich überlegt: Warum kapiere ich das nicht? Dann wurde mir klar, weil zum einen recht viele kleine Schusselfehler in der Einleitung stehen (zum Beispiel &amp;quot;Reading &#039;STATE&#039;&amp;quot;, wo es doch ein Internal ist oder man das Reading &#039;state&#039; meint etc pp - so etwas verwirrt einen Anfänger total!) und zum anderen weil mehrere Grundbegriffe nicht vernünftig erklärt sind (zum Beispiel: &amp;quot;Nur Readings können von Menschen gelesen werden&amp;quot; - Internals auch!). Hinzu kommt, dass in der Einleitung zwar steht, was man genau tun soll (&amp;quot;tipp mal attr XY room sowieso&amp;quot; ein und dann siehst du was), aber nicht erklärt wird, &#039;&#039;was&#039;&#039; man da eigentlich macht - nämlich ein Attribut setzen und einen Wert zuweisen. Deshalb habe ich mich dran gesetzt und überlegt, was &#039;&#039;&#039;für mich&#039;&#039;&#039; wichtig gewesen wäre. &lt;br /&gt;
:: Nun zur Debatte. Was für mich wichtig ist, kann für andere verwirrend sein. Sehe ich sofort ein. Also lass uns im Detail diskutieren, was am Text verändert wird (nochmal: eventuell im Forum?). Das mit der Zeichenkette verstehe ich, das mit den Definitionen der Grundbegriffe finde ich aber wesentlich. Wir sollten vielleicht so debattieren: Was wollen wir beim Anfänger erreichen? Welches Vorwissen müssen wir voraussetzen, was nicht? Ich gehe davon aus, dass der typische Anwender mit einem ganz konkreten Problem zu FHEM stößt und zuerst das gelöst haben will. Dass er wenige Programmierkenntnisse besitzt und auch bereit ist, gewisses Leid in Kauf zu nehmen. Wir können aber nicht voraussetzen (auch wenn das der eine oder andere meint), dass er die gesamte Einsteiger-PDF verstanden, die commandref gelesen und verstanden hat und außerdem mit RegEx problemlos umgehen kann. Wenn wir uns bei der Beschreibung der Person, die den Wiki-Eintrag liest, einig sind, sollte sich ein besserer Text ergeben. Das man dabei sinnvollerweise vermeidet, bereits in der Einleitung eine Debatte zum Sinn und Unsinn von DOIF zu haben, ist auch mir Anfänger klar.&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
:::Zum Diskussionsort: Mir ist es letztlich gleich. Hier wird es vmtl. nur ruhiger und mit weniger Beteiligung als im Forum zu gehen.&lt;br /&gt;
&lt;br /&gt;
:::Also bist Du zum Einstieg mit dem Artikel &amp;quot;Erste Schritte in FHEM&amp;quot; problemlos klargekommen; erst als es weiter in die Tiefe ging, kamen die weiteren Probleme!? Daraus schließe ich zunächst einmal frech, dass der Artikel seinen Zweck erfüllt hat: Ein &amp;quot;Appetitanreger&amp;quot; auf FHEM, der erste Erfolgserlebnisse und erstes Verständniss schafft. Mehr soll er meiner Meinung nach auch nicht. Der Einsteiger soll sich in kurzer Zeit einen Überblick verschaffen (Zeitbedarf max. 60 Minuten): Ist FHEM etwas für mich? Wie geht das grundlegend? Wenn man neugierig geworden ist, dann weiterlernen.&lt;br /&gt;
&lt;br /&gt;
:::Tippfehler und Co. (state vs. STATE) sollten im Artikel natürlich behoben werden. Mit Deinen weiterführenden Erläuterungen insb. Grundbegriffe, die Du nach den ersten Erfolgserlebnissen vermisst hast, steigt der Zeitbedarf für die Durcharbeitung und auch die Komplexität des Artikels deutlich. Er verliert damit eben seine eigentliche Intention. Das, was unter Grundbegriffe steht braucht man zum Einstieg nicht und verwirrt. Er entwickelt sich mMn dadurch in Richtung universellen Einsteiger-PDF Ersatz. Weitergehende Informationen könnte man aus dem Artikel ja verlinken statt sie darin aufzunehmen; aber selbst dabei bin ich zweifelnd, da es schnell zum Verzetteln in Details führt.&lt;br /&gt;
&lt;br /&gt;
:::Auch Deine Definition der Grundbegriffe ist, wie Du im Forum liest, nicht unumstritten. Und die Bedenken kommen nicht von irgendjemanden, sondern von einem der Kern-Developer. Einen Punkt hatte ich gestern auch schon herausgepickt (Readings), den ich persönlich für gefährlich oder eher sogar falsch halte. Zudem existieren schon Definitionen der Begriffe im Wiki, die man verlinken könnte. Warum sollten wir 2 Definitionen im Wiki pflegen? Das ist zu pflegeaufwendig. Das ist aber auch eine Macke von mir: [https://wiki.fhem.de/w/index.php?title=SIGNALduino&amp;amp;diff=prev&amp;amp;oldid=21335] würde ich z.B. nicht so ausführlich machen, sondern auf [[Trick_der_Woche#CUL_.26_CO_.C3.BCber_Serial_ID-einbinden]] verlinken. Dadurch sind Fehler/Änderungen nur an einer Stelle zu berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
:::Wo steht eigentlich: &amp;quot;Nur Readings können von Menschen gelesen werden&amp;quot; ?&lt;br /&gt;
&lt;br /&gt;
:::Was für Dich wichtig ist, liegt doch an Deinem Wissensstand. Zunächst hat der Einsteiger-Artikel gereicht. Dann ist man weiter und liest das Pdf. Und dann kommen Fragen und noch mehr Fragen. Damit bin ich wieder beim Ausgangspunkt, dass Deine Erläuterungen schon für Fortgeschrittenere sind und nicht in den genannten Artikel sollten ;-).&lt;br /&gt;
&lt;br /&gt;
:::Was ich voraussetze? Nichts außer Lernbereitschaft. Dazu gehört auch, dass man sich zumindest mal Grundzüge von Perl anschaut. (Bin selbst kein Entwickler und werde keiner, sondern nur Anwender) Ohne Regex und Co. ist FHEM schwer  &amp;quot;verdaulich&amp;quot;. Das z.B. tritt mir mittlerweile zu sehr in den Hintergrund.&lt;br /&gt;
&lt;br /&gt;
:::Mir persönlich wäre es am Liebsten den Einsteiger-Artikel in die Kurzform zurückzubringen und Deine Überlegungen möglichst redudanzfrei in weiterführende Artikel zu packen oder in Ulis Einsteiger-Pdf einzubringen, falls er Hilfe mag. Was ich nicht möchte ist: Dich entmutigen und von der Mitarbeit abbringen, das wird nämmlich schnell so aufgefasst. Und meine Meinung muss auch nicht die Richtige sein, wenn es die überhaut gibt.&lt;br /&gt;
&lt;br /&gt;
:::Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 11:14, 10. Mai 2017 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::PS: (Langfristiges) Ziel ist bspw. [[FHEM_Installation_Windows]] und [[Erste Schritte in FHEM]] so zu gestalten, dass als Einsteiger ein Test von FHEM angefangen bei Installation bis zum Ende der ersten Experimente in ca. 90 Minuten möglich ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::::Was ist davon zu halten, wenn wir den Grundbegriffe-Artikel zu einem Absatz mit ein, zwei Sätzen zusammenkürzen und den Inhalt auf weiterführende Seiten verschieben? Das wäre dann, in schlechtem Deutsch von der Idee her so: &amp;quot;Also wir legen jetzt mal los und wir brauchen dazu Attribute und Readings (was das ist, kannst du HIER nachlesen), aber erst einmal reicht &amp;lt;XYZ&amp;gt;&amp;quot;? Das können wir bei den anderen Abschnitten, bei denen Du Probleme hast, auch machen. Ich würde mir dann mal was überlegen und das hier vorstellen? Es wäre aber wegen der reparierten Schreibfehler vermutlich einfacher, wenn wir diesen Abschnitt _bearbeiten_ und _nicht_ zurückstellen, denn ich weiß nicht mehr, welche Fehler ich genau geändert habe.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
:::::Ich mache nichts einfach rückgängig, wir diskutieren doch: Ändere es einfach einmal so ab, wie Du es dann machen würdest. Im Übrigen bin ich nicht der Nabel der Welt, aber habe ein Meinung :-) . Am meisten stören mich die &amp;quot;Grundbegriffe&amp;quot;. --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 16:08, 10. Mai 2017 (CEST)&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::::PS Aus dem Wiki: &amp;quot;Daten, welche von einem Gerät gelesen werden und in FHEM in einer für Menschen verständlichen Form zur Verfügung gestellt werden können, werden Readings genannt&amp;quot;. Der Logiker schließt daraus, dass Internals für Menschen nicht verständlich sind (jedenfalls habe ich mich das wirklich gefragt: gilt etwa Readings = UTF-8, Internals = binär o.Ä?!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
:::::Halte ich für eine erhebliche Überinterpretation der Aussage. Es wird doch nirgends eine Verbindung oder gar Vergleich zwischen Internals und Readings hergestellt und schon gar nicht, in welcher ihrer Merkmale/Eigenschaften aus Anwendersicht ein Gegensatz besteht. Eine klare und eindeutige Definition der Begriffe ist nicht so einfach und letztlich auch im Fluß. Zudem versuchst Du Begrifflichkeiten, die mMn eher aus Entwicklersicht entstanden sind, in ein Schema der Anwendersicht zu pressen. Ein bedeutendes Gegenbeispiel Deiner Definition finde ich beispielsweise auf die Schnelle noch bei Internals. Du schreibst: &amp;quot;Internals sollen vom Nutzer nicht direkt verändert werden&amp;quot;. Das ist so vereinfacht in einem wesentlichen Punkt falsch. Das DEF in den Internals soll gerade von Einsteigern genutzt werden und nicht die manuelle Editierei in der fhem.cfg (siehe bspw. [[Konfiguration#Objektdetails]]). Die Nutzung des DEF wollen wir gerade den Einsteigern krampfhaft vermitteln; jetzt verbieten wir es aber bereits in der Definition im &amp;quot;Vorwort&amp;quot; des Einsteiger-Artikels. Das verwirrt sicherlich. Wenn Du das dann gerade ziehen willst, musst Du noch mehr erklären. Das führt zu mehr Verwirrung. Darum eben besser Definitionen weglassen. --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 16:08, 10. Mai 2017 (CEST)&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
::::::Ich habe jetzt erst einmal Änderungen vorgenommen, wie sie hier oben besprochen wurden. Genauer habe ich folgendes gemacht: Ich habe den separaten Abschnitt &amp;quot;Grundbegriffe&amp;quot; entfernt und Teile davon, die nicht technisch sind, in den fortlaufenden Text integriert. Das mit den Zeichenketten habe ich weggelassen.  Ansonsten habe ich bei den ersten beiden Befehlen in FHEM etwas mehr Wert darauf gelegt, was man genau da eigentlich eingibt und welche Teile dieser Befehlszeile Syntax sind und wo man (mehr oder weniger) schreiben kann, was man will.  --[[Benutzer:andies|Andreas]] ([[Benutzer Diskussion:andies|Diskussion]]) 18:51, 20. Mai 2017 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Attribut &amp;quot;disable&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Hallo alle,&lt;br /&gt;
&lt;br /&gt;
zum Einstieg in FHEM habe ich den Text &amp;quot;Erste Schritte in FHEM&amp;quot; gelesen und fand, dass es Spass macht, FHEM so auszuprobieren und fand den Text und die Dummy-Experimente auch ziemlich gut. Ich hatte am Anfang Schwierigkeiten, die Attribute über die Detailansichten zu ändern, am nächsten Tag habe ich dann gemerkt, dass im Text immer steht, dass man auf den Button &amp;quot;attr&amp;quot; klicken soll. Das war also eigene Dummheit ...&lt;br /&gt;
  Aber an einer Stelle, denke ich sollte der Text geändert werden. Nämlich dort, wo von n_mySwitch1_off das Attribut disable auf 1 gesetzt werden soll. Das geht beim ersten Mal gar nicht über die Detailansicht, da es dort anfangs nicht auftaucht. Daher habe ich den entsprechenden Text geändert auf: &amp;quot;Geben Sie dazu in der Kommandozeile attr n_mySwitch1_off disable 1 ein. Dadurch taucht in der Detailansicht des Notify im unteren Bereich das Attribut disable auf. Dieses kann man nun auf zwei Arten ändern, entweder über die Kommandozeile oder über die Detailansicht (dort den Wert 1 oder 0 auswählen, dann attr klicken).&amp;quot; Ich hoffe das ist ok. Ulrich Maas kann man zur Zeit - soweit ich das verstanden habe - nicht kontaktieren, deshalb habe ich den Änderungsvorschlag direkt in den Text geschrieben.&lt;br /&gt;
&lt;br /&gt;
Grüße&lt;br /&gt;
--[[Benutzer:Afo-solar|Afo-solar]] ([[Benutzer Diskussion:Afo-solar|Diskussion]]) 14:55, 22. Nov. 2024 (CET) Felix&lt;/div&gt;</summary>
		<author><name>Afo-solar</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Erste_Schritte_in_FHEM&amp;diff=39703</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=39703"/>
		<updated>2024-11-22T13:40:09Z</updated>

		<summary type="html">&lt;p&gt;Afo-solar: Das Attribut &amp;quot;disable&amp;quot; ist nicht von Anfang an in der Detailansicht zu sehen, zumindest nicht in der aktuellen Version von fhem. Daher habe ich den Text dahingehend geändert, dass man erst per Kommandozeile, das Attribut auf 1 setzen muss und erst dann in der Detailansicht zwischen den Werten 0 und 1 wählen kann.&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 [[Diskussion:Erste Schritte in FHEM|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;
*Links daneben befindet sich ein umrahmtes &amp;quot;+&amp;quot;-Symbol, über das Sie ein mehrzeiliges Eingabefeld erreichen können; mehr dazu später.&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 im Detail in der FHEM-Befehlsreferenz {{Link2CmdRef|Lang=de|Anker=allowed}}, 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 oder klicken alternativ einfach auf den gleichnamigen Link.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem02.png]]&lt;br /&gt;
&lt;br /&gt;
==Device anlegen - define==&lt;br /&gt;
&lt;br /&gt;
Das Grundgerüst von FHEM sind &amp;quot;devices&amp;quot;. Typische Devices sind beispielsweise Funksteckdosen, Rolladenmotoren, Temperaturmessgeräte, Magnetventile usw. Aber andere Dinge, die man auf den ersten Blick nicht als physisches Gerät bezeichnen würde, sind Device: So etwa ist die Benutzeroberfläche von FHEM selbst ein device (&amp;quot;FHEMWEB&amp;quot;), ebenso gibt es Devices ohne physische Geräte, die dazu benutzt werden können, um eine Variable zu speichern. Ein sehr einfaches Device, dummy genannt, legen wir jetzt an.&lt;br /&gt;
&lt;br /&gt;
Das dummy devices ist insofern ein besonderes Objekt, weil es nicht unbedingt ein korrespondierendes physisches Gerät (eine physische Lampe, ein Rolladen, ein Magnetventil) benötigt. So können Sie diese Schritte 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 physisch vorhandenen 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 mySwitch1 dummy&lt;br /&gt;
&amp;quot;define&amp;quot; ist der FHEM-Befehl, &amp;quot;mySwitch1&amp;quot; der zukünftige Name des devices und &amp;quot;dummy&amp;quot; bezeichnet den Typ. Die Worte define und dummy gehören zur Befehlssyntax von FHEM und können nicht verändert werden, mySwitch1 ist (mehr oder weniger) frei wählbar. Nach drücken der {{Taste|Enter}}-Taste wird die Detail-Ansicht des neuen FHEM-Device &#039;&#039;mySwitch1&#039;&#039; angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ErsteSchritteInFhem03.png]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Jedes Device hat genau einen &amp;quot;Typ&amp;quot;.  Dieser Typ legt gleichzeitig die Perl-Befehlsdatei (man spricht präziser vom &amp;quot;Modul&amp;quot;) fest, in der bestimmte Routinen und Eigenschaften festgehalten sind. Ist etwa ein Device vom Typ dummy, so weiß FHEM, dass die Routinen und Eigenschaften im Modul 98_dummy.pm liegen. (Die Zahl 98 hatte früher eine Bedeutung, heute ist das nicht mehr der Fall, aus historischen Gründen wird sie aber immer noch verwendet.)}}&lt;br /&gt;
{{Hinweis|Diese Einleitung soll Ihnen ein Gefühl für die Funktionsweise von FHEM vermitteln, ohne dass Ihnen konkrete physische Geräte (spezielle Funk- oder WLAN-Steckdosen, 433MHz-Sender,  Homematic-Lampen, ZWave-Aktoren usw.) zur Verfügung stehen müssen. Um für diesen Kurs ein rein &amp;quot;virtuelles Gerät&amp;quot; nutzen zu können, greifen wir auf ein dummy-device zurück. Ein &#039;&#039;dummy&#039;&#039; wird Ihnen auch später noch häufig begegnen, wenn es darum geht, einen Testaufbau zu erläutern oder zur Steuerung eines Programmablaufs Informationen userseitig verfügbar zu machen. Beachten Sie dabei aber bitte immer, dass Ihnen später auch &#039;&#039;&#039;sehr viele andere Möglichkeiten&#039;&#039;&#039; offenstehen, um Informationen abzuspeichern, auszuwerten oder anzuzeigen, sobald Sie FHEM-Geräte für physische Hardware angelegt haben. Statt hierfür Geräte des Typs &#039;&#039;dummy&#039;&#039; zu verwenden, wird es für Sie zukünftig häufig übersichtlicher sein, Informationen zu einem Gerät direkt bei diesem zu verwalten. Neben den Attributen und Readings, die die hierfür jeweils genutzen Module bereits automatisch bereitstellen, können Sie z.B. bei allen Devices weitere Attribute (userattr) oder Readings (setreading) selbst in fast beliebigem Umfang generieren und darin Ihre eigenen Informationen bereitstellen.}}&lt;br /&gt;
&lt;br /&gt;
Devices haben einen &amp;quot;Zustand&amp;quot;, der sich im Zeitablauf ändert und den FHEM registriert. So ist beispielsweise ein Fenster offen, ein Rolladenpanzer geschlossen und eine Funksteckdose hat Spannung. Ein Zustand muss dabei nicht exakt eine Variable beinhalten (Fenster entweder &amp;quot;offen&amp;quot; oder &amp;quot;geschlossen&amp;quot;), ein Zustand kann auch durch mehrere Variablen beschrieben werden (der Zustand eines Raspberry-Systems, device-type sysmon, umfasst beispielsweise die CPU-Frequenz, die CPU-Temperatur, den load und vieles mehr). &lt;br /&gt;
&lt;br /&gt;
Dieser Zustand wird in FHEM durch insgesamt drei Größen erfasst. Diese Größen heißen Internals, Attribute und Readings. Es wäre jetzt zu früh, auf die Bedeutung der drei Begriffe im Detail einzugehen, aber folgende Anmerkungen sind für die nachfolgenden Schritte wichtig:&lt;br /&gt;
*&#039;&#039;Internals&#039;&#039; enthalten ganz grundlegende Informationen zu dem device. Sie werden vom Nutzer in den seltensten Fällen direkt bearbeitet (meist nur bei der Einrichtung des devices).&lt;br /&gt;
*&#039;&#039;Attribute&#039;&#039; sollen das Verhalten des devices steuern. Sie können vom Anwender typischerweise verändert (oder erst angelegt) werden. &lt;br /&gt;
*&#039;&#039;Readings&#039;&#039; besitzen im Gegensatz zu den beiden anderen Größen einen Zeitstempel. Hier werden üblicherweise Messwerte des Gerätes erfasst. &lt;br /&gt;
&lt;br /&gt;
Verwirrend für einen Anfänger kann sein, dass manchmal Internals wie auch Readings mit gleichem Namen (STATE und state) existieren können. Allerdings unterscheidet Perl zwischen Groß- und Kleinschreibung!&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;
Im nächsten Schritt wollen wir Geräte ordnen und geeignet zusammenfassen. Beispielsweise könnten Sie es für sinnvoll erachten, die Geräte, die sich physisch (tatsächlich) in einem Raum befinden, auch in FHEM entsprechend anzuordnen. In einem &amp;quot;Schlafzimmer&amp;quot; sollen dann also entsprechende devices &amp;quot;Rolladen&amp;quot;, &amp;quot;Zeitschalter&amp;quot; und &amp;quot;Radios&amp;quot; zu finden sein. Sie können aber auch andere Zuordnungen vornehmen; man könnte etwa alle Messinstrumente wie Thermometer, Stromzähler und Feuchtigkeitsfühler in einem (eventuell nur logisch und nicht physisch existierenden) Raum &amp;quot;Messinstrumente&amp;quot; erfassen. Der Name eines Raumes ist dabei beliebig. &lt;br /&gt;
&lt;br /&gt;
Um dies zu tun, müssen Sie allen devices, die zum Raum gehören sollen, ein &amp;quot;Attribut&amp;quot; (siehe oben) hinzufügen. Dieses Attribut heißt room und muss als Wert den Namen des Raumes bekommen. Versuchen wir dies für unseren dummy. Hierzu verwenden Sie folgenden Befehl (abschließen der Eingabe mit {{Taste|Enter}}):&lt;br /&gt;
 attr mySwitch1 room Training&lt;br /&gt;
&lt;br /&gt;
Durch diesen Befehl wird dem Device &#039;&#039;mySwitch1&#039;&#039; das Attribut &#039;&#039;room&#039;&#039; mit dem Wert &#039;&#039;Training&#039;&#039; hinzugefügt. Wieder gehören attr, mySwitch1 und room zur Befehlssyntax von FHEM und können nicht verändert werden, Training ist frei wählbar. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;mySwitch1&#039;&#039; gehört jetzt zum room &#039;&#039;Training&#039;&#039;. Durch diese Zuordnung ist dieser Raum in der Navigationsleiste links zur Liste der Räume hinzugefügt worden. Klicken Sie einmal auf den Raum &#039;&#039;Training&#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;mySwitch1&#039;&#039;, unseren dummy. &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;mySwitch1&#039;&#039; klicken, gelangen Sie wieder in dessen Detailansicht.&lt;br /&gt;
&lt;br /&gt;
Unser dummy wird in einem Block mit der Typbezeichnung &#039;&#039;dummy&#039;&#039; dargestellt. Diese Typbezeichnung können Sie ebenfalls ändern, wenn Sie ein weiteres Attribut &amp;quot;group&amp;quot; hinzufügen und einen (ebenfalls frei wählbaren) Namen vergeben: Gruppen sortieren devices innerhalb eines Raumes. &lt;br /&gt;
&lt;br /&gt;
Anmerkung: Wenn Sie einen Raum löschen wollen, so tun Sie dies, indem Sie sämtliche devices aus dem Raum entfernen. Für unser Beispiel des Raums &#039;&#039;Training&#039;&#039; bedeutet es, dass in allen devices das Attribut room entfernt wird. Der Raum &#039;&#039;Training&#039;&#039; verschwindet dann von alleine. &lt;br /&gt;
&lt;br /&gt;
==Schaltbefehle definieren==&lt;br /&gt;
Nun soll unser &#039;&#039;mySwitch1&#039;&#039; Schalterflächen für &#039;&#039;on&#039;&#039; und &#039;&#039;off&#039;&#039; bekommen.&lt;br /&gt;
 attr mySwitch1 webCmd on:off&lt;br /&gt;
&lt;br /&gt;
Auch hier handelt es sich um ein Attribut mit dem Namen webCmd und den Werten on:off, das dem device &#039;&#039;mySwitch1&#039;&#039; hinzugefügt wird. 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 Raum &#039;&#039;Training&#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;mySwitch1&#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;.&lt;br /&gt;
&lt;br /&gt;
Schalten Sie &#039;&#039;mySwitch1&#039;&#039; noch einmal aus. Achten Sie beim Schalten auf die Readings: Neben dem Internal &#039;&#039;STATE&#039;&#039; gibt es ein Reading gleichen Namens, das aber (siehe oben: Grundbegriffe; Perl unterscheidet zwischen Groß- und Kleinschreibung) mit einem Zeitstempel versehen ist.  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;
Devices kommunizieren über so genannte &#039;&#039;Events&#039;&#039; (Ereignisse) miteinander. Ein device sendet ein Event an FHEM und FHEM verteilt dieses Event an alle devices. Diese devices wiederum entscheiden dann, ob und wie sie auf das Event reagieren. Das Verständnis von Events und wie sie aufgebaut sind ist elementar und wir werden sie noch oft benötigen. Wir wollen daher Events ein wenig näher kennenlernen und uns dazu den Eventmonitor anschauen. Dieser Eventmonitor zeigt alle aktuellen Events in FHEM an. &lt;br /&gt;
&lt;br /&gt;
Öffnen Sie dazu in Ihrem Browser ein zusätzliches Fenster, in dem Sie neben FHEM 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;mySwitch1&#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;
Schalten wir &#039;&#039;mySwitch1&#039;&#039;, so löst unser device ein Event aus und FHEM verteilt es an alle anderen devices. Bei jeder Betätigung des Schalters erscheint ein neues 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;
Im Eventmonitor wird ein Event immer durch einen Zeitstempel beschrieben. Es folgen der Typ des auslösenden Gerätes (hier &#039;&#039;dummy&#039;&#039;), der Name des Device, welches das Ereignis auslöst (hier &#039;&#039;mySwitch1&#039;&#039;) und zuletzt der ausgelöste Befehl (hier &#039;&#039;on&#039;&#039; oder &#039;&#039;off&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Andere FHEM-Geräte (beispielsweise eine Fernbedienung oder ein Funkschalter an der Wand) erzeugen bei jedem Tastendruck oder bei Klick einen Event. Diese Events erscheinen ebenfalls im Event monitor.&lt;br /&gt;
&lt;br /&gt;
==Schalten von Geräten - set==&lt;br /&gt;
&#039;&#039;mySwitch1&#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 mySwitch1 on&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;set mySwitch1 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;myLamp1&#039;&#039;&#039;&#039;&#039; an. Diese wollen wir später mit &#039;&#039;&#039;&#039;&#039;mySwitch1&#039;&#039;&#039;&#039;&#039; bedienen.&lt;br /&gt;
 define myLamp1 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 Training 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;myLamp1&#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;myLamp1&#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. Bei einem Klick in das Eingabefeld neben &#039;&#039;room&#039;&#039; öffnet sich eine Dialogbox mit allen in FHEM bereits angelegten Räumen. Durch Anklicken der Raumnamen können Sie ein oder mehrere Räume auswählen. Wählen Sie den Raum &#039;&#039;Training&#039;&#039; aus und bestätigen Sie die Dialogbox mit OK. Der ausgewählte Raum wird in das Eingabefeld übernommen und Sie müssen nur noch auf den Button {{Taste|attr}} klicken.&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie nun wieder in den Raum &#039;&#039;Training&#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;mySwitch1&#039;&#039; zu reagieren. Im Beispiel soll immer dann, wenn &#039;&#039;mySwitch1&#039;&#039; einen Event mit dem Befehl &#039;&#039;on&#039;&#039; auslöst, das Gerät &#039;&#039;myLamp1&#039;&#039; eingeschaltet werden.&lt;br /&gt;
&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;
Diese Befehlsstruktur besteht erkennbar aus drei Teilen.&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_mySwitch1_on&#039;&#039;, also &#039;&#039;n_&#039;&#039; um es als Notify kenntlich zu machen, dann das auslösende Gerät &#039;&#039;mySwitch1&#039;&#039; und den auslösenden Event &#039;&#039;on&#039;&#039;. Sie können das notify ganz nach Gusto &#039;&#039;n1&#039;&#039; nennen oder &#039;&#039;Karlheinz&#039;&#039;.  Mein Name scheint auf den ersten Blick kompliziert, ist aber hilfreich, wenn Sie später mehrere Notify angelegt haben. 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;, &#039;&#039;&#039;Unterstrich _&#039;&#039;&#039; und &#039;&#039;&#039;Punkt .&#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;REGEXP&amp;gt;&#039;&#039;&#039; steht für &amp;quot;Regular Expression&amp;quot; (auch reguläre Ausdrücke) und definiert die Bedingung, wann das Notify ausgeführt werden soll. Hierauf gehen wir gleich genauer ein, da reguläre Ausdrücke in perl und FHEM sehr häufig verwendet werden. &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 myLamp1 on&amp;lt;/code&amp;gt; sein.&lt;br /&gt;
&lt;br /&gt;
Reguläre Ausdrücke dienen dazu, bestimmte (syntaktische) Eigenschaften von Zeichenketten zu beschreiben. So kann man mit Hilfe eines Regex beispielsweise prüfen, ob ein bestimmtes Wort in einer Zeichenkette enthalten ist oder ob es nicht in der Zeichenkette vorkommt, man kann Zahlen in einer Zeichenkette identifizieren und vieles mehr. Sie werden sich mit Regex später detaillierter auseinandersetzen dürfen :)&lt;br /&gt;
&lt;br /&gt;
Wann immer in FHEM ein Event auftritt, wird dieses an alle notifies weitergeleitet. Jedes Notify prüft nun, ob es auf das Ereignis reagieren soll. Das geschieht, indem mit Hilfe reguläre Ausdrücke geprüft wird, ob das gerade weitergeleitete Event den oben genannten Befehl auslösen soll. Man spricht auch davon dass geprüft wird, ob Ereignis und notify &amp;quot;matchen&amp;quot;. In unserem Fall löst &#039;&#039;mySwitch1&#039;&#039; ein Event mit dem Befehl &#039;&#039;on&#039;&#039; aus. Um dieses Event &amp;quot;abzufangen&amp;quot; und darauf zu reagieren, wird für die Regular Expression die Schreibweise &amp;lt;code&amp;gt;mySwitch1:on&amp;lt;/code&amp;gt; verwendet. In einem notify werden Events also dadurch abgefangen, indem wir das device (auf das reagiert werden soll) und der Befehl (auf den reagiert wird) durch einen Doppelpunkt trennen. Diese Syntax gilt für alle notifies. (Bei anderen Modulen kann es sein, dass Events durch eine andere Schreibweise &amp;quot;angefangen&amp;quot; werden müssen.) &lt;br /&gt;
&lt;br /&gt;
Unser Notify wird also erstellt mit&lt;br /&gt;
 define n_mySwitch1_on notify mySwitch1:on set myLamp1 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; 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 Training 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;Training&#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;mySwitch1&#039;&#039; auf &#039;&#039;on&#039;&#039; schalten, wird auch &#039;&#039;myLamp1&#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;myLamp1&#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_mySwitch1_off notify mySwitch1:off set myLamp1 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_mySwitch1_on  notify mySwitch1:on  set myLamp1 on&lt;br /&gt;
 define n_mySwitch1_off notify mySwitch1:off set myLamp1 off&lt;br /&gt;
definieren wir nun&lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1 &#039;&#039;&#039;$EVENT&#039;&#039;&#039;&lt;br /&gt;
Wir sehen, dass die Regex nun nicht mehr unterscheidet, ob &#039;&#039;mySwitch1&#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;mySwitch1&#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;mySwitch1&#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;mySwitch1&#039;&#039; der Befehl für &#039;&#039;myLamp1&#039;&#039; nun zweimal ausgeführt wird. Das liegt daran, dass auf jeden Event von &#039;&#039;mySwitch1&#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_mySwitch1_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. Geben Sie dazu in der Kommandozeile &amp;lt;code&amp;gt;attr n_mySwitch1_off disable 1&amp;lt;/code&amp;gt; ein. Dadurch taucht in der Detailansicht des Notify im unteren Bereich das Attribut &#039;&#039;disable&#039;&#039; auf. Dieses kann man nun auf zwei Arten ändern, entweder über die Kommandozeile oder über die Detailansicht (dort den Wert &#039;&#039;1&#039;&#039; oder &#039;&#039;0&#039;&#039; auswählen, dann {{Taste|attr}} klicken).&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;. FHEM erinnert Sie deshalb an ungespeicherte Änderungen durch ein rotes Fragezeichen neben &#039;&#039;&#039;&#039;&#039;Save config&#039;&#039;&#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;mySwitch1&#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 myLamp2 dummy&lt;br /&gt;
&lt;br /&gt;
Durch &amp;quot;Zusammenklicken&amp;quot; im Detail-Bildschirm von &#039;&#039;myLamp2&#039;&#039; ordnen Sie diese ebenfalls dem Raum &#039;&#039;Training&#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_mySwitch1&#039;&#039; an. Dazu navigieren Sie auf den Detail-Bildschirm des Notify: Wechseln Sie in den Raum &#039;&#039;Training&#039;&#039; und klicken Sie auf den Namen von &#039;&#039;n_mySwitch1&#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_mySwitch1 notify mySwitch1 set myLamp1 $EVENT&lt;br /&gt;
zu&lt;br /&gt;
 define n_mySwitch1 notify mySwitch1 set myLamp1,myLamp2 $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_mySwitch1}}. 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;
{{Hinweis|Ü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;mySwitch1&#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 mySwitch1:on set myLamp1 on;set myLamp2 off&lt;br /&gt;
Die Befehle sind durch ein Semikolon getrennt. Effekt ist: Das notify schaltet myLamp1 wann immer mySwitch1 den Event on sendet. Der nächste Befehl in dieser Zeile ist &#039;&#039;set myLamp2 off&#039;&#039;. Dieser wird &#039;&#039;&#039;sofort&#039;&#039;&#039; bei der Eingabe der o.g. Befehlszeile abgearbeitet. Es schaltet also myLamp2 sofort, myLamp1 erst nach dem Event von mySwitch1.&lt;br /&gt;
&lt;br /&gt;
Soll auch der zweite Befehl &#039;&#039;set myLamp2 off&#039;&#039; erst nach dem Event ausgeführt werden, muss ein doppeltes Semikolon genutzt werden:&lt;br /&gt;
 define n1 notify mySwitch1:on set myLamp1 on;;set myLamp2 off&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Variante könnte so aussehen:&lt;br /&gt;
 define n1 notify mySwitch1:on set myLamp1 on;;set myLamp2 off;set myLampe3 on&lt;br /&gt;
Diese Befehlszeile würde also myLampe3 sofort schalten, aber erst nach dem Event von mySwitch1 schalten myLamp1 und myLamp2.&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;myLamp2&#039;&#039;&#039;&#039;&#039; soll &#039;&#039;&#039;&#039;&#039;myStandardLamp&#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 myLamp2 myStandardLamp&lt;br /&gt;
und passen Sie anschließend &#039;&#039;n_mySwitch1&#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_mySwitch1 notify mySwitch1 set myLamp1,myStandardLamp $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;myLamp1&#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;myLamp1&#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;myLamp1&#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_myLamp1 at +00:01:00 set myLamp1 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;myLamp1&#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. Die geschweiften Klammer zeigen an, dass FHEM den Inhalt dieser Klammern direkt als Perl-Funktionen ausführt. &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_gardenLight_morning_off at *{sunrise()} set gardenLight 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;
{{Randnotiz|RNText=&#039;&#039;&#039;Zeit- und Ereignissteuerung mit DOIF&#039;&#039;&#039;&lt;br /&gt;
Seit Erscheinen des ursprünglichen Artikels Anfang 2014 ist eine weitere Möglichkeit der Zeit- und Ereignissteuerung eingeführt worden.&lt;br /&gt;
&lt;br /&gt;
Siehe: [[DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erläuterungen#Erste_Schritte_mit_DOIF:_Zeit-_und_Ereignissteuerung|&#039;&#039;&#039;Erste Schritte mit DOIF: Zeit- und Ereignissteuerung&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
Der Autor des ursprünglichen Artikels hat freundlicherweise zugestimmt diesen Artikel mit einem Link zu ergänzen.}}&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;
[[Datei:GotoRAW-Import firststeps.PNG|thumb|left|300px]]Dazu basteln wir uns ein Stairwell: Legen Sie dafür die Dummy-Devices &#039;&#039;sw_Switch&#039;&#039; und &#039;&#039;sw_Light&#039;&#039; im Raum &#039;&#039;Stairwell&#039;&#039; an. Um die folgenden Befehle an einem Stück eingeben zu können, klicken Sie auf das umrahmte &amp;quot;+&amp;quot;-Symbol neben der Kommandozeile (Nur im Standard Style f18 vorhanden - beachten Sie dazu diesen Artikel [[Import_von_Code_Snippets]]), fügen die folgenden Zeilen mit copy&amp;amp;paste in das daraufhin erscheinende Dialogfeld ein und drücken auf {{Taste|Execute}}:&lt;br /&gt;
&lt;br /&gt;
 define sw_Switch dummy&lt;br /&gt;
 attr   sw_Switch room Stairwell&lt;br /&gt;
 attr   sw_Switch webCmd on&lt;br /&gt;
 define sw_Light dummy&lt;br /&gt;
 attr   sw_Light room Stairwell&lt;br /&gt;
[[Datei:RAW-Import firststeps.PNG]]&lt;br /&gt;
&lt;br /&gt;
Anschließend können Sie das Dialogfeld wieder schließen oder auch die nachfolgenden Befehle darüber eingeben. Beachten Sie, dass mit &#039;&#039;Execute&#039;&#039; alle Anweisungen aus dem Dialogfeld ausgeführt werden, was ggf. zu Fehlermeldungen führen kann, wenn z.B. ein Gerät bereits definiert ist. Zeilen mit Anweisungen, die bereits in die Konfiguration übernommen wurden, können Sie daher getrost löschen, um solche Effekte zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
Nun fehlt noch das Notify, welches auf &#039;&#039;sw_Switch:on&#039;&#039; reagiert und daraufhin zwei Befehle ausführt: &lt;br /&gt;
*Einschalten des Treppenhauslichts mit &amp;lt;code&amp;gt;set sw_Light 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 sw_Light 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_sw_Switch_on notify sw_Switch:on &lt;br /&gt;
        set sw_Light on;;define a1 at +00:01 set sw_Light 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_sw_Switch_on notify sw_Switch:on set sw_Light on;;sleep 60;;set sw_Light 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_sw_Switch_on notify sw_Switch:on set sw_Light 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 {{Link2CmdRef}}.&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;
Die für FHEM wichtigen Grundlagen der Programmiersprache Perl kann man in den ersten Kapiteln eines Perl-Buches oder diversen frei im Internet verfügbaren Perl-Tutorials nachlesen.&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>Afo-solar</name></author>
	</entry>
</feed>