<?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=DeeSPe</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=DeeSPe"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/DeeSPe"/>
	<updated>2026-04-10T15:31:01Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Tapo_Kameras&amp;diff=40844</id>
		<title>Tapo Kameras</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Tapo_Kameras&amp;diff=40844"/>
		<updated>2026-03-19T20:59:53Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* Cloud-Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Verifiziert für Tapo C530WS&lt;br /&gt;
&lt;br /&gt;
== Cloud-Installation ==&lt;br /&gt;
Die Kamera zunächst mit der von Tapo angegebenen App installieren und testen. Dafür muss ein Konto angelegt werden, mit Mailadresse und einem Passwort, das im Folgenden als &amp;lt;PWCLOUD&amp;gt; abgekürzt wird.&lt;br /&gt;
&lt;br /&gt;
Die Kamera erhält im internen Netz eine IP-Adresse, die im Folgenden als &amp;lt;IPKAMERA&amp;gt; abgekürzt wird.&lt;br /&gt;
&lt;br /&gt;
Wichtig: In der Tapo-App unter &amp;quot;Ich&amp;quot; unbedingt &amp;quot;Dienste von Drittanbietern&amp;quot; aufrufen und &amp;quot;Kompatibilität mit Drittanbietern&amp;quot; auf EIN stellen!&lt;br /&gt;
&lt;br /&gt;
== Stream und Snapshot ==&lt;br /&gt;
Hierfür muss zunächst ein so genanntes Kamera-Konto auf der Kamera angelegt werden, unter Einstellungen-&amp;gt;Erweiterte Einstellungen.&lt;br /&gt;
Dabei werden ein Username und ein Passwort festgelegt, die im Folgenden als &amp;lt;USERKAMERA&amp;gt; und &amp;lt;PWKAMERA&amp;gt; abgekürzt werden.&lt;br /&gt;
&lt;br /&gt;
Auf dem FHEM-Server (oder einem anderen System zum Testen) muss dann die ffmpeg-Suite installiert werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Kamera eingeschaltet ist, lässt sich dann der Stream der Kamera abgreifen mit&lt;br /&gt;
 ffplay rtsp://&amp;lt;USERKAMERA&amp;gt;:&amp;lt;PWKAMERA&amp;gt;@&amp;lt;IPKAMERA&amp;gt;:554/stream1&lt;br /&gt;
in voller Auflösung, sowie mit reduzierter Auflösung als&lt;br /&gt;
 ffplay rtsp://&amp;lt;USERKAMERA&amp;gt;:&amp;lt;PWKAMERA&amp;gt;@&amp;lt;IPKAMERA&amp;gt;:554/stream2&lt;br /&gt;
&lt;br /&gt;
Die Erstellung eines Snapshots wird über ein Shellskript gesteuert, mit folgendem Inhalt&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 OUT=&amp;quot;/opt/fhem/www/images/Tapo.jpg&amp;quot;&lt;br /&gt;
 URL=&amp;quot;/fhem/images/Tapo.jpg&amp;quot;&lt;br /&gt;
 ffmpeg -rtsp_transport tcp -y \&lt;br /&gt;
   -i &amp;quot;rtsp://&amp;lt;USERKAMERA&amp;gt;:&amp;lt;PWKAMERA&amp;gt;@&amp;lt;IPKAMERA&amp;gt;:554/stream1&amp;quot; \&lt;br /&gt;
   -frames:v 1 &amp;quot;$OUT&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 if [ $? -eq 0 ] &amp;amp;&amp;amp; [ -s &amp;quot;$OUT&amp;quot; ]; then&lt;br /&gt;
   echo &amp;quot;$URL&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
   echo &amp;quot;error creating image&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
Für das Weitere gehen wir davon aus, dass dieses Shellskript unter /opt/fhem/tapo liegt und durch den FHEM-Prozess ausführbar ist.&lt;br /&gt;
Wir definieren ein Dummy-Device mit zunächst minimalen Eigenschaften&lt;br /&gt;
 defmod TapoCam dummy&lt;br /&gt;
 attr TapoCam readingList snapshot&lt;br /&gt;
 attr TapoCam setList takePhoto:noArg &lt;br /&gt;
sowie ein DOIF&lt;br /&gt;
 defmod TapoCam.move.N DOIF ([TapoCam:state] =~ /^takePhoto$/) \&lt;br /&gt;
 ({my $res = qx(/opt/fhem/tapo/tapo_snapshot.sh);;\&lt;br /&gt;
  chomp($res);;\&lt;br /&gt;
  fhem(&amp;quot;setreading TapoCam snapshot $res&amp;quot;);;\&lt;br /&gt;
  fhem(&amp;quot;setreading TapoCam state ready&amp;quot;)\&lt;br /&gt;
 }\&lt;br /&gt;
 )&lt;br /&gt;
mit Attribut&lt;br /&gt;
 attr TapoCam.move.N do always&lt;br /&gt;
Dann sorgt der FHEM-Befehl&lt;br /&gt;
 set TapoCam takePhoto&lt;br /&gt;
dafür, dass ein Snapshot unter /opt/fhem/www/images gespeichert wird. Im FHEMWEB Frontend ist er dann unter /fhem/images/Tapo.jpg ansehbar&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO: Komfortabler machen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Kamerasteuerung mit Python==&lt;br /&gt;
Zur Vorbereitung folgende Schritte ggf. mit root-Rechten unternehmen:&lt;br /&gt;
 mkdir -p /opt/fhem/tapo&lt;br /&gt;
 cd /opt/fhem/tapo&lt;br /&gt;
 python3 -m venv .venv&lt;br /&gt;
 /opt/fhem/tapo/.venv/bin/pip install --upgrade pip&lt;br /&gt;
 /opt/fhem/tapo/.venv/bin/pip install pytapo&lt;br /&gt;
 chown -R fhem:dialout /opt/fhem/tapo&lt;br /&gt;
 chmod -R u+rwX /opt/fhem/tapo&lt;br /&gt;
Dadurch wird im Verzeichnis /opt/fhem/tapo eine virtuelle Umgebung für die TapoCam angelegt. Danach eine Datei /opt/fhem/tapo/tapo_testmethod.py anlegen, mit dem Inhalt&lt;br /&gt;
 #!/opt/fhem/tapo/.venv/bin/python3&lt;br /&gt;
 from pytapo import Tapo&lt;br /&gt;
 tapo = Tapo(&amp;quot;&amp;lt;IPKAMERA&amp;gt;&amp;quot;, &amp;quot;admin&amp;quot;, &amp;quot;&amp;lt;PWCLOUD&amp;gt;&amp;quot;)&lt;br /&gt;
 for m in dir(tapo):&lt;br /&gt;
    ml = m.lower()&lt;br /&gt;
    if any(x in ml for x in [&lt;br /&gt;
        &amp;quot;light&amp;quot;, &amp;quot;spot&amp;quot;, &amp;quot;privacy&amp;quot;, &amp;quot;mask&amp;quot;, &amp;quot;alarm&amp;quot;, &amp;quot;siren&amp;quot;,&lt;br /&gt;
        &amp;quot;speaker&amp;quot;, &amp;quot;micro&amp;quot;, &amp;quot;audio&amp;quot;, &amp;quot;talk&amp;quot;, &amp;quot;voice&amp;quot;, &amp;quot;ring&amp;quot;&lt;br /&gt;
    ]):&lt;br /&gt;
        print(m)&lt;br /&gt;
Wichtig: Für die Kamerasteuerung verlangt Tapo inzwischen das Cloud-Passwort und den Usernamen admin.&lt;br /&gt;
Dieses Python-Skript ausführbar machen und ausführen:&lt;br /&gt;
 chmod +x tapo_testmethod.py&lt;br /&gt;
 ./tapo_testmethod.py&lt;br /&gt;
Man erhält auf diese Weise eine unstrukturierte Liste alle Methode, die von der Kamera akzeptiert werden.&lt;br /&gt;
=== Kontrollprogramm ===&lt;br /&gt;
Das zentrale Python-Skript zur Kamerasteuerung liegt in der Datei /opt/fhem/tapo/tapo_control.py und hat den Inhalt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/opt/fhem/tapo/.venv/bin/python3&lt;br /&gt;
&lt;br /&gt;
import sys &lt;br /&gt;
import json&lt;br /&gt;
from pytapo import Tapo&lt;br /&gt;
HOST = &amp;quot;&amp;lt;IPKAMERA&amp;gt;&amp;quot;&lt;br /&gt;
USER = &amp;quot;admin&amp;quot;&lt;br /&gt;
PASSWORD = &amp;quot;&amp;lt;PWCLOUD&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
STEP = 10&lt;br /&gt;
&lt;br /&gt;
def out(obj):&lt;br /&gt;
    if isinstance(obj, (dict, list)):&lt;br /&gt;
        print(json.dumps(obj, ensure_ascii=False))&lt;br /&gt;
    else:&lt;br /&gt;
        print(str(obj))&lt;br /&gt;
&lt;br /&gt;
def ok(msg):&lt;br /&gt;
    print(msg)&lt;br /&gt;
    sys.exit(0)&lt;br /&gt;
&lt;br /&gt;
def err(msg):&lt;br /&gt;
    print(msg)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
def safe_call(label, func):&lt;br /&gt;
    try:&lt;br /&gt;
        return func()&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        return f&amp;quot;error: {e}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    tapo = Tapo(HOST, USER, PASSWORD)&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    err(f&amp;quot;login error: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cmd = sys.argv[1] if len(sys.argv) &amp;gt; 1 else &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    if cmd == &amp;quot;left&amp;quot;:&lt;br /&gt;
        tapo.moveMotor(-STEP, 0)&lt;br /&gt;
        ok(&amp;quot;ok left&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;right&amp;quot;:&lt;br /&gt;
        tapo.moveMotor(STEP, 0)&lt;br /&gt;
        ok(&amp;quot;ok right&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;up&amp;quot;:&lt;br /&gt;
        tapo.moveMotor(0, STEP)&lt;br /&gt;
        ok(&amp;quot;ok up&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;down&amp;quot;:&lt;br /&gt;
        tapo.moveMotor(0, -STEP)&lt;br /&gt;
        ok(&amp;quot;ok down&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;privacy_on&amp;quot;:&lt;br /&gt;
        res = tapo.setPrivacyMode(True)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;privacy_off&amp;quot;:&lt;br /&gt;
        res = tapo.setPrivacyMode(False)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;alarm_light_enable&amp;quot;:&lt;br /&gt;
        res = tapo.setAlarm(True, soundEnabled=False, lightEnabled=True)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;alarm_sound_enable&amp;quot;:&lt;br /&gt;
        res = tapo.setAlarm(True, soundEnabled=True, lightEnabled=False)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;alarm_both_enable&amp;quot;:&lt;br /&gt;
        res = tapo.setAlarm(True, soundEnabled=True, lightEnabled=True)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;alarm_off&amp;quot;:&lt;br /&gt;
        res = tapo.setAlarm(False)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;status&amp;quot;:&lt;br /&gt;
        status = {&lt;br /&gt;
            &amp;quot;privacy&amp;quot;: safe_call(&amp;quot;privacy&amp;quot;, lambda: tapo.getPrivacyMode()),&lt;br /&gt;
            &amp;quot;alarm&amp;quot;: safe_call(&amp;quot;alarm&amp;quot;, lambda: tapo.getAlarm()),&lt;br /&gt;
            &amp;quot;audio&amp;quot;: safe_call(&amp;quot;audio&amp;quot;, lambda: tapo.getAudioConfig()),&lt;br /&gt;
            &amp;quot;floodlight_status&amp;quot;: safe_call(&amp;quot;floodlight_status&amp;quot;, lambda: tapo.getFloodlightStatus()),&lt;br /&gt;
            &amp;quot;floodlight_config&amp;quot;: safe_call(&amp;quot;floodlight_config&amp;quot;, lambda: tapo.getFloodlightConfig()),&lt;br /&gt;
            &amp;quot;floodlight_capability&amp;quot;: safe_call(&amp;quot;floodlight_capability&amp;quot;, lambda: tapo.getFloodlightCapability()),&lt;br /&gt;
        }&lt;br /&gt;
        out(status)&lt;br /&gt;
&lt;br /&gt;
    else:&lt;br /&gt;
        err(&amp;quot;unknown command&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    err(f&amp;quot;command error: {e}&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Tapo_Kameras&amp;diff=40843</id>
		<title>Tapo Kameras</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Tapo_Kameras&amp;diff=40843"/>
		<updated>2026-03-19T20:56:01Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: Code von tapo_control.py berichtigt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Verifiziert für Tapo C530WS&lt;br /&gt;
&lt;br /&gt;
== Cloud-Installation ==&lt;br /&gt;
Die Kamera zunächst mit der von Tapo angegebenen App installieren und testen. Dafür muss ein Konto angelegt werden, mit Mailadresse und einem Passwort, das im Folgenden als &amp;lt;PWCLOUD&amp;gt; abgekürzt wird.&lt;br /&gt;
&lt;br /&gt;
Die Kamera erhält im internen Netz eine IP-Adresse, die im Folgenden als &amp;lt;IPKAMERA&amp;gt; abgekürzt wird.&lt;br /&gt;
&lt;br /&gt;
== Stream und Snapshot ==&lt;br /&gt;
Hierfür muss zunächst ein so genanntes Kamera-Konto auf der Kamera angelegt werden, unter Einstellungen-&amp;gt;Erweiterte Einstellungen.&lt;br /&gt;
Dabei werden ein Username und ein Passwort festgelegt, die im Folgenden als &amp;lt;USERKAMERA&amp;gt; und &amp;lt;PWKAMERA&amp;gt; abgekürzt werden.&lt;br /&gt;
&lt;br /&gt;
Auf dem FHEM-Server (oder einem anderen System zum Testen) muss dann die ffmpeg-Suite installiert werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Kamera eingeschaltet ist, lässt sich dann der Stream der Kamera abgreifen mit&lt;br /&gt;
 ffplay rtsp://&amp;lt;USERKAMERA&amp;gt;:&amp;lt;PWKAMERA&amp;gt;@&amp;lt;IPKAMERA&amp;gt;:554/stream1&lt;br /&gt;
in voller Auflösung, sowie mit reduzierter Auflösung als&lt;br /&gt;
 ffplay rtsp://&amp;lt;USERKAMERA&amp;gt;:&amp;lt;PWKAMERA&amp;gt;@&amp;lt;IPKAMERA&amp;gt;:554/stream2&lt;br /&gt;
&lt;br /&gt;
Die Erstellung eines Snapshots wird über ein Shellskript gesteuert, mit folgendem Inhalt&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 OUT=&amp;quot;/opt/fhem/www/images/Tapo.jpg&amp;quot;&lt;br /&gt;
 URL=&amp;quot;/fhem/images/Tapo.jpg&amp;quot;&lt;br /&gt;
 ffmpeg -rtsp_transport tcp -y \&lt;br /&gt;
   -i &amp;quot;rtsp://&amp;lt;USERKAMERA&amp;gt;:&amp;lt;PWKAMERA&amp;gt;@&amp;lt;IPKAMERA&amp;gt;:554/stream1&amp;quot; \&lt;br /&gt;
   -frames:v 1 &amp;quot;$OUT&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 if [ $? -eq 0 ] &amp;amp;&amp;amp; [ -s &amp;quot;$OUT&amp;quot; ]; then&lt;br /&gt;
   echo &amp;quot;$URL&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
   echo &amp;quot;error creating image&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
Für das Weitere gehen wir davon aus, dass dieses Shellskript unter /opt/fhem/tapo liegt und durch den FHEM-Prozess ausführbar ist.&lt;br /&gt;
Wir definieren ein Dummy-Device mit zunächst minimalen Eigenschaften&lt;br /&gt;
 defmod TapoCam dummy&lt;br /&gt;
 attr TapoCam readingList snapshot&lt;br /&gt;
 attr TapoCam setList takePhoto:noArg &lt;br /&gt;
sowie ein DOIF&lt;br /&gt;
 defmod TapoCam.move.N DOIF ([TapoCam:state] =~ /^takePhoto$/) \&lt;br /&gt;
 ({my $res = qx(/opt/fhem/tapo/tapo_snapshot.sh);;\&lt;br /&gt;
  chomp($res);;\&lt;br /&gt;
  fhem(&amp;quot;setreading TapoCam snapshot $res&amp;quot;);;\&lt;br /&gt;
  fhem(&amp;quot;setreading TapoCam state ready&amp;quot;)\&lt;br /&gt;
 }\&lt;br /&gt;
 )&lt;br /&gt;
mit Attribut&lt;br /&gt;
 attr TapoCam.move.N do always&lt;br /&gt;
Dann sorgt der FHEM-Befehl&lt;br /&gt;
 set TapoCam takePhoto&lt;br /&gt;
dafür, dass ein Snapshot unter /opt/fhem/www/images gespeichert wird. Im FHEMWEB Frontend ist er dann unter /fhem/images/Tapo.jpg ansehbar&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO: Komfortabler machen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Kamerasteuerung mit Python==&lt;br /&gt;
Zur Vorbereitung folgende Schritte ggf. mit root-Rechten unternehmen:&lt;br /&gt;
 mkdir -p /opt/fhem/tapo&lt;br /&gt;
 cd /opt/fhem/tapo&lt;br /&gt;
 python3 -m venv .venv&lt;br /&gt;
 /opt/fhem/tapo/.venv/bin/pip install --upgrade pip&lt;br /&gt;
 /opt/fhem/tapo/.venv/bin/pip install pytapo&lt;br /&gt;
 chown -R fhem:dialout /opt/fhem/tapo&lt;br /&gt;
 chmod -R u+rwX /opt/fhem/tapo&lt;br /&gt;
Dadurch wird im Verzeichnis /opt/fhem/tapo eine virtuelle Umgebung für die TapoCam angelegt. Danach eine Datei /opt/fhem/tapo/tapo_testmethod.py anlegen, mit dem Inhalt&lt;br /&gt;
 #!/opt/fhem/tapo/.venv/bin/python3&lt;br /&gt;
 from pytapo import Tapo&lt;br /&gt;
 tapo = Tapo(&amp;quot;&amp;lt;IPKAMERA&amp;gt;&amp;quot;, &amp;quot;admin&amp;quot;, &amp;quot;&amp;lt;PWCLOUD&amp;gt;&amp;quot;)&lt;br /&gt;
 for m in dir(tapo):&lt;br /&gt;
    ml = m.lower()&lt;br /&gt;
    if any(x in ml for x in [&lt;br /&gt;
        &amp;quot;light&amp;quot;, &amp;quot;spot&amp;quot;, &amp;quot;privacy&amp;quot;, &amp;quot;mask&amp;quot;, &amp;quot;alarm&amp;quot;, &amp;quot;siren&amp;quot;,&lt;br /&gt;
        &amp;quot;speaker&amp;quot;, &amp;quot;micro&amp;quot;, &amp;quot;audio&amp;quot;, &amp;quot;talk&amp;quot;, &amp;quot;voice&amp;quot;, &amp;quot;ring&amp;quot;&lt;br /&gt;
    ]):&lt;br /&gt;
        print(m)&lt;br /&gt;
Wichtig: Für die Kamerasteuerung verlangt Tapo inzwischen das Cloud-Passwort und den Usernamen admin.&lt;br /&gt;
Dieses Python-Skript ausführbar machen und ausführen:&lt;br /&gt;
 chmod +x tapo_testmethod.py&lt;br /&gt;
 ./tapo_testmethod.py&lt;br /&gt;
Man erhält auf diese Weise eine unstrukturierte Liste alle Methode, die von der Kamera akzeptiert werden.&lt;br /&gt;
=== Kontrollprogramm ===&lt;br /&gt;
Das zentrale Python-Skript zur Kamerasteuerung liegt in der Datei /opt/fhem/tapo/tapo_control.py und hat den Inhalt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/opt/fhem/tapo/.venv/bin/python3&lt;br /&gt;
&lt;br /&gt;
import sys &lt;br /&gt;
import json&lt;br /&gt;
from pytapo import Tapo&lt;br /&gt;
HOST = &amp;quot;&amp;lt;IPKAMERA&amp;gt;&amp;quot;&lt;br /&gt;
USER = &amp;quot;admin&amp;quot;&lt;br /&gt;
PASSWORD = &amp;quot;&amp;lt;PWCLOUD&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
STEP = 10&lt;br /&gt;
&lt;br /&gt;
def out(obj):&lt;br /&gt;
    if isinstance(obj, (dict, list)):&lt;br /&gt;
        print(json.dumps(obj, ensure_ascii=False))&lt;br /&gt;
    else:&lt;br /&gt;
        print(str(obj))&lt;br /&gt;
&lt;br /&gt;
def ok(msg):&lt;br /&gt;
    print(msg)&lt;br /&gt;
    sys.exit(0)&lt;br /&gt;
&lt;br /&gt;
def err(msg):&lt;br /&gt;
    print(msg)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
def safe_call(label, func):&lt;br /&gt;
    try:&lt;br /&gt;
        return func()&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        return f&amp;quot;error: {e}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    tapo = Tapo(HOST, USER, PASSWORD)&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    err(f&amp;quot;login error: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cmd = sys.argv[1] if len(sys.argv) &amp;gt; 1 else &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    if cmd == &amp;quot;left&amp;quot;:&lt;br /&gt;
        tapo.moveMotor(-STEP, 0)&lt;br /&gt;
        ok(&amp;quot;ok left&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;right&amp;quot;:&lt;br /&gt;
        tapo.moveMotor(STEP, 0)&lt;br /&gt;
        ok(&amp;quot;ok right&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;up&amp;quot;:&lt;br /&gt;
        tapo.moveMotor(0, STEP)&lt;br /&gt;
        ok(&amp;quot;ok up&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;down&amp;quot;:&lt;br /&gt;
        tapo.moveMotor(0, -STEP)&lt;br /&gt;
        ok(&amp;quot;ok down&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;privacy_on&amp;quot;:&lt;br /&gt;
        res = tapo.setPrivacyMode(True)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;privacy_off&amp;quot;:&lt;br /&gt;
        res = tapo.setPrivacyMode(False)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;alarm_light_enable&amp;quot;:&lt;br /&gt;
        res = tapo.setAlarm(True, soundEnabled=False, lightEnabled=True)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;alarm_sound_enable&amp;quot;:&lt;br /&gt;
        res = tapo.setAlarm(True, soundEnabled=True, lightEnabled=False)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;alarm_both_enable&amp;quot;:&lt;br /&gt;
        res = tapo.setAlarm(True, soundEnabled=True, lightEnabled=True)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;alarm_off&amp;quot;:&lt;br /&gt;
        res = tapo.setAlarm(False)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;status&amp;quot;:&lt;br /&gt;
        status = {&lt;br /&gt;
            &amp;quot;privacy&amp;quot;: safe_call(&amp;quot;privacy&amp;quot;, lambda: tapo.getPrivacyMode()),&lt;br /&gt;
            &amp;quot;alarm&amp;quot;: safe_call(&amp;quot;alarm&amp;quot;, lambda: tapo.getAlarm()),&lt;br /&gt;
            &amp;quot;audio&amp;quot;: safe_call(&amp;quot;audio&amp;quot;, lambda: tapo.getAudioConfig()),&lt;br /&gt;
            &amp;quot;floodlight_status&amp;quot;: safe_call(&amp;quot;floodlight_status&amp;quot;, lambda: tapo.getFloodlightStatus()),&lt;br /&gt;
            &amp;quot;floodlight_config&amp;quot;: safe_call(&amp;quot;floodlight_config&amp;quot;, lambda: tapo.getFloodlightConfig()),&lt;br /&gt;
            &amp;quot;floodlight_capability&amp;quot;: safe_call(&amp;quot;floodlight_capability&amp;quot;, lambda: tapo.getFloodlightCapability()),&lt;br /&gt;
        }&lt;br /&gt;
        out(status)&lt;br /&gt;
&lt;br /&gt;
    else:&lt;br /&gt;
        err(&amp;quot;unknown command&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    err(f&amp;quot;command error: {e}&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Tapo_Kameras&amp;diff=40842</id>
		<title>Tapo Kameras</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Tapo_Kameras&amp;diff=40842"/>
		<updated>2026-03-19T15:09:21Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: simple name correction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Verifiziert für Tapo C530WS&lt;br /&gt;
&lt;br /&gt;
== Cloud-Installation ==&lt;br /&gt;
Die Kamera zunächst mit der von Tapo angegebenen App installieren und testen. Dafür muss ein Konto angelegt werden, mit Mailadresse und einem Passwort, das im Folgenden als &amp;lt;PWCLOUD&amp;gt; abgekürzt wird.&lt;br /&gt;
&lt;br /&gt;
Die Kamera erhält im internen Netz eine IP-Adresse, die im Folgenden als &amp;lt;IPKAMERA&amp;gt; abgekürzt wird.&lt;br /&gt;
&lt;br /&gt;
== Stream und Snapshot ==&lt;br /&gt;
Hierfür muss zunächst ein so genanntes Kamera-Konto auf der Kamera angelegt werden, unter Einstellungen-&amp;gt;Erweiterte Einstellungen.&lt;br /&gt;
Dabei werden ein Username und ein Passwort festgelegt, die im Folgenden als &amp;lt;USERKAMERA&amp;gt; und &amp;lt;PWKAMERA&amp;gt; abgekürzt werden.&lt;br /&gt;
&lt;br /&gt;
Auf dem FHEM-Server (oder einem anderen System zum Testen) muss dann die ffmpeg-Suite installiert werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Kamera eingeschaltet ist, lässt sich dann der Stream der Kamera abgreifen mit&lt;br /&gt;
 ffplay rtsp://&amp;lt;USERKAMERA&amp;gt;:&amp;lt;PWKAMERA&amp;gt;@&amp;lt;IPKAMERA&amp;gt;:554/stream1&lt;br /&gt;
in voller Auflösung, sowie mit reduzierter Auflösung als&lt;br /&gt;
 ffplay rtsp://&amp;lt;USERKAMERA&amp;gt;:&amp;lt;PWKAMERA&amp;gt;@&amp;lt;IPKAMERA&amp;gt;:554/stream2&lt;br /&gt;
&lt;br /&gt;
Die Erstellung eines Snapshots wird über ein Shellskript gesteuert, mit folgendem Inhalt&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 OUT=&amp;quot;/opt/fhem/www/images/Tapo.jpg&amp;quot;&lt;br /&gt;
 URL=&amp;quot;/fhem/images/Tapo.jpg&amp;quot;&lt;br /&gt;
 ffmpeg -rtsp_transport tcp -y \&lt;br /&gt;
   -i &amp;quot;rtsp://&amp;lt;USERKAMERA&amp;gt;:&amp;lt;PWKAMERA&amp;gt;@&amp;lt;IPKAMERA&amp;gt;:554/stream1&amp;quot; \&lt;br /&gt;
   -frames:v 1 &amp;quot;$OUT&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 if [ $? -eq 0 ] &amp;amp;&amp;amp; [ -s &amp;quot;$OUT&amp;quot; ]; then&lt;br /&gt;
   echo &amp;quot;$URL&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
   echo &amp;quot;error creating image&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
Für das Weitere gehen wir davon aus, dass dieses Shellskript unter /opt/fhem/tapo liegt und durch den FHEM-Prozess ausführbar ist.&lt;br /&gt;
Wir definieren ein Dummy-Device mit zunächst minimalen Eigenschaften&lt;br /&gt;
 defmod TapoCam dummy&lt;br /&gt;
 attr TapoCam readingList snapshot&lt;br /&gt;
 attr TapoCam setList takePhoto:noArg &lt;br /&gt;
sowie ein DOIF&lt;br /&gt;
 defmod TapoCam.move.N DOIF ([TapoCam:state] =~ /^takePhoto$/) \&lt;br /&gt;
 ({my $res = qx(/opt/fhem/tapo/tapo_snapshot.sh);;\&lt;br /&gt;
  chomp($res);;\&lt;br /&gt;
  fhem(&amp;quot;setreading TapoCam snapshot $res&amp;quot;);;\&lt;br /&gt;
  fhem(&amp;quot;setreading TapoCam state ready&amp;quot;)\&lt;br /&gt;
 }\&lt;br /&gt;
 )&lt;br /&gt;
mit Attribut&lt;br /&gt;
 attr TapoCam.move.N do always&lt;br /&gt;
Dann sorgt der FHEM-Befehl&lt;br /&gt;
 set TapoCam takePhoto&lt;br /&gt;
dafür, dass ein Snapshot unter /opt/fhem/www/images gespeichert wird. Im FHEMWEB Frontend ist er dann unter /fhem/images/Tapo.jpg ansehbar&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO: Komfortabler machen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Kamerasteuerung mit Python==&lt;br /&gt;
Zur Vorbereitung folgende Schritte ggf. mit root-Rechten unternehmen:&lt;br /&gt;
 mkdir -p /opt/fhem/tapo&lt;br /&gt;
 cd /opt/fhem/tapo&lt;br /&gt;
 python3 -m venv .venv&lt;br /&gt;
 /opt/fhem/tapo/.venv/bin/pip install --upgrade pip&lt;br /&gt;
 /opt/fhem/tapo/.venv/bin/pip install pytapo&lt;br /&gt;
 chown -R fhem:dialout /opt/fhem/tapo&lt;br /&gt;
 chmod -R u+rwX /opt/fhem/tapo&lt;br /&gt;
Dadurch wird im Verzeichnis /opt/fhem/tapo eine virtuelle Umgebung für die TapoCam angelegt. Danach eine Datei /opt/fhem/tapo/tapo_testmethod.py anlegen, mit dem Inhalt&lt;br /&gt;
 #!/opt/fhem/tapo/.venv/bin/python3&lt;br /&gt;
 from pytapo import Tapo&lt;br /&gt;
 tapo = Tapo(&amp;quot;&amp;lt;IPKAMERA&amp;gt;&amp;quot;, &amp;quot;admin&amp;quot;, &amp;quot;&amp;lt;PWCLOUD&amp;gt;&amp;quot;)&lt;br /&gt;
 for m in dir(tapo):&lt;br /&gt;
    ml = m.lower()&lt;br /&gt;
    if any(x in ml for x in [&lt;br /&gt;
        &amp;quot;light&amp;quot;, &amp;quot;spot&amp;quot;, &amp;quot;privacy&amp;quot;, &amp;quot;mask&amp;quot;, &amp;quot;alarm&amp;quot;, &amp;quot;siren&amp;quot;,&lt;br /&gt;
        &amp;quot;speaker&amp;quot;, &amp;quot;micro&amp;quot;, &amp;quot;audio&amp;quot;, &amp;quot;talk&amp;quot;, &amp;quot;voice&amp;quot;, &amp;quot;ring&amp;quot;&lt;br /&gt;
    ]):&lt;br /&gt;
        print(m)&lt;br /&gt;
Wichtig: Für die Kamerasteuerung verlangt Tapo inzwischen das Cloud-Passwort und den Usernamen admin.&lt;br /&gt;
Dieses Python-Skript ausführbar machen und ausführen:&lt;br /&gt;
 chmod +x tapo_testmethod.py&lt;br /&gt;
 ./tapo_testmethod.py&lt;br /&gt;
Man erhält auf diese Weise eine unstrukturierte Liste alle Methode, die von der Kamera akzeptiert werden.&lt;br /&gt;
=== Kontrollprogramm ===&lt;br /&gt;
Das zentrale Python-Skript zur Kamerasteuerung liegt in der Datei /opt/fhem/tapo/tapo_controlpy und hat den Inhalt&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
#!/opt/fhem/tapo/.venv/bin/python3&lt;br /&gt;
&lt;br /&gt;
import sys &lt;br /&gt;
import json&lt;br /&gt;
from pytapo import Tapo&lt;br /&gt;
HOST = &amp;quot;&amp;lt;IPKAMERA&amp;gt;&amp;quot;&lt;br /&gt;
USER = &amp;quot;admin&amp;quot;&lt;br /&gt;
PASSWORD = &amp;quot;&amp;lt;PWCLOUD&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
STEP = 10&lt;br /&gt;
&lt;br /&gt;
def out(obj):&lt;br /&gt;
    if isinstance(obj, (dict, list)):&lt;br /&gt;
        print(json.dumps(obj, ensure_ascii=False))&lt;br /&gt;
    else:&lt;br /&gt;
        print(str(obj))&lt;br /&gt;
&lt;br /&gt;
def ok(msg):&lt;br /&gt;
    print(msg)&lt;br /&gt;
    sys.exit(0)&lt;br /&gt;
&lt;br /&gt;
def err(msg):&lt;br /&gt;
    print(msg)&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
def safe_call(label, func):&lt;br /&gt;
    try:def safe_call(label, func):&lt;br /&gt;
    try:&lt;br /&gt;
        return func()&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        return f&amp;quot;error: {e}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    tapo = Tapo(HOST, USER, PASSWORD)&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    err(f&amp;quot;login error: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cmd = sys.argv[1] if len(sys.argv) &amp;gt; 1 else &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    if cmd == &amp;quot;left&amp;quot;:&lt;br /&gt;
        tapo.moveMotor(-STEP, 0)&lt;br /&gt;
        ok(&amp;quot;ok left&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;right&amp;quot;:&lt;br /&gt;
        tapo.moveMotor(STEP, 0)&lt;br /&gt;
        ok(&amp;quot;ok right&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;up&amp;quot;:&lt;br /&gt;
        tapo.moveMotor(0, STEP)&lt;br /&gt;
        ok(&amp;quot;ok up&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;down&amp;quot;:&lt;br /&gt;
        tapo.moveMotor(0, -STEP)&lt;br /&gt;
        ok(&amp;quot;ok down&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;privacy_on&amp;quot;:&lt;br /&gt;
        res = tapo.setPrivacyMode(True)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;privacy_off&amp;quot;:&lt;br /&gt;
        res = tapo.setPrivacyMode(False)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;alarm_light_enable&amp;quot;:&lt;br /&gt;
        res = tapo.setAlarm(True, soundEnabled=False, lightEnabled=True)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;alarm_sound_enable&amp;quot;:&lt;br /&gt;
        res = tapo.setAlarm(True, soundEnabled=True, lightEnabled=False)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;alarm_both_enable&amp;quot;:&lt;br /&gt;
        res = tapo.setAlarm(True, soundEnabled=True, lightEnabled=True)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;alarm_off&amp;quot;:&lt;br /&gt;
        res = tapo.setAlarm(False)&lt;br /&gt;
        out(res)&lt;br /&gt;
&lt;br /&gt;
    elif cmd == &amp;quot;status&amp;quot;:&lt;br /&gt;
        status = {&lt;br /&gt;
            &amp;quot;privacy&amp;quot;: safe_call(&amp;quot;privacy&amp;quot;, lambda: tapo.getPrivacyMode()),&lt;br /&gt;
            &amp;quot;alarm&amp;quot;: safe_call(&amp;quot;alarm&amp;quot;, lambda: tapo.getAlarm()),&lt;br /&gt;
            &amp;quot;audio&amp;quot;: safe_call(&amp;quot;audio&amp;quot;, lambda: tapo.getAudioConfig()),&lt;br /&gt;
            &amp;quot;floodlight_status&amp;quot;: safe_call(&amp;quot;floodlight_status&amp;quot;, lambda: tapo.getFloodlightStatus()),&lt;br /&gt;
            &amp;quot;floodlight_config&amp;quot;: safe_call(&amp;quot;floodlight_config&amp;quot;, lambda: tapo.getFloodlightConfig()),&lt;br /&gt;
            &amp;quot;floodlight_capability&amp;quot;: safe_call(&amp;quot;floodlight_capability&amp;quot;, lambda: tapo.getFloodlightCapability()),&lt;br /&gt;
        }&lt;br /&gt;
        out(status)&lt;br /&gt;
&lt;br /&gt;
    else:&lt;br /&gt;
        err(&amp;quot;unknown command&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    err(f&amp;quot;command error: {e}&amp;quot;)&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=35779</id>
		<title>HOMEMODE</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=35779"/>
		<updated>2021-05-28T08:39:02Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* HomeCMDmodeAlarm-&amp;lt;armaway/armhome/armnight/disarm&amp;gt; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Das Modul wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden und viele grundlegende Automationen durch Hinzufügen weiterer Geräte bereitzustellen.&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=HOMEMODE&lt;br /&gt;
|ModFTopic=64317&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=22_HOMEMODE.pm&lt;br /&gt;
|ModOwner=DeeSPe&lt;br /&gt;
}}&lt;br /&gt;
Diese Seite beschreibt die Konfiguration und Verwendung des Moduls &#039;&#039;22_HOMEMODE.pm&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Das Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier aufgeführte Anleitung entspricht dem Modul in Version 1.4.2.&lt;br /&gt;
&lt;br /&gt;
Viele allgemein typische Automationen sind bereits fertig integriert.&lt;br /&gt;
&lt;br /&gt;
Die jeweils per Event auszuführenden Befehle können in den entsprechenden &#039;&#039;HomeCMD...&#039;&#039; Atributen hinterlegt werden und so in der Detail Ansicht des HOMEMODE Geräts übersichtlich angezeigt und bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen vieler notify/DOIF ist durch den Einsatz von &#039;&#039;HOMEMODE&#039;&#039; unnötig.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wurde das Modul für die Verwendung mit HomeKit als GUI optimiert. Alle möglichen Mappings für Homebridge sind bereits enthalten und können über einen set Befehl aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:HOMEMODE_Device.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Um Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; benutzen zu können benötigt man als Mindestvoraussetzung ein bereits angelegtes RESIDENTS Gerät mit entsprechenden ROOMMATE/GUEST Geräten.&lt;br /&gt;
&lt;br /&gt;
==Mögliche Automationen==&lt;br /&gt;
Alle Automationen sind optional.&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Beispiele:&lt;br /&gt;
*Änderung des Zustands von ROOMMATE/GUEST Geräten anhand von PRESENCE Geräten&lt;br /&gt;
*Bereitstellung von CMD Attributen für mögliche Events rund um den Heim-/Hausstatus&lt;br /&gt;
*Bereitstellung von Platzhaltern innerhalb der CMD Attribute, z.B. %MODE%, %SEASON% oder %PREVMODE% für die Werte der Readings mode, season und prevMode&lt;br /&gt;
*Einbindung von Kontakt Sensoren, für z.B. Offen-Warnungen nach bestimmten Zeitraum oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Kontakt Sensor konfiguriert werden&lt;br /&gt;
*Einbindung von Bewegungs Sensoren, für z.B. automatische Licht Schaltungen oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Bewegungs Sensor konfiguriert werden&lt;br /&gt;
*Darstellungen und Auslösen von Sabotage Alarmen der eingebundenen Kontakt- und Bewegungssensoren&lt;br /&gt;
*Einbindung von jeweils einem Temperatur und Luftfeuchtigkeitssensor&lt;br /&gt;
*Einbindung eines lokalen Wetter Devices zur Ermittlung und Ausgabe der lokalen Wetterdaten und Erzeugung der Wettervorhersage&lt;br /&gt;
*Einbindung von Power und Energy Sensoren zur Ermittlung der Gesamtmengen&lt;br /&gt;
*Einbindung von Calendar/holiday Devices für spezielle im HOMEMODE Device verfügbar zu machende Events&lt;br /&gt;
*von Uhrzeit abhängiger Anwesend-Modus&lt;br /&gt;
*Bewohner unabhängige Tageszeit-Modus&lt;br /&gt;
*Alarm-Modus&lt;br /&gt;
*DND-Modus&lt;br /&gt;
*Überwachung von Batteriewerten&lt;br /&gt;
&lt;br /&gt;
=HOMEMODE-Gerät=&lt;br /&gt;
==Definition==&lt;br /&gt;
Das HOMEMODE Gerät - hier mit dem Namen &#039;&#039;Home&#039;&#039; versehen - selbst wird über&lt;br /&gt;
 define Home HOMEMODE&lt;br /&gt;
bei Vorhandensein nur eines RESIDENTS Geräts definiert.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung mehrerer RESIDENTS Geräte muss das Master RESIDENTS Gerät beim Definieren mit angegeben werden&lt;br /&gt;
 define Home HOMEMODE rgr_Residents&lt;br /&gt;
Dieses Modul verwendet das globale Attribut &#039;&#039;language&#039;&#039; zur Bestimmung der Anzeigedaten (Standard: EN=english). Für deutsche Ausgabedaten kann das Attribut&lt;br /&gt;
 attr global language DE&lt;br /&gt;
gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Alternativ kann auch nur das HOMEMODE Gerät auf deutsch geändert werden&lt;br /&gt;
 attr Home HomeLanguage DE&lt;br /&gt;
&lt;br /&gt;
==Set-Befehle==&lt;br /&gt;
&#039;&#039;set &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 set Home anyoneElseAtHome &amp;lt;on/off&amp;gt;&lt;br /&gt;
einschalten wenn jemand anderes zu Hause ist der kein registrierter ROOMMATE/GUEST ist, z.B. Hund/Katze oder unregistrierte Gäste&amp;lt;br&amp;gt;&lt;br /&gt;
wenn eingeschaltet, dann wird der Alarm Mode beim Verlassen statt auf armaway nur auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
schaltet man ein und hat schon Haus/Wohnung verlassen, so wird der Alarm Mode von armaway auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AEAH%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd &amp;lt;on/off&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. um Benachrichtigungen zu deaktivieren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DND%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd-for-minutes &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus für die angegebenen Minuten ein&amp;lt;br&amp;gt;&lt;br /&gt;
kehrt danach zum vorherigen (tageszeitabhängigen) Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home deviceDisable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
deaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home deviceEnable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
reaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home location &amp;lt;arrival/home/bed/underway/wayhome&amp;gt;&lt;br /&gt;
manueller Ortswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%LOCATION%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home mode &amp;lt;morning/day/afternoon/evening/night/gotosleep/asleep/absent/gone/home&amp;gt;&lt;br /&gt;
manueller Moduswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm &amp;lt;armaway/armhome/armnight/disarm&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVAMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm-for-minutes &amp;lt;armaway/armhome/armnight/disarm&amp;gt; &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus für die angegebenen Minuten ein&lt;br /&gt;
kehrt danach zum vorherigen Alarm Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home updateHomebridgeMapping&lt;br /&gt;
aktualisiert das Attribut homebridgeMapping des HOMEMODDE Device abhängig von den verfügbaren Informationen&lt;br /&gt;
&lt;br /&gt;
 set Home updateInternalForce&lt;br /&gt;
führt eine Aktualisierung der Internals des HOMEMODE Device aus&amp;lt;br&amp;gt;&lt;br /&gt;
das sollte manuell benutzt werden nachdem das Modul aktualisiert und nur ein reload statt restart gemacht wurde&amp;lt;br&amp;gt;&lt;br /&gt;
auch wenn man überwachte/kontrollierte Geräte ändert sollte man diesen Befehl manuell ausführen, z.B. neue ROOMMATE/GUEST im RESIDENTS Device hinzufügt, oder Geräte in FHEM hinzufügt die dem selben Devspec wie bisher entsprechen (Steckdosen, Sensoren)&lt;br /&gt;
&lt;br /&gt;
==Get-Befehle==&lt;br /&gt;
&#039;&#039;get &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 get Home contactsOpen &amp;lt;all/doorsinside/doorsoutside/doorsmain/outside/windows&amp;gt;&lt;br /&gt;
Liste von all/doorsinside/doorsoutside/doorsmain/outside/windows offenen Kontakten&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%OPEN%&#039;&#039;&#039;, &#039;&#039;&#039;%OPENCT%&#039;&#039;&#039; und &#039;&#039;&#039;%OPENHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home devicesDisabled&lt;br /&gt;
Anzeige der für HOMEMODE deaktivierten Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home mode&lt;br /&gt;
Anzeige von mode&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home modeAlarm&lt;br /&gt;
Anzeige von modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%MODEALARM%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home publicIP&lt;br /&gt;
holen der öffentlichen IP Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%IP%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home sensorsTampered&lt;br /&gt;
Liste aller sabotierten Sensoren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%TAMPERED%&#039;&#039;&#039;, &#039;&#039;&#039;%TAMPEREDCT%&#039;&#039;&#039; und &#039;&#039;&#039;%TAMPEREDHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weather &amp;lt;long/short&amp;gt;&lt;br /&gt;
Wetterinfo im angegebenen Format anzeigen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%WEATHER%&#039;&#039;&#039; und &#039;&#039;&#039;%WEATHERLONG%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weatherForecast [TAG]&lt;br /&gt;
Wettervorhersage für angegebenen Tag&amp;lt;br&amp;gt;&lt;br /&gt;
wenn kein Tag angegeben wird, so wird die Vorhersage für morgen (2) ausgegeben&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%FORECAST%&#039;&#039;&#039; (morgen) und &#039;&#039;&#039;%FORECASTTODAY%&#039;&#039;&#039; (heute) sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
==webCmd==&lt;br /&gt;
Die Schaltmöglichkeiten sind absichtlich gering gehalten, denn im normalen Betrieb sollte nicht mehr benötigt werden als die hier gebotenen.&amp;lt;br&amp;gt;&lt;br /&gt;
Es lässt sich der Alarm Mode manuell umschalten und beim Klick auf das devStateIcon wird der DND Mode an- und ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
==Grundkonfiguration==&lt;br /&gt;
&lt;br /&gt;
Diese Grundkonfiguration sollte immer als erstes erfolgen um entsprechend darauf weiter aufzubauen. Als zweiter Schritt ist dann die erweiterte Konfiguration angedacht.&lt;br /&gt;
&lt;br /&gt;
Bei der Namensvergabe der Attribute vom HOMEMODE Device wurde nach einem möglichst kurzem Prefix gesucht und nach vielen Tests wurde sich für das Prefix &amp;quot;Home&amp;quot; entschieden. Das hat den Vorteil, dass alle Attribute beisammen stehen und diese auch (durch den Großbuchstaben am Anfang) ziemlich weit oben in der Liste der Attribute stehen. Ebenso wurde bei der Namensvergabe versucht, selbsterklärende Namen zu wählen. Das hat den Vorteil, dass man relativ einfach genau erkennen kann wofür das Attribut steht, allerdings auch den Nachteil, dass einige Attributnamen ganz schön lang werden.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedUserAttr====&lt;br /&gt;
Als Erstes wird empfohlen, gerade für Anfänger, das Attribut &amp;quot;HomeAdvancedUserAttr&amp;quot; auf 1 zu setzen. Dadurch werden viel mehr HomeCMD Attribute freigeschaltet. Diese werden im Attribut userattr des HOMEMODE Device hinzugefügt.&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAlarmModes====&lt;br /&gt;
Als Nächstes sollte man sich entscheiden, ob die Alarm Modus evtl. nicht automatisch zum jeweiligen Modus des HOMEMODE Device geschaltet werden sollen. Standardmäßig werden die Alarm Modus automatisch gesteuert. Ist das nicht erwünscht, so ist der Wert dieses Attributs auf 0 zu setzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;absent&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armaway&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;home&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;disarm&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;asleep&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armnight&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Alarm Modus &amp;quot;armhome&amp;quot; kann nur manuell gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeAutoArrival====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird bei Ankunft jedes ROOMMATE/GUEST die location des jeweiligen ROOMMATE/GUEST für die hier angegeben Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt. Beim ersten nach Hause kommenden ROOMMATE/GUEST wird zusätzlich die location des HOMEMODE Device für die hier eingestellte Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Ablauf der hier eingestellten Minuten wechselt das jeweilige Device von &amp;quot;arrival&amp;quot; auf &amp;quot;home&amp;quot;, sofern es noch die location &amp;quot;arrival&amp;quot; hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAsleep====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Schlafengehen (gotosleep) jedes ROOMMATE/GUEST ein Timer gestartet, der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;asleep&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAwoken====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Erwachen (&amp;quot;awoken&amp;quot; oder &amp;quot;home nach asleep&amp;quot;) jedes ROOMMATE/GUEST dieser auf &amp;quot;awoken&amp;quot; gesetzt und ein Timer gestartet, der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;home&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoDaytime====&lt;br /&gt;
Standardmäßig wird mode anhand der Tageszeit automatisch gesetzt. Ist das nicht gewünscht, kann das über den Wert 0 deaktiviert werden. Dann stehen allerdings tageszeitabhängigen mode(s) nicht mehr zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeResidentCmdDelay====&lt;br /&gt;
Normalerweise werden die Events der ROOMMATE/GUEST vor denen des HOMEMODE Device ausgeführt. Um das zu ändern wird die Ausführung der ROOMMATE/GUEST HomeCMD Attribute um die hier eingestellte Zeit in Sekunden verzögert.&amp;lt;br&amp;gt;&lt;br /&gt;
Je genauer der Name des jeweiligen HomeCMD Attributs beschrieben wird, desto später wird dieser ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Das heißt z.B. dass HomeCMDmode vor HomeCMDmode-absent und dieser wiederrum vor HomeCMDmode-absent-ROOMMATE/GUEST-NAME ausgeführt wird usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Um das normale Verhalten wiederherzustellen ist der Wert dieses Attributs auf 0 zu setzen. Dann wird HomeCMDmode-absent-ROOMMATE/GUEST-NAME vor HomeCMDmode-absent und vor HomeCMDmode ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis unendlich in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
==Konfiguration Presence Devices (automatische anwesend/abwesend Umschaltung von ROOMMATE/GUEST)==&lt;br /&gt;
Damit die automatische Zuordnung der Presence Devices zu ihren ROOMMATE/GUEST Devices zuverlässig funktioniert, ist es nötig dass der Hauptteil des Namens des ROOMMATE/GUEST innerhalb des Namens des zugehörigen PRESENCE Device(s) vorkommt.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Attribut HomePresenceDeviceType kann man den zu suchenden TYPE von Presence Device vorgeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Per Default werden nur Devices vom TYPE PRESENCE gesucht und versucht den ROOMMATE/GUEST zuzuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls man z.B. auch Devices vom TYPE dummy zur Anwesenheitssteuerung benutzt, kann man diese im Attribut HomePresenceDeviceType mit hinzunehmen. Es sind alles Device TYPEn möglich die ein &amp;quot;presence&amp;quot; Reading mit den Werten &amp;quot;present/appeared&amp;quot; und &amp;quot;absent/disappeared&amp;quot; bereitstellen. Mehrere TYPEn sind möglich da in diesem Attribut ein Regex erwartet wird. z.B.: dummy oder PRESENCE|dummy oder PRESENCE|dummy|ONKYO_AVR.&lt;br /&gt;
&lt;br /&gt;
===Beispiel===&lt;br /&gt;
Der Device Name meines ROOMMATE ist &amp;quot;rr_Dan&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf der Suche nach dem zugehörigen Presence Device wird der erste Teil (rr_ oder rg_) weggeschnitten und der Rest in Kleinbuchstaben umgewandelt.&amp;lt;br&amp;gt;&lt;br /&gt;
Mit dem was übrig bleibt, bei mir also nur dan, werden die möglichen Presence Devices versucht zu erkennen.&amp;lt;br&amp;gt;&lt;br /&gt;
Mein zugehöriges Presence Device heißt, historisch gewachsen, PRESENCE_rr_Dan und würde somit problemlos zugeordnet werden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen der zugehörigen Presence Devives könnten in ihrer kürzesten Form auch wie folgt sein um meinen ROOMMATE/GUEST Device zugeordnet zu werden:&amp;lt;br&amp;gt;&lt;br /&gt;
 pdan&lt;br /&gt;
 danp&lt;br /&gt;
 ZDan&lt;br /&gt;
 DANZ&lt;br /&gt;
 wenndannsonst&lt;br /&gt;
Aber Achtung, es funktioniert nicht mehr wenn die Namen nicht eindeutig sind. Wenn es z.B. eine rr_Dana geben würde mit Presence Device Name &amp;quot;pdani&amp;quot;, dann würde dieser Name auch bei mir (dan) passen. Das könnte man aber auch bewußt nutzen um mit einem Presence Device 2 ROOMMATE/GUEST Devices gleichzeitig zu steuern.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn die Namen wirklich absolut eindeutig sind, dann könnte man den Regex im Attribut HomePresenceDeviceType sogar auf &amp;quot;.*&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Werden pro ROOMMATE/GUEST mehrere Presence Devices gefunden und zugeordnet, so wird automatisch dass Attribut HomePresenceDeviceAbsentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt; auf die Anzahl der gefundenen Presence Devices gesetzt, so dass der/die jeweilige ROOMMATE/GUEST immer erst als abwesend gewertet wird sobald alle zugehörigen Presence Devices abwesend sind. Analog dazu gibt es noch das Attribut HomePresenceDevicePresentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresence====&lt;br /&gt;
Ist dieses Attribut auf 1 gesetzt, so werden die ROOMMATE/GUEST Devices automatisch zum Status ihrer zugehörigen PRESENCE Devices geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device present - ROOMMATE/GUEST home&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device absent - ROOMMATE/GUEST absent&amp;lt;br&amp;gt;&lt;br /&gt;
Falls es sich bei den von Euch benutzen PRESENCE Devices nicht um Devices vom TYPE PRESENCE handeln sollte, sondern z.B. um PRESENCE und dummy, so kann dieses im Attribut HomePresenceDeviceType als Regex konfiguriert werden! z.B.: PRESENCE|dummy&amp;lt;br&amp;gt;&lt;br /&gt;
Damit ein Device als Presence Device erkannt werden kann, muss dieses über ein presence Reading verfügen.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresenceSuppressState====&lt;br /&gt;
unterdrücke Anwesenheitsänderung in angegebenen State(s) der RESIDENTS&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. für &amp;quot;mysteriös&amp;quot; verschwindende Anwesenheitsgeräte in der Nacht&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: asleep|awoken|gotosleep&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceType====&lt;br /&gt;
Regex des TYPEs/der TYPEn von Presence Devices&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Regex der Device TYPEn&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: PRESENCE&lt;br /&gt;
&lt;br /&gt;
==Erweiterte Konfiguration==&lt;br /&gt;
Um das HOMEMODE Device vollumfänglich zu benutzen ist es sinnvoll weitere Devices (zur Überwachung) hinzuzufügen.&lt;br /&gt;
&lt;br /&gt;
Die bereits möglichen hinzuzufügenden Devices werden hier folgend nach Attributnamen erklärt.&lt;br /&gt;
&lt;br /&gt;
===Attribute zum Hinzufügen weiterer Geräte===&lt;br /&gt;
&lt;br /&gt;
====HomeEventsCalendarDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeEventsHolidayDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorAirpressure====&lt;br /&gt;
Luftdrucksensor aussen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorHumidityOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussensensors für Luftfeuchtigkeit anzugeben. Dieser muss ein Reading humidity besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für (Aussen)Luftfeuchtigkeit und Aussentemperatur ein und der selbe ist, so muss dieser nur einmalig im Attribut HomeSensorTemperatureOutside hinterlegt werden. Dieser muss dann die beiden Readings humidity und temperature haben. Im Bedarfsfall können diese Readings auch vorher entsprechend durch eigene userReadings erstellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%HUMIDITY%&#039;&#039;&#039; für den Wert des Readings humidity zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorTemperatureOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussentemperatursensors anzugeben. Dieser muss mindestens ein Reading temperature besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für Aussentemperatur auch ein Reading humidity besitzen sollte und dieses auch der Sensor für die Aussenlufteuchtigkeit ist, so muss dieser nur einmalig hier in diesem Attribut hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%TEMPERATURE%&#039;&#039;&#039; für den Wert des Readings temperature zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading temperature und optional humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContact====&lt;br /&gt;
Hier können alle Kontakt Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDcontact Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das optische und magnetische Kontaktsensoren vom HomeMatic. HM-SEC-SCO und HM-SEC-SC-2.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;model=HM-SEC-SC(O|-2)&#039;&#039;&#039; eingetragen um alle diese Kontaktsensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Kontaktsensoren mit ihren Namen im Internal SENSORSCONTACT des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Kontaktsensor folgende Attribute im Attribut userattr hinzugefügt:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====HomeContactType=====&lt;br /&gt;
Typ des Kontakts - wird versucht anhand des Namen/Alias beim Hinzufügen zum HOMEMODE Device zu ermitteln, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: doorinside,dooroutside,doormain,window&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: window&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Kontaktsensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModes=====&lt;br /&gt;
Regex der Mode(s) des HOMEMODE Device in denen keine Offen Warnungen erfolgen sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist ein Kontakt geöffnet während die hier eingestellten Mode(s) eintreten, so wird der noch bestehende Timer abgebrochen. Entgegengesetzt startet er wieder sobal die hier eingestellten Mode(s) verlassen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist hier z.B. &amp;quot;gotosleep|asleep&amp;quot; eingestellt, so kann man z.B. das Fenster schon vor dem Auslösen von gotosleep oder asleep öffnen und der bestehende Offenwarnung-Timer wird dann abgebrochen. Sobald man am Morgen z.B. awoken oder home auslöst, so wird ein neuer Timer gestartet der einen dann an das noch offene Fenster erinnert.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle Modes des HOMEMODE Device&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModesResidents=====&lt;br /&gt;
Devspec der ROOMMATE/GUEST Devices deren Status statt der Modes des HOMEMODE Device für Attribut HomeOpenDontTriggerModes benutzt werden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle überwachten ROOMMATE/GUEST&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenMaxTrigger=====&lt;br /&gt;
Maximale Anzahl an Warnmeldungen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ganze Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimes=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimesDividers=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactOpenTimeDividers des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2 1 2 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsContactReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactReadings====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeDividers====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeOpenTimesDividers in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 2 1 2 2.5 (für 4 Jahreszeiten)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeMin====&lt;br /&gt;
Minimale Zeit in Minuten die mindestens für eine Offenwarnung gewartet werden soll - im Falle dass sich durch den Teiler evtl. zu kleine Werte ergeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: eine Zahle mit max. einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimes====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 7.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminance====&lt;br /&gt;
Devspec von (Innen-)Lichtsensoren deren Durchschnittswert berechnet werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotion====&lt;br /&gt;
Hier können alle Bewegungs Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDmotion Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Motion Sensor Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0801-1001|010f-0800-1001&#039;&#039;&#039; eingetragen um alle diese Bewegungssensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Damit bei den Gen5 Sensoren auch das open im reading state steht, habe ich mir bei diesen Sensoren ein userReading angelegt.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Bewegungssensoren mit ihren Namen im Internal SENSORSMOTION des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Bewegungssensor folgende Attribute im Attribut userattr hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Bewegungssensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsMotionReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeSensorLocation=====&lt;br /&gt;
Standort des Bewegungssensors (außen oder innen) - wird standardmäßig beim Hinzufügen zum HOMEMODE Device auf &amp;quot;inside&amp;quot; gesetzt, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: inside,outside&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: inside&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsMotionValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionReadings====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergy====&lt;br /&gt;
Hier können alle Energie Sensoren als Devspec hinterlegt werden. Diese müssen die beiden Readings power und energy besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Anhand dieser Readings wird dann der Gesamtverbrauch und die derzeitige gesamte Leistungsaufnahme berechnet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Wall Plugs Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0600-1000|010f-0602-1001&#039;&#039;&#039; eingetragen um alle diese Energie Sensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec mit vorhandenen energy und power Readings&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmoke====&lt;br /&gt;
Devspec mit Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorWindspeed====&lt;br /&gt;
Sensor für Windgeschwindigkeit&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors und Reading der Windgeschwindigkeit separiert mit : (z.B. ga_Windsensor:wind)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBattery====&lt;br /&gt;
Devspec von Batteriesensoren mit einem Reading &amp;quot;battery&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerAnyoneElseAtHome====&lt;br /&gt;
auslösendes Gerät für anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn:valueOff&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerPanic====&lt;br /&gt;
auslösendes Gerät für Panikalarm&amp;lt;br&amp;gt;&lt;br /&gt;
valueOff ist optional, wird es weggelassen, so fungiert valueOn als toggle&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn[:valueOff]&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTwilightDevice====&lt;br /&gt;
Hier ist der Name des lokalen Twilight Device anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich die Platzhalter &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039;, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; in den HomeCMD Attributen zur Verfügung. &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039; wird dann durch das Reading light, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; durch das Reading twilight und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; durch das aktuelle Twilight Event ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeUWZ====&lt;br /&gt;
Hier ist der Name des lokalen UWZ Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%UWZ%&#039;&#039;&#039;, &#039;&#039;&#039;%UWZSHORT%&#039;&#039;&#039; und &#039;&#039;&#039;%UWZLONG%&#039;&#039;&#039; sind verfügbar in allen HomeCMD Attributen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des UWZ Geräts&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeWeatherDevice====&lt;br /&gt;
Hier ist der Name des lokalen Weather Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich einige Platzhalter zur Verfügung. Für die genaue Beschreibung derer siehe &amp;quot;Platzhalter&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
===HomeText Attribute===&lt;br /&gt;
Die HomeText Attribute sind größtenteils zur Übersetzung einiger benötigter Begriffe gedacht.&amp;lt;br&amp;gt;&lt;br /&gt;
In den speziellen Attributen die mit HomeTextWeather anfangen, sind ganze Texte mit entsprechenden Platzhaltern einzufügen.&lt;br /&gt;
&lt;br /&gt;
====HomeTextAndAreIs====&lt;br /&gt;
Übersetzung für &amp;quot;and&amp;quot;, &amp;quot;are&amp;quot; und &amp;quot;is&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort/Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: and|are|is&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 und|sind|ist&lt;br /&gt;
&lt;br /&gt;
====HomeTextClosedOpen====&lt;br /&gt;
Übersetzung für &amp;quot;closed&amp;quot; und &amp;quot;open&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: closed|open&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 geschlossen|geöffnet&lt;br /&gt;
&lt;br /&gt;
====HomeTextNosmokeSmoke====&lt;br /&gt;
Übersetzung für &amp;quot;no smoke&amp;quot; und &amp;quot;smoke&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: no smoke|smoke&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 kein Rauch|Rauch&lt;br /&gt;
&lt;br /&gt;
====HomeTextRisingConstantFalling====&lt;br /&gt;
Übersetzung für &amp;quot;rising&amp;quot;, &amp;quot;constant&amp;quot; und &amp;quot;falling&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: rising|constant|falling&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 steigend|gleichbleibend|fallend&lt;br /&gt;
&lt;br /&gt;
====HomeTextTodayTomorrowAfterTomorrow====&lt;br /&gt;
Übersetzung für &amp;quot;today&amp;quot;, &amp;quot;tomorrow&amp;quot; und &amp;quot;day after tomorrow&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: today|tomorrow|day after tomorrow&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Heute|Morgen|Übermorgen&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherNoForecast====&lt;br /&gt;
Übersetzung für &amp;quot;No forecast available&amp;quot; - Text wenn keine Wettervorhersage verfügbar ist&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: No forecast available&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es ist leider keine Wettervorhersage für den angegebenen Tag verfügbar!&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastInSpecDays====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage in 4-10 Tagen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 In %DAY% Tagen %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastToday====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für heute&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C. Aktuelle Temperatur %TEMPERATURE%°C bei einer Luftfeuchtigkeit von %HUMIDITY%%. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastTomorrow====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für morgen/übermorgen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherLong====&lt;br /&gt;
Langer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es %TOBE% %CONDITION% bei %TEMPERATURE%°C und %HUMIDITY%% Luftfeuchtigkeit. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h. Der Luftdruck liegt bei %PRESSURE%hPa.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherShort====&lt;br /&gt;
Kurzer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %CONDITION%, %TEMPERATURE%°C, %HUMIDITY%% Luftfeuchtigkeit, Luftdruck %PRESSURE%hPa&lt;br /&gt;
&lt;br /&gt;
===weitere Attribute===&lt;br /&gt;
Viele weitere Dinge lassen sich anpassen.&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedDetails====&lt;br /&gt;
mehr Details anzeigen, abhängig von den zu HOMEMODE hinzugefügten Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: none, detail, both, room&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Auswahlliste&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: none&lt;br /&gt;
&lt;br /&gt;
====HomeDaytimes====&lt;br /&gt;
Eigene Tageszeiten als Paare aus Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Zeit|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 00:00|Mitternacht&lt;br /&gt;
 00:05|Nacht&lt;br /&gt;
 06:30|Morgen&lt;br /&gt;
 10:00|Vormittag&lt;br /&gt;
 13:00|Mittag&lt;br /&gt;
 14:30|Nachmittag&lt;br /&gt;
 17:30|Vorabend&lt;br /&gt;
 19:00|Abend&lt;br /&gt;
 23:00|Spätabend&lt;br /&gt;
&lt;br /&gt;
====HomeIcewarningOnOffTemps====&lt;br /&gt;
2 leerzeichenseparierte Temperaturen für das Ein- und Ausschalten der Eiswarnung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei leerzeichenseparierte Temperaturen mit maximal einer Kommastelle&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 2 3&lt;br /&gt;
&lt;br /&gt;
====HomeModeAlarmArmDelay====&lt;br /&gt;
Zeit in Sekunden um das aktivieren der Alarmschaltung zu verzögern.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl (gleiche Verzögerung für alle modeAlarm) oder 3 leerzeichenseparierte Zahlen für jeden modeAlarm (Reihenfolge: armaway armnight armhome)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAtTmpRoom====&lt;br /&gt;
Diesen Raum zu temporäre at(s) hinzufügen die von HOMEMODE generiert werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceAbsentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;absent&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: maximale Anzahl von verfügbaren Presence Geräten für jeden ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDevicePresentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;present&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomePublicIpCheckInterval====&lt;br /&gt;
Interval in Minuten für die Überprüfung der öffentlichen IP-Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0 (deaktiviert)&lt;br /&gt;
&lt;br /&gt;
====HomeSeasons====&lt;br /&gt;
Eigene Jahreszeiten als Paare aus Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Datum|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 03.01|spring 06.01|summer 09.01|autumn 12.01|winter&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 03.01|Frühling&lt;br /&gt;
 06.01|Sommer&lt;br /&gt;
 09.01|Herbst&lt;br /&gt;
 12.01|Winter&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryLowPercentage====&lt;br /&gt;
Prozentsatz um einen Batteriesensor mit geringer Batterie anzuzeigen (nur bei Sensoren die ihren Batteriewert prozentual angeben)&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 50&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryReading====&lt;br /&gt;
Reading der Batteriesensoren welches statt &amp;quot;battery&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: battery&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminanceReading====&lt;br /&gt;
Reading der Lichtsensoren welches statt &amp;quot;luminance&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: luminance&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergyReadings====&lt;br /&gt;
Readings der Power/Energy Sensoren welche statt &amp;quot;power&amp;quot; und &amp;quot;energy&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: 2 leerzeichenseparierte Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: power energy&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeReading====&lt;br /&gt;
Readings der Rauchmelder welche statt &amp;quot;state&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ein Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeValue====&lt;br /&gt;
Regex der Auslösewerte von Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: RegEx&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: on&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialLocation====&lt;br /&gt;
Hier können eigene zusätzliche location(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; location &amp;lt;LOCATION&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialModes====&lt;br /&gt;
Hier können eigene zusätzliche mode(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; mode &amp;lt;MODE&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTrendCalcAge====&lt;br /&gt;
Zeit in Sekunden für das Maximalalter des vorherigen Wertes für die Trendberechnung&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 900&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Teil der Konfiguration ist das Befüllen der HomeCMD Attribute. Da dieses durch die Vermischung von FHEM Code, Perl Code und zusätzlichen Platzhaltern erst einmal sehr befremdlich sein kann, habe ich bei der Beschreibung der HomeCMD Attribute teilweise Beispiele hinzugefügt um den Einstieg weiter zu erleichtern.&lt;br /&gt;
&lt;br /&gt;
==HomeCMD Attribute (mit Beispielen)==&lt;br /&gt;
Die HomeCMD Attribute sind zum Festlegen der jeweiligen Schaltaktionen gedacht und können damit evtl. vorhandene notify/DOIF ablösen. Sie können mit FHEM-Code, Perl-Code oder aber auch mit beidem vermischt befüllt werden (wovon ich allerdings abrate). Zusätzlich sind noch diverse Platzhalter (siehe Platzhalter) verfügbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Perl-Code innerhalb der HomeCMD Attribute gibt es hier Besonderheiten.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
*Im Gegensatz zur FHEM-Eingabezeile müssen hier keine Semikolon verdoppelt werden&lt;br /&gt;
*Kommetarzeilen sind zulässig&lt;br /&gt;
*Kommentare am Ende einer Perl-Zeile sind nicht zulässig&lt;br /&gt;
&lt;br /&gt;
Typischer Weise werden in den HomeCMD Attributen weitere Module angesprochen.&amp;lt;br&amp;gt;&lt;br /&gt;
Z.B. benutze ich für jegliche Form der Benachrichtigung den msg Befehl.&lt;br /&gt;
&lt;br /&gt;
Keines der HomeCMD Attribute hat einen Standardwert. Es müssen alle Befehle selbst programmiert werden.&lt;br /&gt;
&lt;br /&gt;
Platzhalter die Text(e) (string) beinhalten, müssen im Perl-Code in Anführungszeichen gesetzt werden (Beispiel %SENSOR%).&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter die Zahlen beinhalten (int,float) sollten nicht in Anführungszeichen gesetzt werden damit Zahlenvergleiche (mittels ==, &amp;lt;=, &amp;gt;=, &amp;gt;, &amp;lt;) funktionieren (Beispiel %LIGHT%, %ICE% oder %TEMPERATURE%).&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-off====&lt;br /&gt;
Befehle die beim Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Rauchalarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-on====&lt;br /&gt;
Befehle die bei einem Rauchalarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;meldet&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;melden&amp;quot; if (%SMOKECT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %SMOKEHR% $is Rauchalarm!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Sabotage Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-off====&lt;br /&gt;
Befehle die beim Ende eines Sabotage Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Manipulationen wurden beseitigt!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-on====&lt;br /&gt;
Befehle die bei einem Sabotage Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%TAMPEREDCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %TAMPEREDHR% $is sabotiert!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-off====&lt;br /&gt;
Befehle die beim Ende eines Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg ENTWARNUNG: Alle Alarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-on====&lt;br /&gt;
Befehle die bei einem Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%ALARMCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg audio,push,light 3 !!! ALARM !!! %ALARMHR% $is ausgelöst!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome====&lt;br /&gt;
Befehle die beim on/off von anyoneElseAtHome ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-off====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armaway&amp;quot; auf &amp;quot;armhome&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome on&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun niemand anderes mehr zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-on====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armhome&amp;quot; auf &amp;quot;armaway&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder wieder Alarme melden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird anyoneElseAtHome bei Anwesenheit und nicht deaktiviertem HomeAutoAlarmModes aktiviert, so passiert erst einmal nichts, ausser dass die hier angegebenen Befehle ausgeführt werden. Wird dann später die Abwesenheit erkannt, schaltet der Alarm Mode auf &amp;quot;armhome&amp;quot; statt auf &amp;quot;armaway&amp;quot; damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome off&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun noch jemand anderes zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDbatteryLow====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Sensor einen niedrigen Batteriewert meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg;&lt;br /&gt;
   $msg = &amp;quot;Die Batterien von %BATTERYLOW% gehen zur Neige und sollten ausgetauscht werden!&amp;quot; if (%BATTERYLOWCT% == 1);&lt;br /&gt;
   $msg = &amp;quot;Die Batterien bei folgenden Geräten sollten ausgetauscht werden: %BATTERYLOWALL%&amp;quot; if (%BATTERYLOWCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push $msg&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontact====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor geschlossen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geschlossen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor offen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun offen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormain====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor Type doormain open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain wird geschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 { &lt;br /&gt;
   # Wenn es Ankommende gibt&lt;br /&gt;
   if (&amp;quot;%ARRIVERS%&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Zusammenstellen der Begrüßung&lt;br /&gt;
     my $msg = &amp;quot;Gute&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # &amp;quot;n&amp;quot; anhängen wenn Tageszeit nicht Nacht ist&lt;br /&gt;
     $msg .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Leerzeichen einfügen&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # den Feiertag der Tageszeit voranstellen wenn ein Feiertag im Kalender FEIERTAG ist&lt;br /&gt;
     $msg .= &amp;quot;%FEIERTAG%-&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Tageszeit einfügen&lt;br /&gt;
     $msg .= &amp;quot;%DAYTIME% &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # bei ROOMMATE &amp;quot;zu Hause&amp;quot; in Begrüßung einfügen&lt;br /&gt;
     $msg .= &amp;quot;zu Hause &amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; =~ /^rr_/);&lt;br /&gt;
 &lt;br /&gt;
     # Ankommende einfügen&lt;br /&gt;
     $msg .= &amp;quot;%ARRIVERS%&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Begrüßung am Sonos im Flur ausgeben bei Abwesenheit über 60 min&lt;br /&gt;
     fhem &amp;quot;msg audio \@fl_Sonos $msg!&amp;quot; if (%DURABSENCELAST% &amp;gt; 60);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain geöffnet&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geöffnet!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning1====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die erste Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: erste Offenwarnzeit des Kontakts erreicht&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning2====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die zweite Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: ab Erreichen der zweiten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht immer noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarningLast====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die letzte Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Erreichen der letzten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das ist der letzte Hinweis %ALIAS% endlich zu schliessen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald sich die Tageszeit (daytime) auf einen beliebigen Wert ändert.&amp;lt;br&amp;gt;&lt;br /&gt;
Um die jeweilige eingetretene Tageszeit zu ermitteln ist der Platzhalter &#039;&#039;&#039;%DAYTIME%&#039;&#039;&#039; vorgesehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime)&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime-&amp;amp;lt;DAYTIME&amp;amp;gt;====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald die jeweilige Tageszeit (daytime) erreicht ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime) auf bestimmten Wert&amp;lt;br&amp;gt;&lt;br /&gt;
Bei &amp;quot;night&amp;quot; könnte man z.B. die Heizung bewohnerunabhängig ausschalten, bei &amp;quot;morning&amp;quot; wieder ein.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceDisable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceDisable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun deaktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional wirklich attr disable für Device setzen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;attr %DEVICE%:FILTER=disable!=1 disable 1; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf gone/none setzen wenn Presence Devices deaktiviert werden&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     my $resident = $1;&lt;br /&gt;
     my $gone = $resident =~ /^rr_/ ? &amp;quot;gone&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set $resident:FILTER=state!=$gone state $gone&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceEnable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceEnable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun aktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional attr disable für Device entfernen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;deleteattr %DEVICE%:FILTER=disable=1 disable; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf home setzen wenn Presence Devices aktiviert werden und anwesend sind&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $1:FILTER=state!=home state home&amp;quot; if (ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;present&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd====&lt;br /&gt;
Befehle die beim Anfang/Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%DND%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun eingeschaltet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun beendet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-off====&lt;br /&gt;
Befehle die beim Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-on====&lt;br /&gt;
Befehle die beim Beginn des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun eingeschaltet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent====&lt;br /&gt;
Befehle die beim Beginn eines beliebigen (holiday)Kalender Events ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten on&amp;quot; if (&amp;quot;%EVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-each====&lt;br /&gt;
Befehle die beim Beginn/Ende eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-URLAUBDAN-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Dan hat jetzt Urlaub!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Der Urlaub von Dan ist nun zu Ende!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-WOHNUNG-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Heizung an/aus schalten&lt;br /&gt;
   my $heiz = &amp;quot;([bksw]z|ku)_Thermostat&amp;quot;;&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /^heizung(..+)?$/i)&lt;br /&gt;
   {&lt;br /&gt;
     my $zeit = $1;&lt;br /&gt;
     if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
 &lt;br /&gt;
       # morgens nicht alle Thermostaten schalten&lt;br /&gt;
       $heiz = &amp;quot;([bks]z|ku)_Thermostat&amp;quot; if ($zeit &amp;amp;&amp;amp; $zeit =~ /morgens?$/i);&lt;br /&gt;
       fhem &amp;quot;set $heiz:FILTER=controlMode!=day controlMode day&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^heizung/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $heiz:FILTER=controlMode!=night controlMode night&amp;quot; if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # WLAN an/aus schalten&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi off&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi on&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Putzfrau (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Gast (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-begin====&lt;br /&gt;
Befehle die beim Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-Neujahr-begin&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set %SENSORSENERGY% meterReset&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-end====&lt;br /&gt;
Befehle die bei Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemDEFINED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn ein neues Gerät angelegt wird (define)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Jedem neu definierten Gerät den Geräte-TYPE auch als Raum im Menüpunkt Module zuweisen&lt;br /&gt;
   fhem &amp;quot;attr %DEFINED% room Module-&amp;gt;&amp;quot;.InternalVal(&amp;quot;%DEFINED%&amp;quot;,&amp;quot;TYPE&amp;quot;,&amp;quot;default&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemINITIALIZED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn FHEM gestartet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg FHEM Home wurde gestartet...&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemSAVE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn in FHEM die Konfigurationsdatei gespeichert wird&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel (Backup von fhem.cfg und fhem.state):&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Datum/Uhrzeit&lt;br /&gt;
   my $now = TimeNow();&lt;br /&gt;
   # Leerzeichen durch Unterstriche ersetzen&lt;br /&gt;
   $now =~ s/ /_/g;&lt;br /&gt;
   # Backup der Datei fhem.cfg&lt;br /&gt;
   `cp $attr{global}{configfile} ./backup/fhem.cfg.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.cfg.$now&amp;quot;;&lt;br /&gt;
   # Backup der Datei fhem.state&lt;br /&gt;
   `cp $attr{global}{statefile} ./backup/fhem.state.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.state.$now&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemUPDATE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn das Update von FHEM ausgeführt wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das Update für FHEM ist beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning====&lt;br /&gt;
Befehle die bei Anfang/Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0/1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%ICE%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg push ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!.&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-off====&lt;br /&gt;
Befehle die bei Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-on====&lt;br /&gt;
Befehle die bei Beginn der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation====&lt;br /&gt;
Befehle die beim Ändern der location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation-&amp;amp;lt;LOCATION&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf eine bestimmte location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmte location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode====&lt;br /&gt;
Befehle die beim Ändern von mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-absent-belated====&lt;br /&gt;
Befehle die nachträglich zur Abwesenheit ausgeführt werden sollen, die Zeit kann im Atteribut &amp;quot;HomeModeAbsentBelatedTime&amp;quot; eingestellt werden&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Abwesenheit + XX min&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten mode&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-absent&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set HarmonyHub:FILTER=activity!=PowerOff activity PowerOff;&lt;br /&gt;
 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 set TYPE=SONOSPLAYER:FILTER=Volume&amp;gt;0 Volume 0;&lt;br /&gt;
 set Sonos stopAll;&lt;br /&gt;
 sleep 3;&lt;br /&gt;
 set Wohnung [FILTER=state!=off] off&amp;quot;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 define atTmp_wz_Media_aus_%SELF% at +01:00:00 set HarmonyHub:FILTER=currentActivity!=PowerOff activity PowerOff;&lt;br /&gt;
 define atTmp_wz_Venti_aus_%SELF% at +01:00:00 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 define atTmp_wzLS_aus_%SELF% at +00:30:00 set wz_LS scene aus;&lt;br /&gt;
 define atTmp_all_Sonos_vol_down_%SELF% at +00:02:00 set TYPE=SONOSPLAYER:FILTER=Volume!=0 Volume 0 1;&lt;br /&gt;
 define atTmp_all_Sonos_off_%SELF% at +00:02:30 set Sonos stopAll;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=off off;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=on on&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-gone&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlManu off&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen beliebigen Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von beliebigem Resident ausgelöst&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 msg audio @%AUDIO% Guten Nacht und schlaf&#039; gut %ALIAS%!&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg = &amp;quot;Guten&amp;quot;;&lt;br /&gt;
   $msg .= &amp;quot; %FEIERTAG%&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
   $msg .= &amp;quot; Morgen %ALIAS%&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;msg audio \@%AUDIO% $msg&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;defmod atTmp_wetter_%RESIDENT%_%SELF% at +00:07:00 msg audio Wettervorhersage für heute: %FORECASTTODAY%&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen bestimmten Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von bestimmten Resident ausgelöst&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm====&lt;br /&gt;
Befehle die beim Ändern von modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung modeAlarm&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm-&amp;amp;lt;armaway/armhome/armnight/disarm&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armaway&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%PREVAMODE%&amp;quot; eq &amp;quot;disarm&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Alarmanlage einschalten&lt;br /&gt;
     fhem &amp;quot;set AA_Arm:FILTER=level!=100 alarmLevel armAll&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht zusammensetzen&lt;br /&gt;
     my $msg;&lt;br /&gt;
     $msg .= &amp;quot;Die Alarmanlage ist nun scharf geschaltet!&amp;quot;;&lt;br /&gt;
     my $is = &amp;quot;%ALARMHR%&amp;quot; =~ /und/ ? &amp;quot;sind&amp;quot; : &amp;quot;ist&amp;quot;;&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot; if ($msg);&lt;br /&gt;
     $msg .= &amp;quot;ACHTUNG: %ALARMHR% $is noch offen!!!&amp;quot; if (%ALARMCT%);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an ROOMMATE/GUEST senden&lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 &lt;br /&gt;
     # Eingangstür abschließen falls noch nicht geschehen&lt;br /&gt;
     fhem &amp;quot;set fl_Tuerschloss:FILTER=state!=locked lock&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armhome&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armnight&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-disarm&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Alarmanlage ausschalten&lt;br /&gt;
   fhem &amp;quot;set AA_Arm:FILTER=level!=0 alarmLevel disarmed&amp;quot;;&lt;br /&gt;
   my $prio = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # Nachrichtenpriorität auf 1 setzen bei Ankunft (höhere Lautstärke beim Abspielen damit man das auch vor der Tür hört)&lt;br /&gt;
   $prio = &amp;quot; 1&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; eq &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht an ROOMMATE/GUEST senden wenn der vorherige alarmMode nicht &amp;quot;armnight&amp;quot; ist&lt;br /&gt;
   fhem &amp;quot;msg audio \@fl_Sonos$prio Die Alarmanlage ist nun ausgeschaltet %ALIAS%!&amp;quot; if (&amp;quot;%PREVAMODE%&amp;quot; ne &amp;quot;armnight&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion====&lt;br /&gt;
Befehle die bei Statusänderung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: öffnen/schließen eines beliebigen Bewegungsmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Raum aus Sensornamen ermitteln, z.B. bz_Sensor&lt;br /&gt;
   my $room = (split /_/,&amp;quot;%SENSOR%&amp;quot;)[0];&lt;br /&gt;
 &lt;br /&gt;
   # Status des structure aller Lichter dieses Raums&lt;br /&gt;
   my $lichter = Value($room.&amp;quot;_Lichter&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Status des dummy Tageslicht&lt;br /&gt;
   my $tl = Value(&amp;quot;Tageslicht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   if (&amp;quot;%STATE%&amp;quot; eq &amp;quot;geöffnet&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Lichtwert des Sensors&lt;br /&gt;
     my $lum = ReadingsNum(&amp;quot;%SENSOR%&amp;quot;,&amp;quot;luminance&amp;quot;,100);&lt;br /&gt;
 &lt;br /&gt;
     # Löschen des evtl. schon vorhandenen &amp;quot;at&amp;quot;&lt;br /&gt;
     fhem &amp;quot;delete atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot; if (IsDevice(&amp;quot;atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
     # Licht nur wenn kein Tageslicht oder Lichtwert des Sensors kleiner als 10 und AutoLight eingeschaltet und modeAlarm nicht armaway&lt;br /&gt;
     if (($tl eq &amp;quot;off&amp;quot; || $lum &amp;lt; 10) &amp;amp;&amp;amp; $lichter eq &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot; &amp;amp;&amp;amp; &amp;quot;%AMODE%&amp;quot; ne &amp;quot;armaway&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $scene;&lt;br /&gt;
 &lt;br /&gt;
       # verschiedene Szenen für verschiedene Modus bzw. Aussenlichtstärken&lt;br /&gt;
       if (&amp;quot;%MODE%&amp;quot; eq &amp;quot;gotosleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Abend&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (&amp;quot;%MODE%&amp;quot; eq &amp;quot;asleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Nacht&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;gt; 3)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;viel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;lt; 4)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;mittel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       # Schalten der entsprechenden Szene (Modul LightScene)&lt;br /&gt;
       fhem &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene $scene&amp;quot; if ($scene);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     # unterschiedliche Ausschaltzeiten für unterschiedliche Räume&lt;br /&gt;
     my $t = 3;&lt;br /&gt;
     $t = 15 if ($room eq &amp;quot;wz&amp;quot;);&lt;br /&gt;
     $t = 2 if ($room eq &amp;quot;bz&amp;quot; || ($room =~ /wz|ku/ &amp;amp;&amp;amp; &amp;quot;%MODE%&amp;quot; =~ /sleep/));&lt;br /&gt;
     $t = 1 if ($room eq &amp;quot;fl&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Zahl in Minuten umrechnen in einen Zeitpunkt für das &amp;quot;at&amp;quot;&lt;br /&gt;
     my $d = HOMEMODE_hourMaker($t);&lt;br /&gt;
 &lt;br /&gt;
     # Anlegen des &amp;quot;at&amp;quot; zum Ausschalten des Lichts wenn die Lichter angeschaltet sind und auch AutoLight eingeschaltet ist&lt;br /&gt;
     if ($lichter ne &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $cmd = &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene aus&amp;quot;;&lt;br /&gt;
       fhem &amp;quot;defmod atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF% at +$d $cmd&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-off====&lt;br /&gt;
Befehle die bei Ende der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-on====&lt;br /&gt;
Befehle die bei Beginn der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set w_Steckdosen [FILTER=state!=on] on;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode auto&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-device====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein beliebiges Presence Device, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebiges Presence Device&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present-device&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # mindestens 1x täglich den Batteriewert des PRESENCE Geräts bei erkannter Anwesenheit holen&lt;br /&gt;
   fhem &#039;&amp;quot;sudo /opt/fhem/scripts/GTag-bat.sh %DEVICE% %ADDRESS% &amp;amp;&amp;quot;&#039;&lt;br /&gt;
     if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE_/ &amp;amp;&amp;amp; (!defined ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,undef) || ReadingsAge(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,0) &amp;gt; 64800));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen beliebigen Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebigen Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-absent-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Mich benachrichtigen wenn ich nicht zu hause bin und jemand anderes die Wohnung verlässt&lt;br /&gt;
   fhem &amp;quot;msg push \@rr_Dan %ALIAS% hat gerade die Wohnung verlassen!&amp;quot;&lt;br /&gt;
     if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot; &amp;amp;&amp;amp; ReadingsVal(&amp;quot;rr_Dan&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) ne &amp;quot;present&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Verabschiedungsnachricht zusammensetzen&lt;br /&gt;
   my $msg;&lt;br /&gt;
 &lt;br /&gt;
   # Alle außer mich selbst verabschieden&lt;br /&gt;
   $msg .= &amp;quot;Bis bald und auf Wiedersehen %ALIAS%...&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Glättewarnung wenn nötig&lt;br /&gt;
   $msg .= &amp;quot; ACHTUNG!!! Es ist %TEMPERATURE%°C kalt! Somit könnte es glatt werden!&amp;quot; if (%ICE%);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht senden wenn vorhanden&lt;br /&gt;
   fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispielcode für &amp;quot;HomeCMDpresence-present-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # alle Ankommenden außer mir selbst&lt;br /&gt;
   if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Benachrichtigung wenn jemand kommt&lt;br /&gt;
     fhem &amp;quot;msg audio %ALIAS% kommt gerade!&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; ne &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) zusammensetzen&lt;br /&gt;
     my $g = &amp;quot;gute&amp;quot;;&lt;br /&gt;
     $g .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) senden &lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% Willkommen und $g %DAYTIME% %ALIAS%!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmten Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;-&amp;amp;lt;DEVICE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein bestimmtes Presence Device eines bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Dieses Attribut ist nur verfügbar wenn ein Resident mehr als ein Presence Device hat&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmtes Presence Device eines bestimmten Resident&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Jahreszeit&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $t = &amp;quot;%SEASON%&amp;quot;;&lt;br /&gt;
   $t .= &amp;quot;s&amp;quot; if ($t eq &amp;quot;Frühling&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;msg push Die Wohnung ist nun im $t-Modus!&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set Heizungen [FILTER=controlMode!=auto] controlMode auto&amp;quot; if ($t ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason-&amp;amp;lt;SEASON&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit in eine bestimmte Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung bestimmte Jahreszeit&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight====&lt;br /&gt;
Befehle die bei Änderung der Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight-&amp;amp;lt;sr/sr_astro/sr_civil/sr_indoor/sr_weather/ss/ss_astro/ss_civil/ss_indoor/ss_weather&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung zu bestimmter Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung zu bestimmter Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn====&lt;br /&gt;
Befehle die bei Beginn/Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn/Ende der UWZ Warnungen&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-begin====&lt;br /&gt;
Befehle die bei Beginn der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg %UWZLONG%&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-end====&lt;br /&gt;
Befehle die beim Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg Alle Unwetterwarnungen sind nun beendet!&lt;br /&gt;
&lt;br /&gt;
=Platzhalter=&lt;br /&gt;
==verfügbar in allen HomeCMD Attributen==&lt;br /&gt;
===%ADDRESS%===&lt;br /&gt;
MAC Adresse des zuletzt ausgelösten Presence Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALARM%===&lt;br /&gt;
Liste mit Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&lt;br /&gt;
&lt;br /&gt;
===%ALARMCT%===&lt;br /&gt;
Anzahl der ausgelösten Alarm Geräte&lt;br /&gt;
&lt;br /&gt;
===%ALARMHR%===&lt;br /&gt;
Liste mit (human readable) Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für msg benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
Alias des zuletzt ausgelösten Resident&lt;br /&gt;
&lt;br /&gt;
===%AMODE%===&lt;br /&gt;
aktueller Alarm Mode&lt;br /&gt;
&lt;br /&gt;
===%AEAH%===&lt;br /&gt;
Wert von anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 1 wenn on und 0 wenn off&lt;br /&gt;
&lt;br /&gt;
===%ARRIVERS%===&lt;br /&gt;
Alias-Liste der ROOMMATE/GUEST deren location auf arrival steht&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Residents zu begrüßen&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. Peter, Paul und Marry&lt;br /&gt;
&lt;br /&gt;
===%AUDIO%===&lt;br /&gt;
Audio Device des zuletzt ausgelösten ROOMMATE/GUEST (Attribut msgContactAudio)&amp;lt;br&amp;gt;&lt;br /&gt;
wenn das Attribut msgContactAudio des jeweiligen Resident keinen Wert hat, so wird versucht den Wert des Attributs aus dem globalMsg (sofern vorhanden) auszulesen&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Resident spezifische msg(s) vom Typ audio zu senden, z.B. Nacht/Morgen Grüße/Wünsche&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOW%===&lt;br /&gt;
Alias des zu letzt gemeldeten Geräts mit niedrigem Batteriestand&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWALL%===&lt;br /&gt;
Wert des Reading batteryLow_hr&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWCT%===&lt;br /&gt;
Wert des Reading batteryLow_ct&lt;br /&gt;
&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Reading condition des überwachten weather Device&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für Wetter(vorhersage) benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%CONTACT%===&lt;br /&gt;
Wert des Reading lastContact (Name des zuletzt geöffneten Kontakt Sensor)&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um msg zu versenden&lt;br /&gt;
&lt;br /&gt;
===%DAYTIME%===&lt;br /&gt;
Wert des Reading daytime&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Tageszeit spezifische Aktionen zu schalten&lt;br /&gt;
&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
Name des zuletzt ausgelösten Presence Gerät&lt;br /&gt;
&lt;br /&gt;
===%DEVICEA%===&lt;br /&gt;
Wert des Reading lastAbsentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DEVICEP%===&lt;br /&gt;
Wert des Reading lastPresentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DISABLED%===&lt;br /&gt;
Wert des Reading devicesDisabled&lt;br /&gt;
&lt;br /&gt;
===%DND%===&lt;br /&gt;
DND Status&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn an, 0 wenn aus&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCE%===&lt;br /&gt;
Wert des Reading durTimerAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCELAST%===&lt;br /&gt;
Wert des Reading lastDurAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCE%===&lt;br /&gt;
Wert des Reading durTimerPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCELAST%===&lt;br /&gt;
Wert des Reading lastDurPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEP%===&lt;br /&gt;
Wert des Reading durTimerSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEPLAST%===&lt;br /&gt;
Wert des Reading lastDurSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME&amp;gt;%===&lt;br /&gt;
Event des benannten Kalenders&amp;lt;br&amp;gt;&lt;br /&gt;
0 wenn kein gerade kein Event ist&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME-EVENTNAME&amp;gt;%===&lt;br /&gt;
0 wenn das benannte Event nicht aktiv ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn das benannte Event aktiv ist&lt;br /&gt;
&lt;br /&gt;
===%FORECAST%===&lt;br /&gt;
Wettervorhersage für morgen&lt;br /&gt;
&lt;br /&gt;
===%FORECASTTODAY%===&lt;br /&gt;
Wettervorhersage für heute&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITY%===&lt;br /&gt;
Wert des Reading humidity von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITYTREND%===&lt;br /&gt;
Wert des Reading humidityTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%ICE%===&lt;br /&gt;
0 wenn keine Eiswarnung besteht&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn Eiswarnung besteht&lt;br /&gt;
&lt;br /&gt;
===%IP%===&lt;br /&gt;
Wert des Reading publicIP von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LIGHT%===&lt;br /&gt;
Wert des Reading light von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATION%===&lt;br /&gt;
Wert des Reading location von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATIONR%===&lt;br /&gt;
Wert des Reading location des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCE%===&lt;br /&gt;
Wert des Reading luminance von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCETREND%===&lt;br /&gt;
Wert des Reading luminanceTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%MODE%===&lt;br /&gt;
gerade aktiver Modus von HOMEMODE (Reading mode)&lt;br /&gt;
&lt;br /&gt;
===%MODEALARM%===&lt;br /&gt;
aktueller Alarm Mode (wie %AMODE%)&lt;br /&gt;
&lt;br /&gt;
===%MOTION%===&lt;br /&gt;
Wert des Reading lastMotion von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%NAME%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %SELF%)&lt;br /&gt;
&lt;br /&gt;
===%OPEN%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENCT%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENHR%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PANIC%===&lt;br /&gt;
0 wenn panic ausgeschaltet ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn panic eingeschaltet ist&lt;br /&gt;
&lt;br /&gt;
===%RESIDENT%===&lt;br /&gt;
Name des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PRESENT%===&lt;br /&gt;
presence von HOMEMODE&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESENTR%===&lt;br /&gt;
presence des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESSURE%===&lt;br /&gt;
Wert des Reading pressure von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVAMODE%===&lt;br /&gt;
vorheriger modeAlarm von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVCONTACT%===&lt;br /&gt;
vorheriger geöffneter Kontaktsensor&lt;br /&gt;
&lt;br /&gt;
===%PREVMODE%===&lt;br /&gt;
vorheriger mode von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVMODER%===&lt;br /&gt;
vorheriger state des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PREVMOTION%===&lt;br /&gt;
vorheriger geöffneter Bewegungsmelder&lt;br /&gt;
&lt;br /&gt;
===%SEASON%===&lt;br /&gt;
Wert des Reading season von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SELF%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %NAME%)&lt;br /&gt;
&lt;br /&gt;
===%SENSORSBATTERY%===&lt;br /&gt;
Liste aus Internal SENSORSBATTERY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSCONTACT%===&lt;br /&gt;
Liste aus Internal SENSORSCONTACT&lt;br /&gt;
&lt;br /&gt;
===%SENSORSENERGY%===&lt;br /&gt;
Liste aus Internal SENSORSENERGY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSMOTION%===&lt;br /&gt;
Liste aus Internal SENSORSMOTION&lt;br /&gt;
&lt;br /&gt;
===%SENSORSSMOKE%===&lt;br /&gt;
Liste aus Internal SENSORSSMOKE&lt;br /&gt;
&lt;br /&gt;
===%SMOKE%===&lt;br /&gt;
Wert des Reading alarmSmoke von HOMEMODE&lt;br /&gt;
0 wenn kein Alarm&lt;br /&gt;
&lt;br /&gt;
===%SMOKECT%===&lt;br /&gt;
Wert des Reading alarmSmoke_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SMOKEHR%===&lt;br /&gt;
Wert des Reading alarmSmoke_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPERED%===&lt;br /&gt;
Wert des Reading sensorsTampered von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDCT%===&lt;br /&gt;
Wert des Reading sensorsTampered_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDHR%===&lt;br /&gt;
Wert des Reading sensorsTampered_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURE%===&lt;br /&gt;
Wert des Reading temperature von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURETREND%===&lt;br /&gt;
Wert des Reading temperatureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TOBE%===&lt;br /&gt;
are/sind oder is/ist der Wetterkondition&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHT%===&lt;br /&gt;
Wert des Reading twilight von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHTEVENT%===&lt;br /&gt;
aktuelles twilight Event&lt;br /&gt;
&lt;br /&gt;
===%UWZ%===&lt;br /&gt;
UWZ Warnlevel&lt;br /&gt;
&lt;br /&gt;
===%UWZLONG%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (lange Version)&lt;br /&gt;
&lt;br /&gt;
===%UWZSHORT%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (kurze Version)&lt;br /&gt;
&lt;br /&gt;
===%WEATHER%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather short&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WEATHERLONG%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather long&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WIND%===&lt;br /&gt;
Wert des Reading wind von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%WINDCHILL%===&lt;br /&gt;
Wert des Reading wind_chill vom eingebundenen Wetter Gerät&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDcontact, HomeCMDmotion und HomeCMDalarm Attributen==&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%SENSOR%===&lt;br /&gt;
name des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%STATE%===&lt;br /&gt;
state des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeTextWeatherForecast Attributen==&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Readings condition des eather Geräts&lt;br /&gt;
&lt;br /&gt;
===%DAY%===&lt;br /&gt;
Tag der Wettervorhersage (1 - heute, 2 - morgen)&lt;br /&gt;
&lt;br /&gt;
===%HIGH%===&lt;br /&gt;
maximale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
===%LOW%===&lt;br /&gt;
minimale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDevent Attributen==&lt;br /&gt;
===%CALENDAR%===&lt;br /&gt;
Name der Kalenders&lt;br /&gt;
&lt;br /&gt;
===%DESCRIPTION%===&lt;br /&gt;
Beschreibung des aktuellen Event des Kalenders (nicht verfügbar bei holiday Geräten)&lt;br /&gt;
&lt;br /&gt;
===%EVENT%===&lt;br /&gt;
Name/Titel des aktuellen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
===%PREVEVENT%===&lt;br /&gt;
Name/Titel des vorherigen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDdevice Attributen==&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
name der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
=Benötigte Events=&lt;br /&gt;
Folgende Events werden von HOMEMODE ausgewertet bzw. werden benötigt damit HOMEMODE vollumfänglich funktionieren kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;DEVICE-TYPE&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;EVENT&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;RESIDENTS&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;ROOMMATE,GUEST&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wayhome&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSCONTACT}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsContactReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSMOTION}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsMotionReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSLUMINANCE}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;luminance&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsLuminanceReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSENERGY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;power&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;energy&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsPowerEnergyReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSBATTERY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;battery&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsBatteryReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomePresenceDeviceType&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeWeatherDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wind&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeTwilightDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;light&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;twilight&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;aktEvent&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorTemperatureOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorHumidityOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeEventsHolidayDevices&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeUWZ&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;WarnCount&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34805</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34805"/>
		<updated>2021-02-10T09:12:15Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Geräte-Definitionen ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] die Kraftstoffpreise von gewünschten Tankstellen zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ dazu können die Kraftstoffpreise auch über die Webseite [https://www.tankerkoenig.de tankerkoenig.de] bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird mit Hilfe des Moduls HTTPMOD der Kraftstoffpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, die persönlich gewünschten Tankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen um die Daten der gewünschten Tankstellen abzuholen.&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Shell Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Tankstelle_Shell enableControlSet 1&lt;br /&gt;
attr Tankstelle_Shell reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Tankstelle_Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Tankstelle_Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading07Name street&lt;br /&gt;
attr Tankstelle_Shell reading07Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Shell reading08Name zip&lt;br /&gt;
attr Tankstelle_Shell reading08Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Shell reading09Name city&lt;br /&gt;
attr Tankstelle_Shell reading09Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Shell readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Shell stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Shell timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Total Tankstelle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Tankstelle_Total enableControlSet 1&lt;br /&gt;
attr Tankstelle_Total reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading05Name street&lt;br /&gt;
attr Tankstelle_Total reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Total reading06Name zip&lt;br /&gt;
attr Tankstelle_Total reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Total reading07Name city&lt;br /&gt;
attr Tankstelle_Total reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Total readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Total stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Total timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Aral Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Tankstelle_Aral enableControlSet 1&lt;br /&gt;
attr Tankstelle_Aral reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading04Name Ultimate102&lt;br /&gt;
attr Tankstelle_Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading05Name UltimateDiesel&lt;br /&gt;
attr Tankstelle_Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading06Name street&lt;br /&gt;
attr Tankstelle_Aral reading06Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Aral reading07Name zip&lt;br /&gt;
attr Tankstelle_Aral reading07Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Aral reading08Name city&lt;br /&gt;
attr Tankstelle_Aral reading08Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Aral readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Aral stateFormat E5: SuperE5, E10: SuperE10, SP: Ultimate102, D: Diesel&lt;br /&gt;
attr Tankstelle_Aral timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Esso Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Tankstelle_Esso enableControlSet 1&lt;br /&gt;
attr Tankstelle_Esso reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading06Name street&lt;br /&gt;
attr Tankstelle_Esso reading06Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Esso reading07Name zip&lt;br /&gt;
attr Tankstelle_Esso reading07Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Esso reading08Name city&lt;br /&gt;
attr Tankstelle_Esso reading08Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Esso readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Esso stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Esso timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Agip Tankstelle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 600&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine [[readingsGroup]] mit farblicher Hervorhebung des Tiefstpreises der jeweiligen Kraftstoffsorte und hochgestellter letzter Ziffer beim Kraftstoffpreis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Kraftstoffpreise alias Kraftstoffpreisübersicht&lt;br /&gt;
attr rg_Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Kraftstoffpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Kraftstoffpreise valueStyle {&#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq KraftstoffLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier noch eine mögliche Definition für das [[FileLog]]. Es werden von allen definierten Tankstellen (Namen beginnend mit &amp;quot;Tankstelle_&amp;quot;) die Werte für Super (E5, E10 und Plus) und Diesel gespeichert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Kraftstoffpreise FileLog ./log/Kraftstoffpreise-%Y-%m.log Tankstelle_.*:(Super|Diesel).*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Kraftstoffpreise_1 SVG FileLog_Kraftstoffpreise:SVG_FileLog_Kraftstoffpreise_1:CURRENT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code kommt in [[99 myUtils anlegen|99_myUtils.pm]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###########################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Kraftstoffpreise ###&lt;br /&gt;
###########################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellennamen mit &amp;quot;Tankstelle_&amp;quot;&lt;br /&gt;
# beginnen oder entsprechend devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,999)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Kraftstoffpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Kraftstoffpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34782</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34782"/>
		<updated>2021-02-09T18:39:44Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Geräte-Definitionen ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] die Kraftstoffpreise von gewünschten Tankstellen zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ dazu können die Kraftstoffpreise auch über die Webseite [https://www.tankerkoenig.de tankerkoenig.de] bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird mit Hilfe des Moduls HTTPMOD der Kraftstoffpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, die persönlich gewünschten Tankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen um die Daten der gewünschten Tankstellen abzuholen.&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Shell Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Tankstelle_Shell enableControlSet 1&lt;br /&gt;
attr Tankstelle_Shell reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Tankstelle_Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Tankstelle_Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading07Name street&lt;br /&gt;
attr Tankstelle_Shell reading07Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Shell reading08Name zip&lt;br /&gt;
attr Tankstelle_Shell reading08Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Shell reading09Name city&lt;br /&gt;
attr Tankstelle_Shell reading09Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Shell readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Shell stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Shell timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Total Tankstelle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Tankstelle_Total enableControlSet 1&lt;br /&gt;
attr Tankstelle_Total reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading05Name street&lt;br /&gt;
attr Tankstelle_Total reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Total reading06Name zip&lt;br /&gt;
attr Tankstelle_Total reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Total reading07Name city&lt;br /&gt;
attr Tankstelle_Total reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Total readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Total stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Total timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Aral Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Tankstelle_Aral enableControlSet 1&lt;br /&gt;
attr Tankstelle_Aral reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading04Name Ultimate102&lt;br /&gt;
attr Tankstelle_Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading05Name UltimateDiesel&lt;br /&gt;
attr Tankstelle_Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading06Name street&lt;br /&gt;
attr Tankstelle_Aral reading06Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Aral reading07Name zip&lt;br /&gt;
attr Tankstelle_Aral reading07Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Aral reading08Name city&lt;br /&gt;
attr Tankstelle_Aral reading08Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Aral readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Aral stateFormat E5: SuperE5, E10: SuperE10, SP: Ultimate102, D: Diesel&lt;br /&gt;
attr Tankstelle_Aral timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Esso Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Tankstelle_Esso enableControlSet 1&lt;br /&gt;
attr Tankstelle_Esso reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading06Name street&lt;br /&gt;
attr Tankstelle_Esso reading06Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Esso reading07Name zip&lt;br /&gt;
attr Tankstelle_Esso reading07Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Esso reading08Name city&lt;br /&gt;
attr Tankstelle_Esso reading08Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Esso readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Esso stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Esso timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Agip Tankstelle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 600&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine [[readingsGroup]] mit farblicher Hervorhebung des Tiefstpreises der jeweiligen Kraftstoffsorte und hochgestellter letzter Ziffer beim Kraftstoffpreis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Kraftstoffpreise alias Kraftstoffpreisübersicht&lt;br /&gt;
attr rg_Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Kraftstoffpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Kraftstoffpreise valueStyle {&#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq KraftstoffLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier noch eine mögliche Definition für das [[FileLog]]. Es werden von allen definierten Tankstellen (Namen beginnend mit &amp;quot;Tankstelle_&amp;quot;) die Werte für Super und Diesel gespeichert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Kraftstoffpreise FileLog ./log/Kraftstoffpreise-%Y-%m.log Tankstelle_.*:(Super|Diesel).*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Kraftstoffpreise_1 SVG FileLog_Kraftstoffpreise:SVG_FileLog_Kraftstoffpreise_1:CURRENT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code kommt in [[99 myUtils anlegen|99_myUtils.pm]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###########################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Kraftstoffpreise ###&lt;br /&gt;
###########################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellennamen mit &amp;quot;Tankstelle_&amp;quot;&lt;br /&gt;
# beginnen oder entsprechend devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,999)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Kraftstoffpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Kraftstoffpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34781</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34781"/>
		<updated>2021-02-09T13:36:18Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: weiteres überflüssiges entfernt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Geräte-Definitionen ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] die Kraftstoffpreise von gewünschten Tankstellen zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ dazu können die Kraftstoffpreise auch über die Webseite [https://www.tankerkoenig.de tankerkoenig.de] bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird mit Hilfe des Moduls HTTPMOD der Kraftstoffpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, die persönlich gewünschten Tankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen um die Daten der gewünschten Tankstellen abzuholen.&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Shell Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Tankstelle_Shell enableControlSet 1&lt;br /&gt;
attr Tankstelle_Shell reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Tankstelle_Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Tankstelle_Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading07Name street&lt;br /&gt;
attr Tankstelle_Shell reading07Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Shell reading08Name zip&lt;br /&gt;
attr Tankstelle_Shell reading08Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Shell reading09Name city&lt;br /&gt;
attr Tankstelle_Shell reading09Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Shell readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Shell stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Shell timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Total Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Tankstelle_Total enableControlSet 1&lt;br /&gt;
attr Tankstelle_Total reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading05Name street&lt;br /&gt;
attr Tankstelle_Total reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Total reading06Name zip&lt;br /&gt;
attr Tankstelle_Total reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Total reading07Name city&lt;br /&gt;
attr Tankstelle_Total reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Total readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Total stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Total timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Aral Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Tankstelle_Aral enableControlSet 1&lt;br /&gt;
attr Tankstelle_Aral reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading04Name Ultimate102&lt;br /&gt;
attr Tankstelle_Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading05Name UltimateDiesel&lt;br /&gt;
attr Tankstelle_Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading06Name street&lt;br /&gt;
attr Tankstelle_Aral reading06Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Aral reading07Name zip&lt;br /&gt;
attr Tankstelle_Aral reading07Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Aral reading08Name city&lt;br /&gt;
attr Tankstelle_Aral reading08Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Aral readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Aral stateFormat E5: SuperE5, E10: SuperE10, SP: Ultimate102, D: Diesel&lt;br /&gt;
attr Tankstelle_Aral timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Esso Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Tankstelle_Esso enableControlSet 1&lt;br /&gt;
attr Tankstelle_Esso reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading06Name street&lt;br /&gt;
attr Tankstelle_Esso reading06Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Esso reading07Name zip&lt;br /&gt;
attr Tankstelle_Esso reading07Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Esso reading08Name city&lt;br /&gt;
attr Tankstelle_Esso reading08Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Esso readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Esso stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Esso timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Agip Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 600&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine [[readingsGroup]] mit farblicher Hervorhebung des Tiefstpreises der jeweiligen Kraftstoffsorte und hochgestellter letzter Ziffer beim Kraftstoffpreis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Kraftstoffpreise alias Kraftstoffpreisübersicht&lt;br /&gt;
attr rg_Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Kraftstoffpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Kraftstoffpreise valueStyle {&#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq KraftstoffLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier noch eine mögliche Definition für das [[FileLog]]. Es werden von allen definierten Tankstellen (Namen beginnend mit &amp;quot;Tankstelle_&amp;quot;) die Werte für Super und Diesel gespeichert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Kraftstoffpreise FileLog ./log/Kraftstoffpreise-%Y-%m.log Tankstelle_.*:(Super|Diesel).*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Kraftstoffpreise_1 SVG FileLog_Kraftstoffpreise:SVG_FileLog_Kraftstoffpreise_1:CURRENT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code kommt in [[99 myUtils anlegen|99_myUtils.pm]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###########################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Kraftstoffpreise ###&lt;br /&gt;
###########################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellennamen mit &amp;quot;Tankstelle_&amp;quot;&lt;br /&gt;
# beginnen oder entsprechend devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,999)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Kraftstoffpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Kraftstoffpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34780</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34780"/>
		<updated>2021-02-09T13:33:49Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: Definitionen angepasst und überflüssiges entfernt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Geräte-Definitionen ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] die Kraftstoffpreise von gewünschten Tankstellen zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ dazu können die Kraftstoffpreise auch über die Webseite [https://www.tankerkoenig.de tankerkoenig.de] bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird mit Hilfe des Moduls HTTPMOD der Kraftstoffpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, die persönlich gewünschten Tankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen um die Daten der gewünschten Tankstellen abzuholen.&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Shell Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Tankstelle_Shell enableControlSet 1&lt;br /&gt;
attr Tankstelle_Shell reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Tankstelle_Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Tankstelle_Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Shell reading07Name street&lt;br /&gt;
attr Tankstelle_Shell reading07Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Shell reading08Name zip&lt;br /&gt;
attr Tankstelle_Shell reading08Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Shell reading09Name city&lt;br /&gt;
attr Tankstelle_Shell reading09Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Shell readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Shell stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Shell timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Total Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Tankstelle_Total enableControlSet 1&lt;br /&gt;
attr Tankstelle_Total reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Total reading05Name street&lt;br /&gt;
attr Tankstelle_Total reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Total reading06Name zip&lt;br /&gt;
attr Tankstelle_Total reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Total reading07Name city&lt;br /&gt;
attr Tankstelle_Total reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Total readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Total stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Total timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Aral Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Tankstelle_Aral enableControlSet 1&lt;br /&gt;
attr Tankstelle_Aral reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading04Name Ultimate102&lt;br /&gt;
attr Tankstelle_Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading05Name UltimateDiesel&lt;br /&gt;
attr Tankstelle_Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Aral reading06Name street&lt;br /&gt;
attr Tankstelle_Aral reading06Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Aral reading07Name zip&lt;br /&gt;
attr Tankstelle_Aral reading07Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Aral reading08Name city&lt;br /&gt;
attr Tankstelle_Aral reading08Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Aral readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Aral stateFormat E5: SuperE5, E10: SuperE10, SP: Ultimate102, D: Diesel&lt;br /&gt;
attr Tankstelle_Aral timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Esso Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Tankstelle_Esso enableControlSet 1&lt;br /&gt;
attr Tankstelle_Esso reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Esso reading06Name street&lt;br /&gt;
attr Tankstelle_Esso reading06Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Esso reading07Name zip&lt;br /&gt;
attr Tankstelle_Esso reading07Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Esso reading08Name city&lt;br /&gt;
attr Tankstelle_Esso reading08Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Esso readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Esso stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Esso timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Agip Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 600&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\S\s\r\n]*?&amp;quot;current-price-\d+&amp;quot;&amp;gt;(\d.\d{2}&amp;lt;[\S\s\r\n]*?&amp;quot;suffix-price-\d&amp;quot;&amp;gt;\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip readingOExpr $val =~ s/&amp;lt;[\d\D]+&amp;gt;//;;$val&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine passende [[readingsGroup]] mit farblicher Hervorhebung der Kraftstoffpreise:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;  Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus&lt;br /&gt;
attr Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr Kraftstoffpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
attr Kraftstoffpreise valueStyle {KraftstoffWerte($READING,$VALUE)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]] mit farblicher Hervorhebung des Tiefstpreises der jeweiligen Kraftstoffsorte und hochgestellter letzter Ziffer beim Kraftstoffpreis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Kraftstoffpreise alias Kraftstoffpreisübersicht&lt;br /&gt;
attr rg_Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Kraftstoffpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Kraftstoffpreise valueStyle {&#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq KraftstoffLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier noch eine mögliche Definition für das [[FileLog]]. Es werden von allen definierten Tankstellen (Namen beginnend mit &amp;quot;Tankstelle_&amp;quot;) die Werte für Super und Diesel gespeichert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Kraftstoffpreise FileLog ./log/Kraftstoffpreise-%Y-%m.log Tankstelle_.*:(Super|Diesel).*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Kraftstoffpreise_1 SVG FileLog_Kraftstoffpreise:SVG_FileLog_Kraftstoffpreise_1:CURRENT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code kommt in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
########################################################&lt;br /&gt;
###     Kraftstoffpreisübersicht - Farbsortierung    ###&lt;br /&gt;
########################################################&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffWerte($$) {&lt;br /&gt;
  my ($name,$wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
###########################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Kraftstoffpreise ###&lt;br /&gt;
###########################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellennamen mit &amp;quot;Tankstelle_&amp;quot;&lt;br /&gt;
# beginnen oder entsprechend devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,999)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Kraftstoffpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Kraftstoffpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34779</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34779"/>
		<updated>2021-02-09T12:52:13Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Geräte-Definitionen ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] die Kraftstoffpreise von gewünschten Tankstellen zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ dazu können die Kraftstoffpreise auch über die Webseite [https://www.tankerkoenig.de tankerkoenig.de] bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird mit Hilfe des Moduls HTTPMOD der Kraftstoffpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, die persönlich gewünschten Tankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen um die Daten der gewünschten Tankstellen abzuholen.&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Shell Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Tankstelle_Shell enableControlSet 1&lt;br /&gt;
attr Tankstelle_Shell reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Tankstelle_Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Tankstelle_Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Shell timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Total Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Tankstelle_Total enableControlSet 1&lt;br /&gt;
attr Tankstelle_Total reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Total timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Aral Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Tankstelle_Aral enableControlSet 1&lt;br /&gt;
attr Tankstelle_Aral reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading04Name Ultimate102&lt;br /&gt;
attr Tankstelle_Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading05Name UltimateDiesel&lt;br /&gt;
attr Tankstelle_Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral stateFormat E5: SuperE5, E10: SuperE10, SP: Ultimate102, D: Diesel&lt;br /&gt;
attr Tankstelle_Aral timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Esso Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Tankstelle_Esso enableControlSet 1&lt;br /&gt;
attr Tankstelle_Esso reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Esso timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Kraftstoffpreise inklusive der obligatorischen abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingXXName eine entsprechende Zusatzzeile hinzufügen. Diese addiert zum Wert des Readings (hier Diesel) den Wert 0.009:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Tankstelle_Shell reading01OExpr $val+0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell Tankstelle bei einem Literpreis von 1.29 die (normalerweise hochgestellte) Ziffer &amp;quot;9&amp;quot; hinzu und ergibt somit 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses starre Konstrukt kann man allerdings auch dynamisch erzeugen.&lt;br /&gt;
&lt;br /&gt;
Dazu wird beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen immer zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene (2.) Wert wird dann noch mit dem Attribut reading0X-2OExpr durch 1000 dividiert. In entsprechenden userReadings (mit dem ursprünglichen Kraftstoffnamen - also ohne die Suffixe) werden dann beide Werte summiert.&lt;br /&gt;
&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration für eine Agip Tankstelle, bei der auch die Straße, die Postleitzahl und die Stadt mit ausgelesen wird:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 600&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading06Name street&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name zip&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading08Name city&lt;br /&gt;
attr Tankstelle_Agip reading08Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine passende [[readingsGroup]] mit farblicher Hervorhebung der Kraftstoffpreise:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;  Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus&lt;br /&gt;
attr Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr Kraftstoffpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
attr Kraftstoffpreise valueStyle {KraftstoffWerte($READING,$VALUE)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]] mit farblicher Hervorhebung des Tiefstpreises der jeweiligen Kraftstoffsorte und hochgestellter letzter Ziffer beim Kraftstoffpreis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Kraftstoffpreise alias Kraftstoffpreisübersicht&lt;br /&gt;
attr rg_Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Kraftstoffpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Kraftstoffpreise valueStyle {&#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq KraftstoffLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier noch eine mögliche Definition für das [[FileLog]]. Es werden von allen definierten Tankstellen (Namen beginnend mit &amp;quot;Tankstelle_&amp;quot;) die Werte für Super und Diesel gespeichert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Kraftstoffpreise FileLog ./log/Kraftstoffpreise-%Y-%m.log Tankstelle_.*:(Super|Diesel).*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Kraftstoffpreise_1 SVG FileLog_Kraftstoffpreise:SVG_FileLog_Kraftstoffpreise_1:CURRENT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code kommt in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
########################################################&lt;br /&gt;
###     Kraftstoffpreisübersicht - Farbsortierung    ###&lt;br /&gt;
########################################################&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffWerte($$) {&lt;br /&gt;
  my ($name,$wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
###########################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Kraftstoffpreise ###&lt;br /&gt;
###########################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellennamen mit &amp;quot;Tankstelle_&amp;quot;&lt;br /&gt;
# beginnen oder entsprechend devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,999)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Kraftstoffpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Kraftstoffpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34778</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34778"/>
		<updated>2021-02-09T08:20:27Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Geräte-Definitionen ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] die Kraftstoffpreise von gewünschten Tankstellen zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ dazu können die Kraftstoffpreise auch über die Webseite [https://www.tankerkoenig.de tankerkoenig.de] bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird mit Hilfe des Moduls HTTPMOD der Kraftstoffpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, die persönlich gewünschten Tankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen um die Daten der gewünschten Tankstellen abzuholen.&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Shell Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Tankstelle_Shell alignTime 00:00&lt;br /&gt;
attr Tankstelle_Shell enableControlSet 1&lt;br /&gt;
attr Tankstelle_Shell reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Tankstelle_Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Tankstelle_Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Tankstelle_Shell timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Total Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Tankstelle_Total alignTime 00:00&lt;br /&gt;
attr Tankstelle_Total enableControlSet 1&lt;br /&gt;
attr Tankstelle_Total reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading05Name LKWDiesel&lt;br /&gt;
attr Tankstelle_Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading06Name TESuperPlus&lt;br /&gt;
attr Tankstelle_Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading07Name TEDiesel&lt;br /&gt;
attr Tankstelle_Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading08Name Autogas&lt;br /&gt;
attr Tankstelle_Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading09Name Erdgas&lt;br /&gt;
attr Tankstelle_Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading10Name Wasserstoff&lt;br /&gt;
attr Tankstelle_Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Tankstelle_Total timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Aral Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Tankstelle_Aral alignTime 00:00&lt;br /&gt;
attr Tankstelle_Aral enableControlSet 1&lt;br /&gt;
attr Tankstelle_Aral reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Tankstelle_Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading06Name AralUltimate102&lt;br /&gt;
attr Tankstelle_Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Tankstelle_Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Tankstelle_Aral timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Esso Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Tankstelle_Esso alignTime 00:00&lt;br /&gt;
attr Tankstelle_Esso enableControlSet 1&lt;br /&gt;
attr Tankstelle_Esso reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Tankstelle_Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Tankstelle_Esso timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Kraftstoffpreise inklusive der obligatorischen abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingXXName eine entsprechende Zusatzzeile hinzufügen. Diese addiert zum Wert des Readings (hier Diesel) den Wert 0.009:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Tankstelle_Shell reading01OExpr $val+0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell Tankstelle bei einem Literpreis von 1.29 die (normalerweise hochgestellte) Ziffer &amp;quot;9&amp;quot; hinzu und ergibt somit 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses starre Konstrukt kann man allerdings auch dynamisch erzeugen.&lt;br /&gt;
&lt;br /&gt;
Dazu wird beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen immer zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene (2.) Wert wird dann noch mit dem Attribut reading0X-2OExpr durch 1000 dividiert. In entsprechenden userReadings (mit dem ursprünglichen Kraftstoffnamen - also ohne die Suffixe) werden dann beide Werte summiert.&lt;br /&gt;
&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration für eine Agip Tankstelle, bei der auch die Straße, die Postleitzahl und die Stadt mit ausgelesen wird:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 600&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine passende [[readingsGroup]] mit farblicher Hervorhebung der Kraftstoffpreise:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;  Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus&lt;br /&gt;
attr Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr Kraftstoffpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
attr Kraftstoffpreise valueStyle {KraftstoffWerte($READING,$VALUE)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]] mit farblicher Hervorhebung des Tiefstpreises der jeweiligen Kraftstoffsorte und hochgestellter letzter Ziffer beim Kraftstoffpreis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Kraftstoffpreise alias Kraftstoffpreisübersicht&lt;br /&gt;
attr rg_Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Kraftstoffpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Kraftstoffpreise valueStyle {&#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq KraftstoffLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier noch eine mögliche Definition für das [[FileLog]]. Es werden von allen definierten Tankstellen (Namen beginnend mit &amp;quot;Tankstelle_&amp;quot;) die Werte für Super und Diesel gespeichert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Kraftstoffpreise FileLog ./log/Kraftstoffpreise-%Y-%m.log Tankstelle_.*:(Super|Diesel).*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Kraftstoffpreise_1 SVG FileLog_Kraftstoffpreise:SVG_FileLog_Kraftstoffpreise_1:CURRENT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code kommt in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
########################################################&lt;br /&gt;
###     Kraftstoffpreisübersicht - Farbsortierung    ###&lt;br /&gt;
########################################################&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffWerte($$) {&lt;br /&gt;
  my ($name,$wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
###########################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Kraftstoffpreise ###&lt;br /&gt;
###########################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellennamen mit &amp;quot;Tankstelle_&amp;quot;&lt;br /&gt;
# beginnen oder entsprechend devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,999)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Kraftstoffpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Kraftstoffpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34777</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34777"/>
		<updated>2021-02-09T08:19:16Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Geräte-Definitionen ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] die Kraftstoffpreise von gewünschten Tankstellen zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ dazu können die Kraftstoffpreise auch über die Webseite [https://www.tankerkoenig.de] bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird mit Hilfe des Moduls HTTPMOD der Kraftstoffpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, die persönlich gewünschten Tankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen um die Daten der gewünschten Tankstellen abzuholen.&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Shell Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Tankstelle_Shell alignTime 00:00&lt;br /&gt;
attr Tankstelle_Shell enableControlSet 1&lt;br /&gt;
attr Tankstelle_Shell reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Tankstelle_Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Tankstelle_Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Tankstelle_Shell timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Total Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Tankstelle_Total alignTime 00:00&lt;br /&gt;
attr Tankstelle_Total enableControlSet 1&lt;br /&gt;
attr Tankstelle_Total reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading05Name LKWDiesel&lt;br /&gt;
attr Tankstelle_Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading06Name TESuperPlus&lt;br /&gt;
attr Tankstelle_Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading07Name TEDiesel&lt;br /&gt;
attr Tankstelle_Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading08Name Autogas&lt;br /&gt;
attr Tankstelle_Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading09Name Erdgas&lt;br /&gt;
attr Tankstelle_Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading10Name Wasserstoff&lt;br /&gt;
attr Tankstelle_Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Tankstelle_Total timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Aral Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Tankstelle_Aral alignTime 00:00&lt;br /&gt;
attr Tankstelle_Aral enableControlSet 1&lt;br /&gt;
attr Tankstelle_Aral reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Tankstelle_Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading06Name AralUltimate102&lt;br /&gt;
attr Tankstelle_Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Tankstelle_Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Tankstelle_Aral timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Esso Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Tankstelle_Esso alignTime 00:00&lt;br /&gt;
attr Tankstelle_Esso enableControlSet 1&lt;br /&gt;
attr Tankstelle_Esso reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Tankstelle_Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Tankstelle_Esso timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Kraftstoffpreise inklusive der obligatorischen abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingXXName eine entsprechende Zusatzzeile hinzufügen. Diese addiert zum Wert des Readings (hier Diesel) den Wert 0.009:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Tankstelle_Shell reading01OExpr $val+0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell Tankstelle bei einem Literpreis von 1.29 die (normalerweise hochgestellte) Ziffer &amp;quot;9&amp;quot; hinzu und ergibt somit 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses starre Konstrukt kann man allerdings auch dynamisch erzeugen.&lt;br /&gt;
&lt;br /&gt;
Dazu wird beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen immer zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene (2.) Wert wird dann noch mit dem Attribut reading0X-2OExpr durch 1000 dividiert. In entsprechenden userReadings (mit dem ursprünglichen Kraftstoffnamen - also ohne die Suffixe) werden dann beide Werte summiert.&lt;br /&gt;
&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration für eine Agip Tankstelle, bei der auch die Straße, die Postleitzahl und die Stadt mit ausgelesen wird:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 600&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine passende [[readingsGroup]] mit farblicher Hervorhebung der Kraftstoffpreise:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;  Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus&lt;br /&gt;
attr Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr Kraftstoffpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
attr Kraftstoffpreise valueStyle {KraftstoffWerte($READING,$VALUE)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]] mit farblicher Hervorhebung des Tiefstpreises der jeweiligen Kraftstoffsorte und hochgestellter letzter Ziffer beim Kraftstoffpreis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Kraftstoffpreise alias Kraftstoffpreisübersicht&lt;br /&gt;
attr rg_Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Kraftstoffpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Kraftstoffpreise valueStyle {&#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq KraftstoffLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier noch eine mögliche Definition für das [[FileLog]]. Es werden von allen definierten Tankstellen (Namen beginnend mit &amp;quot;Tankstelle_&amp;quot;) die Werte für Super und Diesel gespeichert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Kraftstoffpreise FileLog ./log/Kraftstoffpreise-%Y-%m.log Tankstelle_.*:(Super|Diesel).*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Kraftstoffpreise_1 SVG FileLog_Kraftstoffpreise:SVG_FileLog_Kraftstoffpreise_1:CURRENT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code kommt in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
########################################################&lt;br /&gt;
###     Kraftstoffpreisübersicht - Farbsortierung    ###&lt;br /&gt;
########################################################&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffWerte($$) {&lt;br /&gt;
  my ($name,$wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
###########################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Kraftstoffpreise ###&lt;br /&gt;
###########################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellennamen mit &amp;quot;Tankstelle_&amp;quot;&lt;br /&gt;
# beginnen oder entsprechend devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,999)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Kraftstoffpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Kraftstoffpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34776</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34776"/>
		<updated>2021-02-09T08:15:39Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Geräte-Definitionen ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] die Kraftstoffpreise von gewünschten Tankstellen zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ dazu können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird mit Hilfe des Moduls HTTPMOD der Kraftstoffpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, die persönlich gewünschten Tankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen um die Daten der gewünschten Tankstellen abzuholen.&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Shell Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Tankstelle_Shell alignTime 00:00&lt;br /&gt;
attr Tankstelle_Shell enableControlSet 1&lt;br /&gt;
attr Tankstelle_Shell reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Tankstelle_Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Tankstelle_Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Tankstelle_Shell timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Total Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Tankstelle_Total alignTime 00:00&lt;br /&gt;
attr Tankstelle_Total enableControlSet 1&lt;br /&gt;
attr Tankstelle_Total reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading05Name LKWDiesel&lt;br /&gt;
attr Tankstelle_Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading06Name TESuperPlus&lt;br /&gt;
attr Tankstelle_Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading07Name TEDiesel&lt;br /&gt;
attr Tankstelle_Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading08Name Autogas&lt;br /&gt;
attr Tankstelle_Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading09Name Erdgas&lt;br /&gt;
attr Tankstelle_Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading10Name Wasserstoff&lt;br /&gt;
attr Tankstelle_Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Tankstelle_Total timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Aral Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Tankstelle_Aral alignTime 00:00&lt;br /&gt;
attr Tankstelle_Aral enableControlSet 1&lt;br /&gt;
attr Tankstelle_Aral reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Tankstelle_Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading06Name AralUltimate102&lt;br /&gt;
attr Tankstelle_Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Tankstelle_Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Tankstelle_Aral timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Esso Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Tankstelle_Esso alignTime 00:00&lt;br /&gt;
attr Tankstelle_Esso enableControlSet 1&lt;br /&gt;
attr Tankstelle_Esso reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Tankstelle_Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Tankstelle_Esso timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Kraftstoffpreise inklusive der obligatorischen abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingXXName eine entsprechende Zusatzzeile hinzufügen. Diese addiert zum Wert des Readings (hier Diesel) den Wert 0.009:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Tankstelle_Shell reading01OExpr $val+0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell Tankstelle bei einem Literpreis von 1.29 die (normalerweise hochgestellte) Ziffer &amp;quot;9&amp;quot; hinzu und ergibt somit 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses starre Konstrukt kann man allerdings auch dynamisch erzeugen.&lt;br /&gt;
&lt;br /&gt;
Dazu wird beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen immer zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene (2.) Wert wird dann noch mit dem Attribut reading0X-2OExpr durch 1000 dividiert. In entsprechenden userReadings (mit dem ursprünglichen Kraftstoffnamen - also ohne die Suffixe) werden dann beide Werte summiert.&lt;br /&gt;
&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration für eine Agip Tankstelle, bei der auch die Straße, die Postleitzahl und die Stadt mit ausgelesen wird:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 600&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine passende [[readingsGroup]] mit farblicher Hervorhebung der Kraftstoffpreise:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;  Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus&lt;br /&gt;
attr Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr Kraftstoffpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
attr Kraftstoffpreise valueStyle {KraftstoffWerte($READING,$VALUE)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]] mit farblicher Hervorhebung des Tiefstpreises der jeweiligen Kraftstoffsorte und hochgestellter letzter Ziffer beim Kraftstoffpreis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Kraftstoffpreise alias Kraftstoffpreisübersicht&lt;br /&gt;
attr rg_Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Kraftstoffpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Kraftstoffpreise valueStyle {&#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq KraftstoffLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier noch eine mögliche Definition für das [[FileLog]]. Es werden von allen definierten Tankstellen (Namen beginnend mit &amp;quot;Tankstelle_&amp;quot;) die Werte für Super und Diesel gespeichert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Kraftstoffpreise FileLog ./log/Kraftstoffpreise-%Y-%m.log Tankstelle_.*:(Super|Diesel).*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Kraftstoffpreise_1 SVG FileLog_Kraftstoffpreise:SVG_FileLog_Kraftstoffpreise_1:CURRENT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code kommt in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
########################################################&lt;br /&gt;
###     Kraftstoffpreisübersicht - Farbsortierung    ###&lt;br /&gt;
########################################################&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffWerte($$) {&lt;br /&gt;
  my ($name,$wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
###########################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Kraftstoffpreise ###&lt;br /&gt;
###########################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellennamen mit &amp;quot;Tankstelle_&amp;quot;&lt;br /&gt;
# beginnen oder entsprechend devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,999)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Kraftstoffpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Kraftstoffpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34775</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34775"/>
		<updated>2021-02-08T22:01:48Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Geräte-Definitionen ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] die Kraftstoffpreise von gewünschten Tankstellen zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ dazu können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird mit Hilfe des Moduls HTTPMOD der Kraftstoffpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, die persönlich gewünschten Tankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen um die Daten der gewünschten Tankstellen abzuholen.&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Shell Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Tankstelle_Shell alignTime 00:00&lt;br /&gt;
attr Tankstelle_Shell enableControlSet 1&lt;br /&gt;
attr Tankstelle_Shell reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Tankstelle_Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Tankstelle_Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Tankstelle_Shell timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Total Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Tankstelle_Total alignTime 00:00&lt;br /&gt;
attr Tankstelle_Total enableControlSet 1&lt;br /&gt;
attr Tankstelle_Total reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading05Name LKWDiesel&lt;br /&gt;
attr Tankstelle_Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading06Name TESuperPlus&lt;br /&gt;
attr Tankstelle_Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading07Name TEDiesel&lt;br /&gt;
attr Tankstelle_Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading08Name Autogas&lt;br /&gt;
attr Tankstelle_Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading09Name Erdgas&lt;br /&gt;
attr Tankstelle_Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading10Name Wasserstoff&lt;br /&gt;
attr Tankstelle_Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Tankstelle_Total timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Aral Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Tankstelle_Aral alignTime 00:00&lt;br /&gt;
attr Tankstelle_Aral enableControlSet 1&lt;br /&gt;
attr Tankstelle_Aral reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Tankstelle_Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading06Name AralUltimate102&lt;br /&gt;
attr Tankstelle_Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Tankstelle_Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Tankstelle_Aral timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Esso Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Tankstelle_Esso alignTime 00:00&lt;br /&gt;
attr Tankstelle_Esso enableControlSet 1&lt;br /&gt;
attr Tankstelle_Esso reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Tankstelle_Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Tankstelle_Esso timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Kraftstoffpreise inklusive der obligatorischen abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingXXName eine entsprechende Zusatzzeile hinzufügen. Diese addiert zum Wert des Readings (hier Diesel) den Wert 0.009:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Tankstelle_Shell reading01OExpr $val+0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell Tankstelle bei einem Literpreis von 1.29 die (normalerweise hochgestellte) Ziffer &amp;quot;9&amp;quot; hinzu und ergibt somit 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses starre Konstrukt kann man allerdings auch dynamisch erzeugen.&lt;br /&gt;
&lt;br /&gt;
Dazu wird beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen immer zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene (2.) Wert wird dann noch mit dem Attribut reading0X-2OExpr durch 1000 dividiert. In entsprechenden userReadings (mit dem ursprünglichen Kraftstoffnamen - also ohne die Suffixe) werden dann beide Werte summiert.&lt;br /&gt;
&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration für eine Agip Tankstelle, bei der auch die Straße, die Postleitzahl und die Stadt mit ausgelesen wird:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 600&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine passende [[readingsGroup]] mit farblicher Hervorhebung der Kraftstoffpreise:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
defmod Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;  Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus&lt;br /&gt;
attr Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr Kraftstoffpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
attr Kraftstoffpreise valueStyle {KraftstoffWerte($READING,$VALUE)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]] mit farblicher Hervorhebung des Tiefstpreises der jeweiligen Kraftstoffsorte und hochgestellter letzter Ziffer beim Kraftstoffpreis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Kraftstoffpreise alias Kraftstoffpreisübersicht&lt;br /&gt;
attr rg_Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Kraftstoffpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Kraftstoffpreise valueStyle {&#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq KraftstoffLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier noch eine mögliche Definition für das [[FileLog]]. Es werden von allen definierten Tankstellen (Namen beginnend mit &amp;quot;Tankstelle_&amp;quot;) die Werte für Super und Diesel gespeichert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Kraftstoffpreise FileLog ./log/Kraftstoffpreise-%Y-%m.log Tankstelle_.*:(Super|Diesel).*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Kraftstoffpreise_1 SVG FileLog_Kraftstoffpreise:SVG_FileLog_Kraftstoffpreise_1:CURRENT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code kommt in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
########################################################&lt;br /&gt;
###     Kraftstoffpreisübersicht - Farbsortierung    ###&lt;br /&gt;
########################################################&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffWerte($$) {&lt;br /&gt;
  my ($name,$wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
###########################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Kraftstoffpreise ###&lt;br /&gt;
###########################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellennamen mit &amp;quot;Tankstelle_&amp;quot;&lt;br /&gt;
# beginnen oder entsprechend devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,999)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Kraftstoffpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Kraftstoffpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34774</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34774"/>
		<updated>2021-02-08T21:44:37Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Geräte-Definitionen ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] die Kraftstoffpreise von gewünschten Tankstellen zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ dazu können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird mit Hilfe des Moduls HTTPMOD der Kraftstoffpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, die persönlich gewünschten Tankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen um die Daten der gewünschten Tankstellen abzuholen.&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Shell Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Tankstelle_Shell alignTime 00:00&lt;br /&gt;
attr Tankstelle_Shell enableControlSet 1&lt;br /&gt;
attr Tankstelle_Shell reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Tankstelle_Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Tankstelle_Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Tankstelle_Shell timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Total Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Tankstelle_Total alignTime 00:00&lt;br /&gt;
attr Tankstelle_Total enableControlSet 1&lt;br /&gt;
attr Tankstelle_Total reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading05Name LKWDiesel&lt;br /&gt;
attr Tankstelle_Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading06Name TESuperPlus&lt;br /&gt;
attr Tankstelle_Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading07Name TEDiesel&lt;br /&gt;
attr Tankstelle_Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading08Name Autogas&lt;br /&gt;
attr Tankstelle_Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading09Name Erdgas&lt;br /&gt;
attr Tankstelle_Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading10Name Wasserstoff&lt;br /&gt;
attr Tankstelle_Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Tankstelle_Total timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Aral Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Tankstelle_Aral alignTime 00:00&lt;br /&gt;
attr Tankstelle_Aral enableControlSet 1&lt;br /&gt;
attr Tankstelle_Aral reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Tankstelle_Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading06Name AralUltimate102&lt;br /&gt;
attr Tankstelle_Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Tankstelle_Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Tankstelle_Aral timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Esso Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Tankstelle_Esso alignTime 00:00&lt;br /&gt;
attr Tankstelle_Esso enableControlSet 1&lt;br /&gt;
attr Tankstelle_Esso reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Tankstelle_Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Tankstelle_Esso timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Kraftstoffpreise inklusive der obligatorischen abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingXXName eine entsprechende Zusatzzeile hinzufügen. Diese addiert zum Wert des Readings (hier Diesel) den Wert 0.009:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Tankstelle_Shell reading01OExpr $val+0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell Tankstelle bei einem Literpreis von 1.29 die (normalerweise hochgestellte) Ziffer &amp;quot;9&amp;quot; hinzu und ergibt somit 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses starre Konstrukt kann man allerdings auch dynamisch erzeugen.&lt;br /&gt;
&lt;br /&gt;
Dazu wird beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen immer zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene (2.) Wert wird dann noch mit dem Attribut reading0X-2OExpr durch 1000 dividiert. In entsprechenden userReadings (mit dem ursprünglichen Kraftstoffnamen - also ohne die Suffixe) werden dann beide Werte summiert.&lt;br /&gt;
&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration für eine Agip Tankstelle, bei der auch die Straße, die Postleitzahl und die Stadt mit ausgelesen wird:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 600&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine passende [[readingsGroup]] mit farblicher Hervorhebung der Kraftstoffpreise:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Kraftstoffpreise readingsGroup Tankstelle_.*:(Super|Diesel).*&lt;br /&gt;
attr Kraftstoffpreise notime 1&lt;br /&gt;
attr Kraftstoffpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
attr Kraftstoffpreise valueStyle {KraftstoffWerte($READING,$VALUE)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]] mit farblicher Hervorhebung des Tiefstpreises der jeweiligen Kraftstoffsorte und hochgestellter letzter Ziffer beim Kraftstoffpreis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Kraftstoffpreise alias Kraftstoffpreisübersicht&lt;br /&gt;
attr rg_Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Kraftstoffpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Kraftstoffpreise valueStyle {&#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq KraftstoffLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier noch eine mögliche Definition für das [[FileLog]]. Es werden von allen definierten Tankstellen (Namen beginnend mit &amp;quot;Tankstelle_&amp;quot;) die Werte für Super und Diesel gespeichert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Kraftstoffpreise FileLog ./log/Kraftstoffpreise-%Y-%m.log Tankstelle_.*:(Super|Diesel).*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Kraftstoffpreise_1 SVG FileLog_Kraftstoffpreise:SVG_FileLog_Kraftstoffpreise_1:CURRENT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code kommt in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
########################################################&lt;br /&gt;
###     Kraftstoffpreisübersicht - Farbsortierung    ###&lt;br /&gt;
########################################################&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffWerte($$) {&lt;br /&gt;
  my ($name,$wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
###########################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Kraftstoffpreise ###&lt;br /&gt;
###########################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellennamen mit &amp;quot;Tankstelle_&amp;quot;&lt;br /&gt;
# beginnen oder entsprechend devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,999)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Kraftstoffpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Kraftstoffpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34773</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34773"/>
		<updated>2021-02-08T21:39:05Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: grundlegende Überarbeitungen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Geräte-Definitionen ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] die Kraftstoffpreise von gewünschten Tankstellen zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ dazu können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird mit Hilfe des Moduls HTTPMOD der Kraftstoffpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, die persönlich gewünschten Tankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen um die Daten der gewünschten Tankstellen abzuholen.&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Shell Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Tankstelle_Shell alignTime 00:00&lt;br /&gt;
attr Tankstelle_Shell enableControlSet 1&lt;br /&gt;
attr Tankstelle_Shell reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Tankstelle_Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Tankstelle_Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Tankstelle_Shell timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Total Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Tankstelle_Total alignTime 00:00&lt;br /&gt;
attr Tankstelle_Total enableControlSet 1&lt;br /&gt;
attr Tankstelle_Total reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading05Name LKWDiesel&lt;br /&gt;
attr Tankstelle_Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading06Name TESuperPlus&lt;br /&gt;
attr Tankstelle_Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading07Name TEDiesel&lt;br /&gt;
attr Tankstelle_Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading08Name Autogas&lt;br /&gt;
attr Tankstelle_Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading09Name Erdgas&lt;br /&gt;
attr Tankstelle_Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total reading10Name Wasserstoff&lt;br /&gt;
attr Tankstelle_Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Tankstelle_Total timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Aral Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Tankstelle_Aral alignTime 00:00&lt;br /&gt;
attr Tankstelle_Aral enableControlSet 1&lt;br /&gt;
attr Tankstelle_Aral reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Tankstelle_Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading06Name AralUltimate102&lt;br /&gt;
attr Tankstelle_Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Tankstelle_Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Tankstelle_Aral timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielkonfiguration für eine Esso Tankstelle inkl. Sondersorten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Tankstelle_Esso alignTime 00:00&lt;br /&gt;
attr Tankstelle_Esso enableControlSet 1&lt;br /&gt;
attr Tankstelle_Esso reading01Name Diesel&lt;br /&gt;
attr Tankstelle_Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading02Name SuperE5&lt;br /&gt;
attr Tankstelle_Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading03Name SuperE10&lt;br /&gt;
attr Tankstelle_Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Tankstelle_Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso reading05Name Autogas&lt;br /&gt;
attr Tankstelle_Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Tankstelle_Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Tankstelle_Esso timeout 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Kraftstoffpreise inklusive der obligatorischen abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingXXName eine entsprechende Zusatzzeile hinzufügen. Diese addiert zum Wert des Readings (hier Diesel) den Wert 0.009:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Tankstelle_Shell reading01OExpr $val+0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell Tankstelle bei einem Literpreis von 1.29 die (normalerweise hochgestellte) Ziffer &amp;quot;9&amp;quot; hinzu und ergibt somit 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses starre Konstrukt kann man allerdings auch dynamisch erzeugen.&lt;br /&gt;
&lt;br /&gt;
Dazu wird beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen immer zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene (2.) Wert wird dann noch mit dem Attribut reading0X-2OExpr durch 1000 dividiert. In entsprechenden userReadings (mit dem ursprünglichen Kraftstoffnamen - also ohne die Suffixe) werden dann beide Werte summiert.&lt;br /&gt;
&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration für eine Agip Tankstelle, bei der auch die Straße, die Postleitzahl und die Stadt mit ausgelesen wird:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 600&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine passende [[readingsGroup]] mit farblicher Hervorhebung der Krafstoffpreise:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Kraftstoffpreise readingsGroup Tankstelle_*:(Super|Diesel).*&lt;br /&gt;
attr Kraftstoffpreise notime 1&lt;br /&gt;
#attr Kraftstoffpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Kraftstoffpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Kraftstoffpreise valueStyle {KraftstoffWerte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]] mit farblicher Hervorhebung des Tiefstpreises der jeweiligen Kraftstoffsorte und hochgestellter letzter Ziffer beim Kraftstoffpreis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Kraftstoffpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Kraftstoffpreise alias Kraftstoffpreisübersicht&lt;br /&gt;
attr rg_Kraftstoffpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Kraftstoffpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Kraftstoffpreise valueStyle {&#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq KraftstoffLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier noch eine mögliche Definition für das [[FileLog]]. Es werden von allen definierten Tankstellen (Namen beginnend mit &amp;quot;Tankstelle_&amp;quot;) die Werte für Super und Diesel gespeichert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Kraftstoffpreise FileLog ./log/Kraftstoffpreise-%Y-%m.log Tankstelle_.*:(Super|Diesel).*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Kraftstoffpreise_1 SVG FileLog_Kraftstoffpreise:SVG_FileLog_Kraftstoffpreise_1:CURRENT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code kommt in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
########################################################&lt;br /&gt;
###     Kraftstoffpreisübersicht - Farbsortierung    ###&lt;br /&gt;
########################################################&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffWerte($$) {&lt;br /&gt;
  my ($name,$wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  } elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
###########################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Kraftstoffpreise ###&lt;br /&gt;
###########################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellennamen mit &amp;quot;Tankstelle_&amp;quot;&lt;br /&gt;
# beginnen oder entsprechend devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub KraftstoffLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,999)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Kraftstoffpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Kraftstoffpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34772</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34772"/>
		<updated>2021-02-08T15:58:33Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading09Name Erdgas&lt;br /&gt;
attr Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading10Name Wasserstoff&lt;br /&gt;
attr Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses feste Konstrukt, dass man einfach die 0.009 addiert, kann man auch dynamisch erzeugen.&amp;lt;br/&amp;gt;&lt;br /&gt;
Ich habe dazu beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen jeweils zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene Wert wird dann noch durch 1000 dividiert. In einem userReading (mit dem ursprünglichen Kraftstoffnamen - also ohne das Suffix) werden dann beide Werte summiert.&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 900&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]], passend zu der Definition &amp;quot;Tankstelle_Agip&amp;quot; mit farblicher Hervorhebung des Tiefstpreises und hochgestellter letzter Ziffer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Benzinpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Benzinpreise alias Benzinpreisübersicht&lt;br /&gt;
attr rg_Benzinpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Benzinpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Benzinpreise valueStyle {&#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq BenzinLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#######################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Benzinpreise ###&lt;br /&gt;
#######################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellennamen mit &amp;quot;Tankstelle_&amp;quot;&lt;br /&gt;
# beginnen oder entsprechend devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub BenzinLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,999)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34771</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34771"/>
		<updated>2021-02-08T15:57:06Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading09Name Erdgas&lt;br /&gt;
attr Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading10Name Wasserstoff&lt;br /&gt;
attr Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses feste Konstrukt, dass man einfach die 0.009 addiert, kann man auch dynamisch erzeugen.&amp;lt;br/&amp;gt;&lt;br /&gt;
Ich habe dazu beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen jeweils zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene Wert wird dann noch durch 1000 dividiert. In einem userReading (mit dem ursprünglichen Kraftstoffnamen - also ohne das Suffix) werden dann beide Werte summiert.&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 900&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]], passend zu der Definition &amp;quot;Tankstelle_Agip&amp;quot; mit farblicher Hervorhebung des Tiefstpreises und hochgestellter letzter Ziffer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Benzinpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Benzinpreise alias Benzinpreisübersicht&lt;br /&gt;
attr rg_Benzinpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Benzinpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Benzinpreise valueStyle {&#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq BenzinLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#######################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Benzinpreise ###&lt;br /&gt;
#######################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellennamen mit &amp;quot;Tankstelle_&amp;quot;&lt;br /&gt;
# beginnen oder entsprechend devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub BenzinLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,1000)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34770</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34770"/>
		<updated>2021-02-08T15:54:47Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading09Name Erdgas&lt;br /&gt;
attr Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading10Name Wasserstoff&lt;br /&gt;
attr Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses feste Konstrukt, dass man einfach die 0.009 addiert, kann man auch dynamisch erzeugen.&amp;lt;br/&amp;gt;&lt;br /&gt;
Ich habe dazu beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen jeweils zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene Wert wird dann noch durch 1000 dividiert. In einem userReading (mit dem ursprünglichen Kraftstoffnamen - also ohne das Suffix) werden dann beide Werte summiert.&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 900&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]], passend zu der Definition &amp;quot;Tankstelle_Agip&amp;quot; mit farblicher Hervorhebung des Tiefstpreises und hochgestellter letzter Ziffer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Benzinpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Benzinpreise alias Benzinpreisübersicht&lt;br /&gt;
attr rg_Benzinpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Benzinpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Benzinpreise valueStyle {&#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq BenzinLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#######################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Benzinpreise ###&lt;br /&gt;
#######################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellennamen mit &amp;quot;Tankstelle_&amp;quot;&lt;br /&gt;
# beginnen oder entsprechend devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub BenzinLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,0)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34769</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34769"/>
		<updated>2021-02-08T15:47:26Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading09Name Erdgas&lt;br /&gt;
attr Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading10Name Wasserstoff&lt;br /&gt;
attr Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses feste Konstrukt, dass man einfach die 0.009 addiert, kann man auch dynamisch erzeugen.&amp;lt;br/&amp;gt;&lt;br /&gt;
Ich habe dazu beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen jeweils zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene Wert wird dann noch durch 1000 dividiert. In einem userReading (mit dem ursprünglichen Kraftstoffnamen - also ohne das Suffix) werden dann beide Werte summiert.&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 900&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]], passend zu der Definition &amp;quot;Tankstelle_Agip&amp;quot; mit farblicher Hervorhebung des Tiefstpreises und hochgestellter letzter Ziffer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Benzinpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Benzinpreise alias Benzinpreisübersicht&lt;br /&gt;
attr rg_Benzinpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Benzinpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Benzinpreise valueStyle {&#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq BenzinLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#######################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Benzinpreise ###&lt;br /&gt;
#######################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellenname mit &amp;quot;Tankstelle_&amp;quot; beginnen&lt;br /&gt;
# oder entsprechend das devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub BenzinLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,0)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34768</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34768"/>
		<updated>2021-02-08T15:40:43Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading09Name Erdgas&lt;br /&gt;
attr Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading10Name Wasserstoff&lt;br /&gt;
attr Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses feste Konstrukt, dass man einfach die 0.009 addiert, kann man auch dynamisch erzeugen.&amp;lt;br/&amp;gt;&lt;br /&gt;
Ich habe dazu beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen jeweils zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene Wert wird dann noch durch 1000 dividiert. In einem userReading (mit dem ursprünglichen Kraftstoffnamen - also ohne das Suffix) werden dann beide Werte summiert.&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 900&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]], passend zu der Definition &amp;quot;Tankstelle_Agip&amp;quot; mit farblicher Hervorhebung des Tiefstpreises und hochgestellter letzter Ziffer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Benzinpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Benzinpreise alias Benzinpreisübersicht&lt;br /&gt;
attr rg_Benzinpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Benzinpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Benzinpreise valueStyle {&#039;style=&amp;quot;color:red&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq BenzinLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#######################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Benzinpreise ###&lt;br /&gt;
#######################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellenname mit &amp;quot;Tankstelle_&amp;quot; beginnen&lt;br /&gt;
# oder entsprechend das devspec2array auf die eigenen Namen anpassen&lt;br /&gt;
&lt;br /&gt;
sub BenzinLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,0)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34767</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34767"/>
		<updated>2021-02-08T15:40:10Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading09Name Erdgas&lt;br /&gt;
attr Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading10Name Wasserstoff&lt;br /&gt;
attr Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses feste Konstrukt, dass man einfach die 0.009 addiert, kann man auch dynamisch erzeugen.&amp;lt;br/&amp;gt;&lt;br /&gt;
Ich habe dazu beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen jeweils zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene Wert wird dann noch durch 1000 dividiert. In einem userReading (mit dem ursprünglichen Kraftstoffnamen - also ohne das Suffix) werden dann beide Werte summiert.&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 900&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]], passend zu der Definition &amp;quot;Tankstelle_Agip&amp;quot; mit farblicher Hervorhebung des Tiefstpreises und hochgestellter letzter Ziffer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Benzinpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Benzinpreise alias Benzinpreisübersicht&lt;br /&gt;
attr rg_Benzinpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Benzinpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Benzinpreise valueStyle {&#039;style=&amp;quot;color:red&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq BenzinLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#######################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Benzinpreise ###&lt;br /&gt;
#######################################################################################&lt;br /&gt;
# damit die Funktion richtig funktioniert müssen alle Tankstellenname mit &amp;quot;Tankstelle_&amp;quot; beginnen&lt;br /&gt;
# oder entsprechend das devspec2array auf die eigenen Namen anpassen &lt;br /&gt;
sub BenzinLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  return (sort map {ReadingsNum($_,$r,0)} devspec2array(&amp;quot;Tankstelle_.*&amp;quot;))[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34766</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34766"/>
		<updated>2021-02-08T14:29:58Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: Randnotiz entfernt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading09Name Erdgas&lt;br /&gt;
attr Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading10Name Wasserstoff&lt;br /&gt;
attr Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses feste Konstrukt, dass man einfach die 0.009 addiert, kann man auch dynamisch erzeugen.&amp;lt;br/&amp;gt;&lt;br /&gt;
Ich habe dazu beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen jeweils zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene Wert wird dann noch durch 1000 dividiert. In einem userReading (mit dem ursprünglichen Kraftstoffnamen - also ohne das Suffix) werden dann beide Werte summiert.&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 900&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]], passend zu der Definition &amp;quot;Tankstelle_Agip&amp;quot; mit farblicher Hervorhebung des Tiefstpreises und hochgestellter letzter Ziffer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Benzinpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Benzinpreise alias Benzinpreisübersicht&lt;br /&gt;
attr rg_Benzinpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Benzinpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Benzinpreise valueStyle {&#039;style=&amp;quot;color:red&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq BenzinLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#######################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Benzinpreise ###&lt;br /&gt;
#######################################################################################&lt;br /&gt;
sub BenzinLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  my @p;&lt;br /&gt;
  # alle Tankstellen im Array (dazu beginnen die Namen aller Tankstellen mit &amp;quot;Tankstelle_&amp;quot;)&lt;br /&gt;
  for (devspec2array(&amp;quot;Tankstelle_.*&amp;quot;)) {&lt;br /&gt;
    push @p,ReadingsNum($_,$r,0);&lt;br /&gt;
  }&lt;br /&gt;
  return (sort @p)[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34765</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34765"/>
		<updated>2021-02-08T14:03:23Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die gezeigten Anweisungen basieren noch auf einer alten Version (vor Februar 2016) des Moduls HTTPMOD. Das betrifft insbesondere die gewählten &#039;&#039;readings...&#039;&#039;-Namen. Dieses Namensschema wird u.U. in Zukunft nicht mehr unterstützt.&lt;br /&gt;
Zur Umstellung auf das aktuelle Namensschema (am Beispiel &#039;&#039;Shell&#039;&#039;) bitte folgende Aktionen (Eingabe in das Befehlsfenster!) ausführen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Shell enableControlSet 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Shell upgradeAttributes&amp;lt;/code&amp;gt;&lt;br /&gt;
Im FHEM-Log sollten dann Meldungen auftauchen nach dem Schema &lt;br /&gt;
:&#039;&#039;Shell: upgraded attribute ... to new syntax ...&#039;&#039;&lt;br /&gt;
:&#039;&#039;Shell: dropping readings... from userattr list&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading09Name Erdgas&lt;br /&gt;
attr Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading10Name Wasserstoff&lt;br /&gt;
attr Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses feste Konstrukt, dass man einfach die 0.009 addiert, kann man auch dynamisch erzeugen.&amp;lt;br/&amp;gt;&lt;br /&gt;
Ich habe dazu beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen jeweils zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene Wert wird dann noch durch 1000 dividiert. In einem userReading (mit dem ursprünglichen Kraftstoffnamen - also ohne das Suffix) werden dann beide Werte summiert.&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 900&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]], passend zu der Definition &amp;quot;Tankstelle_Agip&amp;quot; mit farblicher Hervorhebung des Tiefstpreises und hochgestellter letzter Ziffer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Benzinpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;Super Plus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Benzinpreise alias Benzinpreisübersicht&lt;br /&gt;
attr rg_Benzinpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Benzinpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Benzinpreise valueStyle {&#039;style=&amp;quot;color:red&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq BenzinLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#######################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Benzinpreise ###&lt;br /&gt;
#######################################################################################&lt;br /&gt;
sub BenzinLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  my @p;&lt;br /&gt;
  # alle Tankstellen im Array (dazu beginnen die Namen aller Tankstellen mit &amp;quot;Tankstelle_&amp;quot;)&lt;br /&gt;
  for (devspec2array(&amp;quot;Tankstelle_.*&amp;quot;)) {&lt;br /&gt;
    push @p,ReadingsNum($_,$r,0);&lt;br /&gt;
  }&lt;br /&gt;
  return (sort @p)[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34764</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34764"/>
		<updated>2021-02-08T13:17:22Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die gezeigten Anweisungen basieren noch auf einer alten Version (vor Februar 2016) des Moduls HTTPMOD. Das betrifft insbesondere die gewählten &#039;&#039;readings...&#039;&#039;-Namen. Dieses Namensschema wird u.U. in Zukunft nicht mehr unterstützt.&lt;br /&gt;
Zur Umstellung auf das aktuelle Namensschema (am Beispiel &#039;&#039;Shell&#039;&#039;) bitte folgende Aktionen (Eingabe in das Befehlsfenster!) ausführen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Shell enableControlSet 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Shell upgradeAttributes&amp;lt;/code&amp;gt;&lt;br /&gt;
Im FHEM-Log sollten dann Meldungen auftauchen nach dem Schema &lt;br /&gt;
:&#039;&#039;Shell: upgraded attribute ... to new syntax ...&#039;&#039;&lt;br /&gt;
:&#039;&#039;Shell: dropping readings... from userattr list&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading09Name Erdgas&lt;br /&gt;
attr Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading10Name Wasserstoff&lt;br /&gt;
attr Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses feste Konstrukt, dass man einfach die 0.009 addiert, kann man auch dynamisch erzeugen.&amp;lt;br/&amp;gt;&lt;br /&gt;
Ich habe dazu beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen jeweils zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene Wert wird dann noch durch 1000 dividiert. In einem userReading (mit dem ursprünglichen Kraftstoffnamen - also ohne das Suffix) werden dann beide Werte summiert.&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 900&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-min-interval SuperE5:14400,SuperE10:14400,Diesel:14400,SuperPlus:14400&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]], passend zu der Definition &amp;quot;Tankstelle_Agip&amp;quot; mit farblicher Hervorhebung des Tiefstpreises und hochgestellter letzter Ziffer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Benzinpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;SuperPlus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Benzinpreise alias Benzinpreisübersicht&lt;br /&gt;
attr rg_Benzinpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Benzinpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Benzinpreise valueStyle {&#039;style=&amp;quot;color:red&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq BenzinLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#######################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Benzinpreise ###&lt;br /&gt;
#######################################################################################&lt;br /&gt;
sub BenzinLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  my @p;&lt;br /&gt;
  # alle Tankstellen im Array (dazu beginnen die Namen aller Tankstellen mit &amp;quot;Tankstelle_&amp;quot;)&lt;br /&gt;
  for (devspec2array(&amp;quot;Tankstelle_.*&amp;quot;)) {&lt;br /&gt;
    push @p,ReadingsNum($_,$r,0);&lt;br /&gt;
  }&lt;br /&gt;
  return (sort @p)[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34763</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34763"/>
		<updated>2021-02-08T13:16:37Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die gezeigten Anweisungen basieren noch auf einer alten Version (vor Februar 2016) des Moduls HTTPMOD. Das betrifft insbesondere die gewählten &#039;&#039;readings...&#039;&#039;-Namen. Dieses Namensschema wird u.U. in Zukunft nicht mehr unterstützt.&lt;br /&gt;
Zur Umstellung auf das aktuelle Namensschema (am Beispiel &#039;&#039;Shell&#039;&#039;) bitte folgende Aktionen (Eingabe in das Befehlsfenster!) ausführen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Shell enableControlSet 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Shell upgradeAttributes&amp;lt;/code&amp;gt;&lt;br /&gt;
Im FHEM-Log sollten dann Meldungen auftauchen nach dem Schema &lt;br /&gt;
:&#039;&#039;Shell: upgraded attribute ... to new syntax ...&#039;&#039;&lt;br /&gt;
:&#039;&#039;Shell: dropping readings... from userattr list&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading09Name Erdgas&lt;br /&gt;
attr Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading10Name Wasserstoff&lt;br /&gt;
attr Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses feste Konstrukt, dass man einfach die 0.009 addiert, kann man auch dynamisch erzeugen.&amp;lt;br/&amp;gt;&lt;br /&gt;
Ich habe dazu beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen jeweils zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene Wert wird dann noch durch 1000 dividiert. In einem userReading (mit dem ursprünglichen Kraftstoffnamen - also ohne das Suffix) werden dann beide Werte summiert.&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 900&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-min-interval SuperE5:14400,SuperE10:14400,Diesel:14400,SuperPlus:14400&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]], passend zu der Definition &amp;quot;Tankstelle_Agip&amp;quot; mit farblicher Hervorhebung des Tiefstpreises und hochgestellter letzter Ziffer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Benzinpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super E5&amp;gt;,&amp;lt;Super E10&amp;gt;,&amp;lt;SuperPlus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Benzinpreise alias Benzinpreisübersicht&lt;br /&gt;
attr rg_Benzinpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;text-align:center;;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Benzinpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Benzinpreise valueStyle {&#039;style=&amp;quot;color:red&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq BenzinLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#######################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Benzinpreise ###&lt;br /&gt;
#######################################################################################&lt;br /&gt;
sub BenzinLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  my @p;&lt;br /&gt;
  # alle Tankstellen im Array (dazu beginnen die Namen aller Tankstellen mit &amp;quot;Tankstelle_&amp;quot;)&lt;br /&gt;
  for (devspec2array(&amp;quot;Tankstelle_.*&amp;quot;)) {&lt;br /&gt;
    push @p,ReadingsNum($_,$r,0);&lt;br /&gt;
  }&lt;br /&gt;
  return (sort @p)[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34762</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=34762"/>
		<updated>2021-02-08T12:52:05Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: Alternative Definition für Benzinpreise mit dynamischer letzter Ziffer, alternative readingsGroup und Funktion zur Ermittlung des niedrigsten jeweiligen Benzinpreises&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die gezeigten Anweisungen basieren noch auf einer alten Version (vor Februar 2016) des Moduls HTTPMOD. Das betrifft insbesondere die gewählten &#039;&#039;readings...&#039;&#039;-Namen. Dieses Namensschema wird u.U. in Zukunft nicht mehr unterstützt.&lt;br /&gt;
Zur Umstellung auf das aktuelle Namensschema (am Beispiel &#039;&#039;Shell&#039;&#039;) bitte folgende Aktionen (Eingabe in das Befehlsfenster!) ausführen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Shell enableControlSet 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Shell upgradeAttributes&amp;lt;/code&amp;gt;&lt;br /&gt;
Im FHEM-Log sollten dann Meldungen auftauchen nach dem Schema &lt;br /&gt;
:&#039;&#039;Shell: upgraded attribute ... to new syntax ...&#039;&#039;&lt;br /&gt;
:&#039;&#039;Shell: dropping readings... from userattr list&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading09Name Erdgas&lt;br /&gt;
attr Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading10Name Wasserstoff&lt;br /&gt;
attr Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
Dieses feste Konstrukt, dass man einfach die 0.009 addiert, kann man auch dynamisch erzeugen.&amp;lt;br/&amp;gt;&lt;br /&gt;
Ich habe dazu beim RegEx eine zweite Capture Gruppe definiert. Dadurch entstehen jeweils zwei Readings mit dem jeweiligen Kraftstoffnamen und den Suffixen &amp;quot;-1&amp;quot; und &amp;quot;-2&amp;quot;. Der neu dazu gekommene Wert wird dann noch durch 1000 dividiert. In einem userReading (mit dem ursprünglichen Kraftstoffnamen - also ohne das Suffix) werden dann beide Werte summiert.&lt;br /&gt;
Dazu hier mal eine Beispielkonfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Tankstelle_Agip HTTPMOD http://www.clever-tanken.de/tankstelle_details/34459 900&lt;br /&gt;
attr Tankstelle_Agip alignTime 00:00&lt;br /&gt;
attr Tankstelle_Agip enableControlSet 1&lt;br /&gt;
attr Tankstelle_Agip event-min-interval SuperE5:14400,SuperE10:14400,Diesel:14400,SuperPlus:14400&lt;br /&gt;
attr Tankstelle_Agip event-on-change-reading SuperE5.*,SuperE10.*,Diesel.*,SuperPlus.*&lt;br /&gt;
attr Tankstelle_Agip reading01-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading01Name SuperE5&lt;br /&gt;
attr Tankstelle_Agip reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading02-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading02Name SuperE10&lt;br /&gt;
attr Tankstelle_Agip reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading03-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading03Name Diesel&lt;br /&gt;
attr Tankstelle_Agip reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading04-2OExpr $val/1000&lt;br /&gt;
attr Tankstelle_Agip reading04Name SuperPlus&lt;br /&gt;
attr Tankstelle_Agip reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-\d&amp;quot;&amp;gt;(\d.\d\d)&amp;lt;[\d\D]{40,60}&amp;quot;suffix-price-\d&amp;quot;&amp;gt;(\d)&lt;br /&gt;
attr Tankstelle_Agip reading05Name street&lt;br /&gt;
attr Tankstelle_Agip reading05Regex &amp;quot;streetAddress&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading06Name zip&lt;br /&gt;
attr Tankstelle_Agip reading06Regex &amp;quot;http://schema.org/postalCode&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip reading07Name city&lt;br /&gt;
attr Tankstelle_Agip reading07Regex &amp;quot;http://schema.org/addressCountry&amp;quot;&amp;gt;(.*)&amp;lt;&lt;br /&gt;
attr Tankstelle_Agip stateFormat E5: SuperE5, E10: SuperE10, SP: SuperPlus, D: Diesel&lt;br /&gt;
attr Tankstelle_Agip timeout 10&lt;br /&gt;
attr Tankstelle_Agip userReadings SuperE5:SuperE5-.* {ReadingsNum($name,&amp;quot;SuperE5-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE5-2&amp;quot;,0)},\&lt;br /&gt;
SuperE10:SuperE10-.* {ReadingsNum($name,&amp;quot;SuperE10-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperE10-2&amp;quot;,0)},\&lt;br /&gt;
SuperPlus:SuperPlus-.* {ReadingsNum($name,&amp;quot;SuperPlus-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;SuperPlus-2&amp;quot;,0)},\&lt;br /&gt;
Diesel:Diesel-.* {ReadingsNum($name,&amp;quot;Diesel-1&amp;quot;,0)+ReadingsNum($name,&amp;quot;Diesel-2&amp;quot;,0)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine etwas andere [[readingsGroup]], passend zu der Definition &amp;quot;Tankstelle_Agip&amp;quot; mit farblicher Hervorhebung des Tiefstpreises und hochgestellter letzter Ziffer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define rg_Benzinpreise readingsGroup &amp;lt;Tankstelle&amp;gt;,&amp;lt;Diesel&amp;gt;,&amp;lt;Super&amp;gt;,&amp;lt;E10&amp;gt;,&amp;lt;SPlus&amp;gt;,&amp;lt;PLZ&amp;gt;,&amp;lt;Ort&amp;gt;,&amp;lt;Straße&amp;gt; Tankstelle_.*:Diesel,SuperE5,SuperE10,SuperPlus,zip,city,street&lt;br /&gt;
attr rg_Benzinpreise alias Benzinpreisübersicht&lt;br /&gt;
attr rg_Benzinpreise cellStyle {&amp;quot;r:1&amp;quot; =&amp;gt; &#039;style=&amp;quot;text-align:center;;font-weight:bold&amp;quot;&#039;}&lt;br /&gt;
attr rg_Benzinpreise valueFormat {&amp;quot;$1&amp;lt;sup&amp;gt;$2&amp;lt;/sup&amp;gt; €&amp;quot; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE=~/^(\d\.\d\d)(\d)$/)}&lt;br /&gt;
attr rg_Benzinpreise valueStyle {&#039;style=&amp;quot;color:red&amp;quot;&#039; if ($READING=~/^Super|Diesel/ &amp;amp;&amp;amp; $VALUE eq BenzinLP($READING))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#######################################################################################&lt;br /&gt;
### Funktion für Ermittlung vom niedrigsten Preis für readingsGroup rg_Benzinpreise ###&lt;br /&gt;
#######################################################################################&lt;br /&gt;
sub BenzinLP($) {&lt;br /&gt;
  my ($r) = @_;&lt;br /&gt;
  my @p;&lt;br /&gt;
  # alle Tankstellen im Array (dazu beginnen die Namen aller Tankstellen mit &amp;quot;Tankstelle_&amp;quot;)&lt;br /&gt;
  for (devspec2array(&amp;quot;Tankstelle_.*&amp;quot;)) {&lt;br /&gt;
    push @p,ReadingsNum($_,$r,0);&lt;br /&gt;
  }&lt;br /&gt;
  return (sort @p)[0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=32894</id>
		<title>FRITZBOX</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=FRITZBOX&amp;diff=32894"/>
		<updated>2020-03-03T10:15:38Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: Code von Funktionen vereinfacht&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Steuerung einer Fritz!Box über FHEM &lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=FRITZ!Box&lt;br /&gt;
|ModTechName=72_FRITZBOX.pm&lt;br /&gt;
|ModOwner=tupol/Topos ({{Link2FU|5432|Forum}} / [[Benutzer Diskussion:Topos|Wiki]])}}&lt;br /&gt;
&lt;br /&gt;
Das Modul [[FRITZBOX]] ermöglicht die Steuerung einer [[AVM Fritz!Box]] und von AVM FRITZ!WLAN Repeatern durch FHEM . An Fritzboxen können sowohl Geräte abgefragt werden, auf denen FHEM selbst läuft (lokaler Modus), als auch entfernte (externe) Geräte.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
=== Remote-Zugang ===&lt;br /&gt;
Für den Remote-Zugang müssen die Module JSON:XS, LWP und SOAP::Lite installiert sein; auf einem [[Raspberry Pi]] oder unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teilweise ist derzeit zusätzlich die Installation der telnet Libraries erforderlich, auch wenn der Telnet-Zugang nicht genutzt werden soll. Siehe dazu den nachfolgenden Abschnitt.&lt;br /&gt;
&lt;br /&gt;
=== Telnet ===&lt;br /&gt;
Das Modul basierte ursprünglich auf dem Zugriff auf die Fritzbox per Telnet. Ab FRITZ!OS 6.2x baut AVM den abgekündigten Telnet-Zugang sowie die webcm-Schnittstelle sukzessive zurück bzw. hat dies, je nach Firmware, schon ganz abgestellt (siehe {{Link2Forum|Topic=38586|LinkText=dieses Forenthema}}). Der zukunftssichere Zugriff auf die Fritzbox sollte also per TR-064 erfolgen. Der Vollständigkeit halber und für ältere Firmwareversionen: &lt;br /&gt;
&lt;br /&gt;
# Wer den Zugang per Telnet (noch) nutzen (kann und) möchte, muss dies zuerst freischalten. Üblicherweise durch Eingabe von #96*7* an einem direkt an der entsprechenden FritzBox angeschlosssenen Telefon&lt;br /&gt;
# Auf dem System, auf dem FHEM  läuft ([[Systemübersicht#Server|Server]]) muss Telnet installiert sein; auf einem [[Raspberry Pi]] und unter Ubuntu z.&amp;amp;nbsp;B. mit dem Befehl&lt;br /&gt;
::&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Erste Schritte ===&lt;br /&gt;
Zur Erstinstallation reicht ein einfaches &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;, dieses Modul funktioniert lokal (FHEM auf Fritzbox) sowie per Fernzugriff (FHEM auf einem anderen Server im Netz, siehe nächsten Schritt).&lt;br /&gt;
&lt;br /&gt;
==== TR-064: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
Für den Fernzugriff über TR-064 auf eine oder mehrere Fritzboxen und/oder einen FRITZ!WLAN Repeater sind die folgenden Schritte nötig (für jedes Gerät):&lt;br /&gt;
&lt;br /&gt;
Fritzbox definieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die Fritzbox nicht unter &amp;lt;nowiki&amp;gt;http://fritz.box&amp;lt;/nowiki&amp;gt; erreichbar ist, IP im define setzen:&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX 192.168.168.168&amp;lt;/code&amp;gt;&lt;br /&gt;
192.168.168.168 dabei natürlich durch die passende IP ersetzen... Alternativ kann statt der IP auch der Hostname eingegeben werden.&lt;br /&gt;
&lt;br /&gt;
Wenn (&#039;&#039;&#039;und nur wenn&#039;&#039;&#039;) das Login auf der Benutzeroberfläche der FritzBox mit User und Passwort (und nicht nur per Passwort) geschieht, den User konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox boxUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt;&lt;br /&gt;
In der Fritzbox muss dann auch &amp;quot;Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort&amp;quot; ausgewählt sein.&lt;br /&gt;
&lt;br /&gt;
Passwort konfigurieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;set FritzBox password &#039;&#039;Passwort&#039;&#039;&amp;lt;/code&amp;gt;  - legt das zugehörige Passwort fest (nur einmal --&amp;gt; gehört nicht in die cfg-Datei) &lt;br /&gt;
&lt;br /&gt;
Manuelle TR-064 Kommandos erlauben (Das Auslesen der Readings per TR-064 funktioniert auch ohne dieses Attribut.):&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox allowTR064Command 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Telnet: Modul FRITZBOX für Zugriff auf einem externen Server einrichten ====&lt;br /&gt;
[[Datei:Screenshot_FritzBox_TelnetUser.png|mini|300px|rechts|Anlegen des Attributs telnetUser]]&lt;br /&gt;
Bei Fernzugriff über Telnet sind weitere Schritte nötig:&lt;br /&gt;
# Telnet auf der Fritzbox freischalten (Tastenkombination #96*7* am angeschlossenen Telefon (auch FritzFon)&lt;br /&gt;
# TelnetUser definieren (wie im Screenshot gezeigt)&lt;br /&gt;
# Passwort zum Benutzer auf der Fritzbox definieren&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot_FritzBox_Passwort.png|mini|300px|rechts|Passwort definieren]]&lt;br /&gt;
&lt;br /&gt;
(bitte die Buttons {{Taste|set}} und {{Taste|attr}} bei der Definition der jeweiligen Einträge nicht vergessen)&lt;br /&gt;
&lt;br /&gt;
Wer stattdessen lieber das [[Konfiguration|Befehl-Eingabefeld]] verwendet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox telnetUser &#039;&#039;Benutzername&#039;&#039; &amp;lt;/code&amp;gt; - legt den Benutzer fest&lt;br /&gt;
:&amp;lt;code&amp;gt;set FritzBox password &#039;&#039;Passwort&#039;&#039; &amp;lt;/code&amp;gt; - legt das zugehörige Passwort fest&lt;br /&gt;
&lt;br /&gt;
Wer keinen User konfiguriert hat, kann das Feld &amp;quot;telnetUser&amp;quot; leer lassen.&lt;br /&gt;
&lt;br /&gt;
Wer sicher gehen möchte, dass auch tatsächlich Telnet und nicht andere Zugriffe benutzt werden, sollte außerdem noch setzen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;attr FritzBox forceTelnetConnection 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== mögliche Fehlermeldungen ===&lt;br /&gt;
Sollte schon bei &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt; die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte prüfen, ob FHEM  auf dem aktuellen Stand ist und ggf. [[Update|aktualisieren]].&lt;br /&gt;
&lt;br /&gt;
Kommt jetzt bei der erneuten Definition die Fehlermeldung &amp;lt;code&amp;gt;Error: Perl modul Net::Telnet is missing on this system&amp;lt;/code&amp;gt; bitte wie oben schon erwähnt den Befehl &lt;br /&gt;
:&amp;lt;code&amp;gt;sudo apt-get install libnet-telnet-perl&amp;lt;/code&amp;gt; &lt;br /&gt;
direkt per Telnet/SSH auf dem FHEM-Server ausführen und neu starten.&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun eure Fritzbox und könnt diverse Einstellungen manuell vornehmen und/oder automatisch vornehmen lassen.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe  {{Link2CmdRef|Lang=de|Anker=FRITZBOXdefine}}&lt;br /&gt;
&lt;br /&gt;
=== Attribute ===&lt;br /&gt;
Siehe {{Link2CmdRef|Lang=de|Anker=FRITZBOXattr}}&lt;br /&gt;
&lt;br /&gt;
=== TR-064 ===&lt;br /&gt;
Die offizielle Programmier-Schnittstelle der Fritz!Box läuft über das Protokoll TR-064.&lt;br /&gt;
&lt;br /&gt;
mit dem Attribute&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; allowTR064Command 1&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
kann man den Befehl&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command &amp;lt;service&amp;gt; &amp;lt;control&amp;gt; &amp;lt;action&amp;gt; [[parameterName1 parameterValue1] ...]&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
freischalten und damit auf diese Schnittstelle zugreifen.&lt;br /&gt;
&lt;br /&gt;
AVM hat die Schnittstellenbeschreibung unter [http://avm.de/service/schnittstellen/] veröffentlicht. Diese wird jedoch nur sehr sporadisch gepflegt.&amp;lt;br&amp;gt;&lt;br /&gt;
Ein besserer Einstiegspunkt befindet sich auf der Box unter http://fritz.box:49000/tr64desc.xml.&amp;lt;br&amp;gt;&lt;br /&gt;
Die möglichen TR-064-Aktionen kann man auch über den Befehl &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064ServiceList&amp;lt;/code&amp;gt; auslesen.&lt;br /&gt;
&lt;br /&gt;
Folgende Service und Controls existieren (für den get-Befehl &#039;&#039;tr064Command&#039;&#039; werden nur die fett formatierten Wörter benötigt)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!serviceType!!controlURL!!XML!!Dokument bei AVM&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceInfo:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceinfo&#039;&#039;&#039;||[http://fritz.box:49000/deviceinfoSCPD.xml deviceinfoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceinfoSCPD.pdf deviceinfoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;DeviceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;deviceconfig&#039;&#039;&#039;||[http://fritz.box:49000/deviceconfigSCPD.xml deviceconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/deviceconfigSCPD.pdf deviceconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Layer3Forwarding:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;layer3forwarding&#039;&#039;&#039;||[http://fritz.box:49000//layer3forwardingSCPD.xml layer3forwardingSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/layer3forwardingSCPD.pdf layer3forwardingSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANConfigSecurity:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanconfigsecurity&#039;&#039;&#039;||[http://fritz.box:49000//lanconfigsecuritySCPD.xml lanconfigsecuritySCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanconfigsecuritySCPD.pdf lanconfigsecuritySCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;ManagementServer:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;mgmsrv&#039;&#039;&#039;||[http://fritz.box:49000//mgmsrvSCPD.xml mgmsrvSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf mgmsrvSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Time:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;time&#039;&#039;&#039;||[http://fritz.box:49000//timeSCPD.xml timeSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/timeSCPD.pdf timeSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;UserInterface:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;userif&#039;&#039;&#039;||[http://fritz.box:49000//userifSCPD.xml userifSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/userifSCPD.pdf userifSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_VoIP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_voip&#039;&#039;&#039;||[http://fritz.box:49000//x_voipSCPD.xml x_voipSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf x_voipSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Storage:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_storage&#039;&#039;&#039;||[http://fritz.box:49000//x_storageSCPD.xml x_storageSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_storageSCPD.pdf x_storageSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_OnTel:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_contact&#039;&#039;&#039;||[http://fritz.box:49000//x_contactSCPD.xml x_contactSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_contactSCPD.pdf x_contactSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_WebDAVClient:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_webdav&#039;&#039;&#039;||[http://fritz.box:49000//x_webdavSCPD.xml x_webdavSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_webdavSCPD.pdf x_webdavSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_UPnP:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_upnp&#039;&#039;&#039;||[http://fritz.box:49000//x_upnpSCPD.xml x_upnpSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_upnp.pdf x_upnp.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_RemoteAccess:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_remote&#039;&#039;&#039;||[http://fritz.box:49000/x_remoteSCPD.xml x_remoteSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_remoteSCPD.pdf x_remoteSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_MyFritz:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_myfritz&#039;&#039;&#039;||[http://fritz.box:49000/x_myfritzSCPD.xml x_myfritzSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_myfritzSCPD.pdf x_myfritzSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_TAM:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_tam&#039;&#039;&#039;||[http://fritz.box:49000/x_tamSCPD.xml x_tamSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf x_tam.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_AppSetup:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_appsetup&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_appsetupSCPD.pdf x_appsetupSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;X_AVM-DE_Homeauto:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;x_homeauto&#039;&#039;&#039;||[http://fritz.box:49000/x_homeautoSCPD.xml x_homeautoSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeautoSCPD.pdf x_homeautoSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:2&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig2&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WLANConfiguration:3&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wlanconfig3&#039;&#039;&#039;||[http://fritz.box:49000/wlanconfigSCPD.xml wlanconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wlanconfigSCPD.pdf wlanconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;Hosts:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;hosts&#039;&#039;&#039;||[http://fritz.box:49000/hostsSCPD.xml hostsSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf hostsSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANEthernetInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanethernetifcfg&#039;&#039;&#039;||[http://fritz.box:49000/lanifconfigSCPD.xml lanifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanifconfigSCPD.pdf lanifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;LANHostConfigManagement:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;lanhostconfigmgm&#039;&#039;&#039;||[http://fritz.box:49000/lanhostconfigmgmSCPD.xml lanhostconfigmgmSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/lanhostconfigmgmSCPD.pdf lanhostconfigmgmSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANCommonInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wancommonifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wancommonifconfigSCPD.xml wancommonifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wancommonifconfigSCPD.pdf wancommonifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLInterfaceConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandslifconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandslifconfigSCPD.xml wandslifconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandslifconfigSCPD.pdf wandslifconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANDSLLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wandsllinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wandsllinkconfigSCPD.xml wandsllinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wandsllinkconfigSCPD.pdf wandsllinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANEthernetLinkConfig:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanethlinkconfig1&#039;&#039;&#039;||[http://fritz.box:49000/wanethlinkconfigSCPD.xml wanethlinkconfigSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanethlinkconfigSCPD.pdf wanethlinkconfigSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANPPPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanpppconn1&#039;&#039;&#039;||[http://fritz.box:49000/wanpppconnSCPD.xml wanpppconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanpppconnSCPD.pdf wanpppconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;urn:dslforum-org:service:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;WANIPConnection:1&#039;&#039;&#039;||/upnp/control/&#039;&#039;&#039;wanipconnection1&#039;&#039;&#039;||[http://fritz.box:49000/wanipconnSCPD.xml wanipconnSCPD.xml]||[http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf wanipconnSCPD.pdf]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status-Symbol ===&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis www/images/default müssen die passenden Dateien &amp;quot;WLAN_on_gWLAN_off.png&amp;quot;, &amp;quot;WLAN_on_gWLAN_on.png&amp;quot; und &amp;quot;WLAN_off.png&amp;quot; liegen. Wenn die PNGs fehlen, können sie {{Link2Forum|Topic=29725|Message=318113|LinkText=hier}} heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
[[Datei:Screenshot_FritzBox1.png|mini|300px|rechts|FRITZBOX Gerät auf der FHEM  Oberfläche]]&lt;br /&gt;
Sollte alles geklappt haben, seht ihr nun unter &amp;quot;Unsortiert&amp;quot; den im nebenstehenden Screenshot gezeigten Eintrag für das &amp;quot;Gerät&amp;quot; (hier mit dem Icon &amp;quot;it_router&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== TR-064 Beispiele ===&lt;br /&gt;
*Box Reboot: &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command DeviceConfig:1 deviceconfig Reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
*Internet Reconnect: &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command WANIPConnection:1 wanipconnection1 ForceTermination&amp;lt;/code&amp;gt;&lt;br /&gt;
*Daten eines Smart-Home-Gerätes auslesen: &amp;lt;code&amp;gt;get &amp;lt;device&amp;gt; tr064Command X_AVM-DE_Homeauto:1 x_homeauto GetGenericDeviceInfos NewIndex 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Klingel- und Sprachausgabe per TR-064 ===&lt;br /&gt;
Das geht derzeit nicht, da entsprechende Kommandos per TR-064 nicht verfügbar sind. Da Telnet sukzessive abgestellt wird, sollten sich Interessenten per Feature-Request an AVM wenden, wie {{Link2Forum|Topic=38586|LinkText=hier}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
Eine Alternative um Telefone klingeln zu lassen, ist die Nutzung des [[SIP-Client]]s.&lt;br /&gt;
&lt;br /&gt;
=== Anwesenheitserkennung per regelmäßiger Abfrage über das PRESENCE Modul ===&lt;br /&gt;
Fritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es nicht mehr. Es gibt auch noch den Zwischenstatus &amp;quot;inactive&amp;quot;, der anscheinend gesetzt wird, bevor das Reading gelöscht wird.&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe des [[PRESENCE]] Moduls (vgl. [[Anwesenheitserkennung]]) kann man auf diese Weise den Anwesenheitsstatus abfragen. Anregungen dazu gibt es im zugehörigen {{Link2Forum|Topic=39433|LinkText=Forenthread}} zur Anwesenheitserkennung und in [http://heinz-otto.blogspot.de/2015/07/die-zeiten-andern-sich.html diesem  Blogpost]. Auf dieser Basis könnte eine einfache Implementierung zum Beispiel so aussehen:&lt;br /&gt;
&lt;br /&gt;
Funktion in [[99_myUtils anlegen|99_myUtils]]:&lt;br /&gt;
&#039;&#039;&#039;(Bitte beim Speichern darauf achten, dass nicht der Name 99_Utils gewählt wird.)&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;perl&#039;&amp;gt;sub checkFritzMACpresent($$) {&lt;br /&gt;
  # Benötigt: Name der zu testenden Fritzbox ($d),&lt;br /&gt;
  #           zu suchende MAC ($m), &lt;br /&gt;
  # Rückgabe: 1 = Gerät gefunden&lt;br /&gt;
  #           0 = Gerät nicht gefunden&lt;br /&gt;
  my ($d,$m) = @_;&lt;br /&gt;
  $m =~ s/:/_/g;&lt;br /&gt;
  $m = &amp;quot;mac_&amp;quot;.uc($m);&lt;br /&gt;
  return ReadingsVal($d,$m,&amp;quot;inactive&amp;quot;) ne &amp;quot;inactive&amp;quot;) ? 1 : 0;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nutzung dieser Funktion mit dem PRESENCE Modul definieren:&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;Name&amp;gt; PRESENCE function {checkFritzMACpresent(&amp;quot;Fritzbox&amp;quot;,&amp;quot;AA:BB:CC:DD:EE:FF&amp;quot;)}  60 60&amp;lt;/code&amp;gt;&lt;br /&gt;
wobei&lt;br /&gt;
*&amp;lt;Name&amp;gt; ein beliebig zu wählender Name für die PRESENCE-Funktion ist,&lt;br /&gt;
*Fritzbox der Name ist, mit dem ihr die abzufragende Fritzbox als FRITZBOX definiert habt,&lt;br /&gt;
*AA:BB:CC:DD:EE:FF die MAC-Adresse des gesuchten Geräts ist.&lt;br /&gt;
* &amp;quot;60 60&amp;quot; sagt, dass der Anwesenheitsstatus im 60-Sekunden-Takt abgefragt wird. Das macht natürlich nur Sinn, wenn ihr mit &amp;lt;code&amp;gt;attr Fritzbox INTERVAL 60&amp;lt;/code&amp;gt; den Abfrageinterval bei der Fritzbox auch entsprechend hochgesetzt habt. Der Standard ist 300.&lt;br /&gt;
* &amp;quot;Log 1&amp;quot; führt immer zum Loggen. Das ist zum Einrichten praktisch, ohne dass man gleich für das ganze Modul oder ganz FHEM &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; verbose 5&amp;lt;/code&amp;gt; setzen muss. Wenn es läuft, können die &amp;quot;Log 1&amp;quot;-Zeilen gelöscht, auskommentiert (# an den Zeilenanfang) oder in &amp;quot;Log 5&amp;quot; geändert werden.&lt;br /&gt;
&lt;br /&gt;
=== Anwesenheitserkennung über mehrere Fritzboxen oder AVM Repeater und Fritzbox ===&lt;br /&gt;
Existiert ein AVM Repeater im Netzwerk, kann der als eigenständiges Gerät mit FRITZBOX definiert werden. WLAN Geräte an der Fritzbox werden in der Instanz der Fritzbox gelistet und WLAN Geräte am Repeater in der Repeater Instanz. Um trotzdem die Anwesenheit im Netzwerk einfach zu erkennen, muss die Subroutine in 99_myUtils.pm abgewandelt werden.&lt;br /&gt;
&lt;br /&gt;
Existiert eine zweite Fritzbox im Accesspointmodus, werden die WLAN Geräte im Netzwerk alle in der Hauptfritzbox an einem LAN Anschluss gelistet. D.h. man sieht an der Hauptfritzbox nicht, dass sie im WLAN sind. Eine zweite Instanz mit dem FRITZBOX Modul muss wegen der Anwesenheitserkennung nicht gemacht werden. Die folgende Routine kann aber universell eingesetzt werden, unabhängig von der Anzahl der FRITZBOX Instanzen. Wer mitloggen will, kann das analog zur obigen Routine einbauen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;perl&#039;&amp;gt;sub checkAllFritzMACpresent($) {&lt;br /&gt;
  # Benötigt: nur die zu suchende MAC ($m), &lt;br /&gt;
  # Es werden alle Instanzen vom Type FRITZBOX abgefragt&lt;br /&gt;
  #&lt;br /&gt;
  # Rückgabe: 1 = Gerät gefunden&lt;br /&gt;
  #           0 = Gerät nicht gefunden&lt;br /&gt;
  my ($m) = @_;&lt;br /&gt;
  # Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0&lt;br /&gt;
  my $s = 0;&lt;br /&gt;
  $m =~ s/:/_/g;&lt;br /&gt;
  $m = &amp;quot;mac_&amp;quot;.uc($m);&lt;br /&gt;
  foreach(devspec2array(&amp;quot;TYPE=FRITZBOX&amp;quot;)){&lt;br /&gt;
    if (ReadingsVal($_,$m,&amp;quot;inactive&amp;quot;) ne &amp;quot;inactive&amp;quot;){&lt;br /&gt;
      # Reading existiert, Rückgabewert ist nicht &amp;quot;inactive&amp;quot;, also ist das Gerät am Netzwerk angemeldet.&lt;br /&gt;
      $s = 1;&lt;br /&gt;
      last;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  return $s&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da hiermit nach allen Instanzen mit dem TYPE=FRITZBOX durchsucht wird, braucht der Name der Fritzbox nicht angegeben werden.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;define &amp;lt;Name&amp;gt; PRESENCE function {checkAllFritzMACpresent(&amp;quot;AA:BB:CC:DD:EE:FF&amp;quot;)}  60 60&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Hinweise zu komplexeren Abfragen mehrere Boxen auf einmal etc. findet ihr auch im diesem {{Link2Forum|Topic=39433|LinkText=Forenthread}}.&lt;br /&gt;
&lt;br /&gt;
=== Anwesenheitserkennung per Notify ===&lt;br /&gt;
Der von Fritzboxen und Fritz!WLAN Repeatern gespeicherte Status zum Status angemeldeter Geräte lässt sich (statt per PRESENCE, s.o.) auch per [[notify]] anfragen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;define n_PRESENCE_mac_AA_BB_CC_DD_EE_FF notify Fritzbox:mac_AA_BB_CC_DD_EE_FF:.* {&lt;br /&gt;
  my $s = &amp;quot;absent&amp;quot;;&lt;br /&gt;
  $s = &amp;quot;present&amp;quot; if (ReadingsVal($NAME,&amp;quot;mac_AA_BB_CC_DD_EE_FF&amp;quot;,&amp;quot;inactive&amp;quot;) ne &amp;quot;inactive&amp;quot;);&lt;br /&gt;
  fhem(&amp;quot;set anwesend_smartphone $s&amp;quot;);&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweise:&lt;br /&gt;
* &amp;lt;code&amp;gt;fhem(&amp;quot;set anwesend_smartphone $s&amp;quot;);&amp;lt;/code&amp;gt; ist nur ein Beispiel, das einen Dummy auf den Status &amp;quot;absent&amp;quot; bzw. &amp;quot;present&amp;quot; setzt. Man kann hier natürlich auch gleich entsprechende Aktionen durchführen. Wer das Beispiel übernehmen möchte, sollte den Dummy vorher definieren (&amp;lt;code&amp;gt;define anwesend_smartphone dummy&amp;lt;/code&amp;gt;).&lt;br /&gt;
* mac_AA_BB_CC_DD_EE_FF ist die MAC-Adresse des gesuchten Geräts.&lt;br /&gt;
* &amp;quot;Fritzbox&amp;quot; ist der Name, unter dem die Fritzbox als FRITZBOX-Modul definiert wurde.&lt;br /&gt;
* Das Notify funktioniert, weil Geräte, wenn sie sich abgemeldet haben, erst den Status &amp;quot;inactive&amp;quot; erhalten. Ist das Gerät ganz abgemeldet, verschwindet das mac_.*-Reading. Dabei löst das Notify nicht mehr aus. Da das mac-.*-Reading aber vorher auf &amp;quot;inactive&amp;quot; stand, wurde die Abwesend-Aktion schon ausgeführt.&lt;br /&gt;
* Damit der Notify nicht andauernd losgeht, sollte man mittels &amp;lt;code&amp;gt;attr Fritzbox [[event-on-change-reading]] mac_AA_BB_CC_DD_EE_FF&amp;lt;/code&amp;gt; Events nur auslösen, wenn sich der Status des Gerätes ändert. Will man mehrere Geräte abfragen, sollte man &amp;lt;code&amp;gt;attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF,mac_GG_HH_II_JJ_KK_LL&amp;lt;/code&amp;gt; setzen, damit bei der Änderung jedes Readings ein Event ausgelöst wird.&lt;br /&gt;
&lt;br /&gt;
=== Vergleich Anwesenheitserkennung PRESENCE/Notify ===&lt;br /&gt;
Die Anwesenheitserkennung per regelmäßiger PRESENCE-Abfrage hat den Vorteil, dass sie im Turnus der regelmäßigen Abfragen immer einen aktuellen Status produziert. Sie hat dafür den Nachteil, dass die PRESENCE-Funktionen regelmäßig abgearbeitet werden müssen, auch wenn sich gar nichts ändert. Außerdem aktualisiert sich der Status nicht sofort, sondern erst bei der nächsten regelmäßigen Abfrage. Durch häufiges Abfragen kann dieser Nachteil verringert werden (bei entsprechend höherer Systemlast).&lt;br /&gt;
&lt;br /&gt;
Die Anwesenheitserkennung per Notify hat den Vorteil, dass ein sich ändernder Status sofort abgebildet wird. Ändert sich kein Status, werden keine Routinen ausgeführt, was die Systemlast gering hält. Der Nachteil ist, dass - z.B. nach einem Systemstart - die entsprechende Aktion erst bei einer Änderung des Status ausgeführt wird. D.h. ist das zu testende Gerät anwesend, wird dann FHEM beendet, das Gerät entfernt und FHEM wieder gestartet, ist der Status in FHEM immer noch &amp;quot;anwesend&amp;quot;. Da das Reading für das Gerät nicht existiert, wird darauf auch erst wieder ein Notify ausgeführt, wenn sich der Status des Geräts wieder ändert, d.h. es wieder ankommt. Bis dahin ist der Status im System falsch. &lt;br /&gt;
Der Nachteil des Notify kann verringert werden, wenn man statt &amp;lt;code&amp;gt;attr Fritzbox event-on-change-reading mac_AA_BB_CC_DD_EE_FF&amp;lt;/code&amp;gt; ein &amp;lt;code&amp;gt;attr Fritzbox [[event-on-update-reading]] mac_AA_BB_CC_DD_EE_FF&amp;lt;/code&amp;gt; setzt. Das erhöht allerdings die Systemlast und funktioniert auch nur für den Status &amp;quot;anwesend&amp;quot;. Bei &amp;quot;abwesend&amp;quot; ist kein Reading vorhanden, so dass auch event-on-update-reading nicht ausgeführt wird.&lt;br /&gt;
Eine weitere Möglichkeit, den Nachteil der Notify-Methode auszugleichen, ist, die Statusabfrage beim Systemstart einmal manuell auszuführen, durch ein notify auf &amp;quot;GLOBAL:initialized&amp;quot;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;global:INITIALIZED {&lt;br /&gt;
  my $s = &amp;quot;absent&amp;quot;;&lt;br /&gt;
  $s = &amp;quot;present&amp;quot; if (ReadingsVal(&amp;quot;Fritzbox&amp;quot;,&amp;quot;mac_AA_BB_CC_DD_EE_FF&amp;quot;,&amp;quot;inactive&amp;quot;) ne &amp;quot;inactive&amp;quot;);&lt;br /&gt;
  fhem(&amp;quot;set anwesend_smartphone $s&amp;quot;);&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Das hilft allerdings nur beim Systemstart. Nicht, wenn FHEM aufgrund irgendwelcher Hänger eine Aktualisierung des Status verpasst hat.&lt;br /&gt;
&lt;br /&gt;
=== userReadings per &#039;&#039;get tr064Command&#039;&#039; oder &#039;&#039;get luaQuery&#039;&#039; ===&lt;br /&gt;
Um dem Gerätewert &amp;lt;userReadingName&amp;gt; den Wert von &amp;lt;VariabelName&amp;gt; aus der Rückgabe des get-Befehls &#039;&#039;tr064Command&#039;&#039; oder &#039;&#039;luaQuery&#039;&#039; zuzuordnen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr &amp;lt;device&amp;gt; userReadings &amp;lt;userReadingName&amp;gt; {my $resp=fhem(&amp;quot;get &amp;lt;device&amp;gt; tr064Command &amp;lt;service&amp;gt; &amp;lt;control&amp;gt; &amp;lt;action&amp;gt; [[&amp;lt;argName1&amp;gt; &amp;lt;argValue1&amp;gt;] ...]&amp;quot;,1);;$resp =~/\&#039;&amp;lt;VariabelName&amp;gt;\&#039; =&amp;gt; &#039;(.*)&#039;/;;return $1;;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Randnotiz|RNTyp=r|RNText=&#039;&#039;&#039;VORSICHT&#039;&#039;&#039;: man sollte einen genaueren Trigger für diese userReadings setzen, sonst wird bei jeder Aktualierung von jedem Reading das get Kommando ausgeführt, was ganz schnell ein (für fhem blockierende) Dauerlaufer werden kann.}}&lt;br /&gt;
&lt;br /&gt;
Beispielsweise&lt;br /&gt;
&amp;lt;pre&amp;gt;attr Fritzbox userReadings urMobilteil_1 {my $resp=fhem(&amp;quot;get Fritzbox tr064Command X_AVM-DE_OnTel:1 x_contact GetDECTHandsetInfo NewDectID 1&amp;quot;,1);;$resp =~/&#039;NewHandsetName&#039; =&amp;gt; &#039;(.*)&#039;/;;return $1;;},&lt;br /&gt;
        urDownstreamDSLRate {my $resp=fhem(&amp;quot;get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo&amp;quot;,1);;$resp =~/&#039;NewDownstreamCurrRate&#039; =&amp;gt; &#039;(.*)&#039;/;;return $1;;},&lt;br /&gt;
        urUpstreamDSLRate {my $resp=fhem(&amp;quot;get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo&amp;quot;,1);;$resp =~/&#039;NewUpstreamCurrRate&#039; =&amp;gt; &#039;(.*)&#039;/;;return $1;;}&amp;lt;/pre&amp;gt;&lt;br /&gt;
oder bei einzelnen Werte über &#039;&#039;get luaQuery&#039;&#039;&amp;lt;pre&amp;gt;attr Fritzbox userReadings sip1_connect {my $resp=fhem(&amp;quot;get Fritzbox luaQuery sip:settings/sip1/connect&amp;quot;,1);;$resp =~/([0-9])$/;;return $1;;}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Klingelton-Einstellung und Abspielen von Sprachnachrichten bei Fritz!OS-Versionen &amp;gt;6.24 ===&lt;br /&gt;
Wenn die Fritzbox weder die Telnet- noch die webcmd-Schnittstelle hat, kann der Klingelton der Fritz!Fons nicht mehr verstellt und auch keine Sprachnachricht über ein Fritz!Fon ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
Es gibt eine Behelfslösung über das Attribut &#039;&#039;useGuiHack&#039;&#039;. Dadurch wird eine Eingabe in die WebGUI der Fritzbox simuliert. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ACHTUNG&#039;&#039;&#039;: Vor allem nach einem Update der FritzBox kann es durch dieses Attribut zu ungewolltem Verstellen von Werten in der Fritzbox kommen.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung der ring-Parameter &amp;quot;play:&amp;quot; und &amp;quot;say:&amp;quot; wird die abzuspielende URL in die M3U-Datei, die unter dem Internal &#039;&#039;M3U_LOCAL&#039;&#039; steht, eingetragen.&amp;lt;br&amp;gt; &lt;br /&gt;
Standardmäßig wird versucht, diese Datei im image-Verzeichnis von FHEM abzulegen. Diese kann dann vom Fritz!Fon über [[FHEMWEB]] abgespielt werden (IP-Freigaben beachten). Direkt nach dem ersten Anlegen der m3u-Datei kennt [[FHEMWEB]] diese noch nicht, daher bitte entweder &#039;&#039;set &amp;lt;webdevice&amp;gt; rereadicons&#039;&#039; ausführen oder FHEM neu starten.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aufgrund der Beschränkungen von [[FHEMWEB]] oder auch bei Authentifizierungsanforderungen ist es empfehlenswert, die Datei über das Attribute &#039;&#039;m3uFileLocal&#039;&#039; selber vorzugeben. Am besten auf einem Webserver, der auf dem FHEM-Server läuft und dessen Seiten-Verzeichnis durch FHEM beschreibbar ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Beispiel: &amp;lt;code&amp;gt;attr Fritzbox m3uFileLocal /var/www/mp3/Fritzbox.m3u&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In dem Radioeintrag &#039;&#039;FHEM&#039;&#039; muss dann &#039;&#039;&#039;auf der FritzBox&#039;&#039;&#039;, die &#039;&#039;&#039;Web&#039;&#039;&#039;-Adresse der entsprechenden Datei eingetragen werden. Dieser Sender sollte zu Testzwecken dann auch einmal am Fritz!Fon von Hand gestartet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Modul versucht, beim Start die einzutragende Radio-URL im image-Verzeichnis selber zu ermitteln (IP-Freigabe beachten). Gelingt dies, so steht diese im Internal &#039;&#039;M3U_URL&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Ring auf mehreren Telefonen gleichzeitig ===&lt;br /&gt;
&lt;br /&gt;
Damit mehrere Telefone per ring gleichzeitig Klingel, muss in der Fritzbox eine Rufgruppe definiert werden.&lt;br /&gt;
Sollte eine Türsprechanlage schon in Benutzung sein, kann die eventuell hierfür bereits eingerichtete Gruppe verwendet werden.&lt;br /&gt;
Das anlegen der Gruppe erfolgt wie in folgender AVM Anleitung erledigt werden. [https://avm.de/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/1148_Interne-Rufgruppe-in-FRITZ-Box-einrichten-Gruppenruf/ AVM Interne Rufgruppe anlegen]&lt;br /&gt;
&lt;br /&gt;
Es muss eine Kurzwahl bei der Gruppe zwingend hinterlegt sein.&lt;br /&gt;
Danach kann mit folgendem Beispiel Code gearbeitet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set FritzBox ring 791 15 show:Türklingel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Name des Devices, Rufgruppen Nummer, Länge und gezeigter Text auf das gewünschte anpassen.&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme / Fehlersuche ==&lt;br /&gt;
=== Fehler nach Firmware Update ===&lt;br /&gt;
Typischer Fehler ist hier &amp;quot;Error: 403 Forbidden&amp;quot;. &lt;br /&gt;
Nach einem Firmwareupdate der Fritzbox am besten auch FHEM neu starten.&lt;br /&gt;
&lt;br /&gt;
=== Modul bleibt im Status &amp;quot;Check APIs&amp;quot; hängen===&lt;br /&gt;
Im Log steht die Meldung: &amp;quot;Error: Timeout when reading Fritz!Box data.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Mögliche Ursache: Nutzung des FHEM-Befehls [[rereadcfg]]. Dieser verträgt sich nicht mit dem Modul &amp;quot;blocking.pm&amp;quot;, das für parallel laufende FHEM-Prozesse genutzt wird.&lt;br /&gt;
&lt;br /&gt;
Abhilfe schafft ein Neustart &amp;lt;code&amp;gt;shutdown restart&amp;lt;/code&amp;gt; oder das Einfügen eines zusätzlichen, lokalen Telnet-Ports z.B. durch &amp;lt;code&amp;gt;define tPortLocal telnet 7073&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nachtschaltung Doppel-WLAN ===&lt;br /&gt;
Beim Abschalten des WLAN über das Modul wird (über TR064) zuerst das 2.4 GHz und dann das 5 GHz WLAN ausgeschaltet. Bei der gleichzeitigen Nutzung der WLAN-Nachtschaltung (Anschalten über das Fritz!OS) wird dann jedoch nur noch das 5 GHz WLAN wieder angeschaltet. Die Box interpretiert den TR064-Befehl anscheinend als ein komplettes Abwählen des 2.4 GHz WLAN.&lt;br /&gt;
&lt;br /&gt;
Abhilfe schafft hier nur ein notify auf das 5 GHz WLAN mit einem nachträglichem Anschalten des 2.4 GHz WLAN.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann das Ausschalten des WLANs nicht direkt über TR064-Kommandos, sondern über einen indirekten Weg erfolgen: über TR064 ein set call abzusetzen und hier den Tastencode zum Ausschalten des WLANs einzugeben, bei einer FritzBox 7490 wäre dies z. B. #96*0*. &lt;br /&gt;
Schaltet man über diese Methode das WLAN aus, kann es über die Nachtschaltung wieder automatisch auf beiden Frequenzen angeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
=== Kabelboxen ===&lt;br /&gt;
Bei Fritz!Boxen für den Kabelanschluss (z.B. Kabel Deutschland) scheint neben Telnet auch die TR064-API nicht zu funktionieren. Vermutlich wurde die API von AVM auf Betreiberwunsch deaktiviert, da man sonst Dinge ändern kann, die das gesamte Kabelnetz stören können.&lt;br /&gt;
&lt;br /&gt;
Zumindest für Unitymedia und einer FRITZ!Box 6490 Cable (lgi) mit FRITZ!OS:06.50 funktioniert TR064. &lt;br /&gt;
&lt;br /&gt;
Eine Rufumleitung bei Abwesenheit (Modul PRESENCE) funktioniert mit einer vorher eingerichten Telefonnummer wie folgt: &lt;br /&gt;
&amp;lt;code&amp;gt;define Rufumleitung DOIF ([Anwesenheit.dum:state] eq &amp;quot;off&amp;quot;) (set FritzBox6490 diversity 1 on) DOELSEIF ([Anwesenheit.dum:state] eq &amp;quot;on&amp;quot;) (set FritzBox6490 diversity 1 off)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wenn&#039;s nicht klingelt ===&lt;br /&gt;
Das Klingeln erfolgt über die Wählhilfe. Eventuell muss über die Weboberfläche der Fritz!Box ein anderer Port eingestellt werden. Der aktuelle steht in &amp;quot;box_stdDialPort&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== TR064-Transport-Error: 500 Can&#039;t connect to ...:49443 (certificate verify failed) ===&lt;br /&gt;
Eventuell hilft es, die Perl Module Net::HTTPS, Net::SSL und IO::Socket::SSL zu aktualisieren.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Error: Old SID not valid anymore.&amp;quot; nach Erlauben von IPv6 auf der Fritzbox ===&lt;br /&gt;
Ohne hier den genauen Grund zu kennen - es hilft die Angabe der IPv4-Adresse: also statt &amp;lt;code&amp;gt;define FritzBox FRITZBOX&amp;lt;/code&amp;gt; dann &amp;lt;code&amp;gt;define FritzBox FRITZBOX &amp;lt;IP&amp;gt;&amp;lt;/code&amp;gt; (z.B. &amp;lt;code&amp;gt;define FritzBox FRITZBOX 192.168.10.1&amp;lt;/code&amp;gt;), so dass das Modul nicht über IPv6 geht.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Didn&#039;t get a session ID&amp;quot; ===&lt;br /&gt;
Bei gleichzeitiger Nutzung anderer Modul für die Fritzbox (z.B. {{Link2CmdRef|Anker=FBAHAHTTP|Lang=en|Label=FBAHAHTTP}}) muss der Zugang über Benutzername und Password erfolgen.&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr &amp;lt;DEVICE&amp;gt; boxUser &amp;lt;USER&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Da das FRITZBOX-Modul eine inoffizielle Schnittstelle benutzt, muss dann auch der normale Zugang zur Box auf &amp;quot;Benutzername und Password&amp;quot; eingestellt sein.&amp;lt;bR&amp;gt;&lt;br /&gt;
In der Firmware 6.92 wird der Zugang über die Menüs &amp;quot;System&amp;quot;-&amp;gt;&amp;quot;Fritz!Box-Benutzer&amp;quot;-&amp;gt;&amp;quot;Anmeldung im Heimnetz&amp;quot; eingestellt.&lt;br /&gt;
&lt;br /&gt;
Oft wird aber auch ein falsches oder gar kein Passwort gesetzt.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;DEVICE&amp;gt; password &amp;lt;PASSWORD&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  TR064-Error 401:invalid action ===&lt;br /&gt;
Eventuell ist auf der Fritzbox ein Benutzer gesetzt und im Modul nicht korrekt angegeben bzw. mit falschen Rechten versehen (attribut boxUser).&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FritzBox]] &lt;br /&gt;
&amp;lt;!-- (Modulkategorie wird automatisch gesetzt) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Akustische Ausgabe]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=30697</id>
		<title>HOMEMODE</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=30697"/>
		<updated>2019-06-06T20:57:52Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* HomeTextWeatherLong */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Das Modul wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden und viele grundlegende Automationen durch Hinzufügen weiterer Geräte bereitzustellen.&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=HOMEMODE&lt;br /&gt;
|ModFTopic=64317&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=22_HOMEMODE.pm&lt;br /&gt;
|ModOwner=DeeSPe&lt;br /&gt;
}}&lt;br /&gt;
Diese Seite beschreibt die Konfiguration und Verwendung des Moduls &#039;&#039;22_HOMEMODE.pm&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Das Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier aufgeführte Anleitung entspricht dem Modul in Version 1.4.2.&lt;br /&gt;
&lt;br /&gt;
Viele allgemein typische Automationen sind bereits fertig integriert.&lt;br /&gt;
&lt;br /&gt;
Die jeweils per Event auszuführenden Befehle können in den entsprechenden &#039;&#039;HomeCMD...&#039;&#039; Atributen hinterlegt werden und so in der Detail Ansicht des HOMEMODE Geräts übersichtlich angezeigt und bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen vieler notify/DOIF ist durch den Einsatz von &#039;&#039;HOMEMODE&#039;&#039; unnötig.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wurde das Modul für die Verwendung mit HomeKit als GUI optimiert. Alle möglichen Mappings für Homebridge sind bereits enthalten und können über einen set Befehl aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:HOMEMODE_Device.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Um Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; benutzen zu können benötigt man als Mindestvoraussetzung ein bereits angelegtes RESIDENTS Gerät mit entsprechenden ROOMMATE/GUEST Geräten.&lt;br /&gt;
&lt;br /&gt;
==Mögliche Automationen==&lt;br /&gt;
Alle Automationen sind optional.&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Beispiele:&lt;br /&gt;
*Änderung des Zustands von ROOMMATE/GUEST Geräten anhand von PRESENCE Geräten&lt;br /&gt;
*Bereitstellung von CMD Attributen für mögliche Events rund um den Heim-/Hausstatus&lt;br /&gt;
*Bereitstellung von Platzhaltern innerhalb der CMD Attribute, z.B. %MODE%, %SEASON% oder %PREVMODE% für die Werte der Readings mode, season und prevMode&lt;br /&gt;
*Einbindung von Kontakt Sensoren, für z.B. Offen-Warnungen nach bestimmten Zeitraum oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Kontakt Sensor konfiguriert werden&lt;br /&gt;
*Einbindung von Bewegungs Sensoren, für z.B. automatische Licht Schaltungen oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Bewegungs Sensor konfiguriert werden&lt;br /&gt;
*Darstellungen und Auslösen von Sabotage Alarmen der eingebundenen Kontakt- und Bewegungssensoren&lt;br /&gt;
*Einbindung von jeweils einem Temperatur und Luftfeuchtigkeitssensor&lt;br /&gt;
*Einbindung eines lokalen Yahoo Wetter Devices zur Ermittlung und Ausgabe der lokalen Wetterdaten und Erzeugung der Wettervorhersage&lt;br /&gt;
*Einbindung von Power und Energy Sensoren zur Ermittlung der Gesamtmengen&lt;br /&gt;
*Einbindung von Calendar/holiday Devices für spezielle im HOMEMODE Device verfügbar zu machende Events&lt;br /&gt;
*von Uhrzeit abhängiger Anwesend-Modus&lt;br /&gt;
*Bewohner unabhängige Tageszeit-Modus&lt;br /&gt;
*Alarm-Modus&lt;br /&gt;
*DND-Modus&lt;br /&gt;
*Überwachung von Batteriewerten&lt;br /&gt;
&lt;br /&gt;
=HOMEMODE-Gerät=&lt;br /&gt;
==Definition==&lt;br /&gt;
Das HOMEMODE Gerät - hier mit dem Namen &#039;&#039;Home&#039;&#039; versehen - selbst wird über&lt;br /&gt;
 define Home HOMEMODE&lt;br /&gt;
bei Vorhandensein nur eines RESIDENTS Geräts definiert.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung mehrerer RESIDENTS Geräte muss das Master RESIDENTS Gerät beim Definieren mit angegeben werden&lt;br /&gt;
 define Home HOMEMODE rgr_Residents&lt;br /&gt;
Dieses Modul verwendet das globale Attribut &#039;&#039;language&#039;&#039; zur Bestimmung der Anzeigedaten (Standard: EN=english). Für deutsche Ausgabedaten kann das Attribut&lt;br /&gt;
 attr global language DE&lt;br /&gt;
gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Alternativ kann auch nur das HOMEMODE Gerät auf deutsch geändert werden&lt;br /&gt;
 attr Home HomeLanguage DE&lt;br /&gt;
&lt;br /&gt;
==Set-Befehle==&lt;br /&gt;
&#039;&#039;set &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 set Home anyoneElseAtHome &amp;lt;on/off&amp;gt;&lt;br /&gt;
einschalten wenn jemand anderes zu Hause ist der kein registrierter ROOMMATE/GUEST ist, z.B. Hund/Katze oder unregistrierte Gäste&amp;lt;br&amp;gt;&lt;br /&gt;
wenn eingeschaltet, dann wird der Alarm Mode beim Verlassen statt auf armaway nur auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
schaltet man ein und hat schon Haus/Wohnung verlassen, so wird der Alarm Mode von armaway auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AEAH%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd &amp;lt;on/off&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. um Benachrichtigungen zu deaktivieren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DND%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd-for-minutes &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus für die angegebenen Minuten ein&amp;lt;br&amp;gt;&lt;br /&gt;
kehrt danach zum vorherigen (tageszeitabhängigen) Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home deviceDisable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
deaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home deviceEnable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
reaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home location &amp;lt;arrival/home/bed/underway/wayhome&amp;gt;&lt;br /&gt;
manueller Ortswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%LOCATION%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home mode &amp;lt;morning/day/afternoon/evening/night/gotosleep/asleep/absent/gone/home&amp;gt;&lt;br /&gt;
manueller Moduswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm &amp;lt;armaway/armhome/armnight/disarm&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVAMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm-for-minutes &amp;lt;armaway/armhome/armnight/disarm&amp;gt; &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus für die angegebenen Minuten ein&lt;br /&gt;
kehrt danach zum vorherigen Alarm Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home updateHomebridgeMapping&lt;br /&gt;
aktualisiert das Attribut homebridgeMapping des HOMEMODDE Device abhängig von den verfügbaren Informationen&lt;br /&gt;
&lt;br /&gt;
 set Home updateInternalForce&lt;br /&gt;
führt eine Aktualisierung der Internals des HOMEMODE Device aus&amp;lt;br&amp;gt;&lt;br /&gt;
das sollte manuell benutzt werden nachdem das Modul aktualisiert und nur ein reload statt restart gemacht wurde&amp;lt;br&amp;gt;&lt;br /&gt;
auch wenn man überwachte/kontrollierte Geräte ändert sollte man diesen Befehl manuell ausführen, z.B. neue ROOMMATE/GUEST im RESIDENTS Device hinzufügt, oder Geräte in FHEM hinzufügt die dem selben Devspec wie bisher entsprechen (Steckdosen, Sensoren)&lt;br /&gt;
&lt;br /&gt;
==Get-Befehle==&lt;br /&gt;
&#039;&#039;get &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 get Home contactsOpen &amp;lt;all/doorsinside/doorsoutside/doorsmain/outside/windows&amp;gt;&lt;br /&gt;
Liste von all/doorsinside/doorsoutside/doorsmain/outside/windows offenen Kontakten&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%OPEN%&#039;&#039;&#039;, &#039;&#039;&#039;%OPENCT%&#039;&#039;&#039; und &#039;&#039;&#039;%OPENHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home devicesDisabled&lt;br /&gt;
Anzeige der für HOMEMODE deaktivierten Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home mode&lt;br /&gt;
Anzeige von mode&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home modeAlarm&lt;br /&gt;
Anzeige von modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%MODEALARM%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home publicIP&lt;br /&gt;
holen der öffentlichen IP Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%IP%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home sensorsTampered&lt;br /&gt;
Liste aller sabotierten Sensoren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%TAMPERED%&#039;&#039;&#039;, &#039;&#039;&#039;%TAMPEREDCT%&#039;&#039;&#039; und &#039;&#039;&#039;%TAMPEREDHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weather &amp;lt;long/short&amp;gt;&lt;br /&gt;
Wetterinfo im angegebenen Format anzeigen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%WEATHER%&#039;&#039;&#039; und &#039;&#039;&#039;%WEATHERLONG%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weatherForecast [TAG]&lt;br /&gt;
Wettervorhersage für angegebenen Tag&amp;lt;br&amp;gt;&lt;br /&gt;
wenn kein Tag angegeben wird, so wird die Vorhersage für morgen (2) ausgegeben&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%FORECAST%&#039;&#039;&#039; (morgen) und &#039;&#039;&#039;%FORECASTTODAY%&#039;&#039;&#039; (heute) sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
==webCmd==&lt;br /&gt;
Die Schaltmöglichkeiten sind absichtlich gering gehalten, denn im normalen Betrieb sollte nicht mehr benötigt werden als die hier gebotenen.&amp;lt;br&amp;gt;&lt;br /&gt;
Es lässt sich der Alarm Mode manuell umschalten und beim Klick auf das devStateIcon wird der DND Mode an- und ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
==Grundkonfiguration==&lt;br /&gt;
&lt;br /&gt;
Diese Grundkonfiguration sollte immer als erstes erfolgen um entsprechend darauf weiter aufzubauen. Als zweiter Schritt ist dann die erweiterte Konfiguration angedacht.&lt;br /&gt;
&lt;br /&gt;
Bei der Namensvergabe der Attribute vom HOMEMODE Device wurde nach einem möglichst kurzem Prefix gesucht und nach vielen Tests wurde sich für das Prefix &amp;quot;Home&amp;quot; entschieden. Das hat den Vorteil, dass alle Attribute beisammen stehen und diese auch (durch den Großbuchstaben am Anfang) ziemlich weit oben in der Liste der Attribute stehen. Ebenso wurde bei der Namensvergabe versucht, selbsterklärende Namen zu wählen. Das hat den Vorteil, dass man relativ einfach genau erkennen kann wofür das Attribut steht, allerdings auch den Nachteil, dass einige Attributnamen ganz schön lang werden.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedUserAttr====&lt;br /&gt;
Als Erstes wird empfohlen, gerade für Anfänger, das Attribut &amp;quot;HomeAdvancedUserAttr&amp;quot; auf 1 zu setzen. Dadurch werden viel mehr HomeCMD Attribute freigeschaltet. Diese werden im Attribut userattr des HOMEMODE Device hinzugefügt.&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAlarmModes====&lt;br /&gt;
Als Nächstes sollte man sich entscheiden, ob die Alarm Modus evtl. nicht automatisch zum jeweiligen Modus des HOMEMODE Device geschaltet werden sollen. Standardmäßig werden die Alarm Modus automatisch gesteuert. Ist das nicht erwünscht, so ist der Wert dieses Attributs auf 0 zu setzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;absent&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armaway&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;home&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;disarm&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;asleep&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armnight&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Alarm Modus &amp;quot;armhome&amp;quot; kann nur manuell gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeAutoArrival====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird bei Ankunft jedes ROOMMATE/GUEST die location des jeweiligen ROOMMATE/GUEST für die hier angegeben Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt. Beim ersten nach Hause kommenden ROOMMATE/GUEST wird zusätzlich die location des HOMEMODE Device für die hier eingestellte Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Ablauf der hier eingestellten Minuten wechselt das jeweilige Device von &amp;quot;arrival&amp;quot; auf &amp;quot;home&amp;quot;, sofern es noch die location &amp;quot;arrival&amp;quot; hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAsleep====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Schlafengehen (gotosleep) jedes ROOMMATE/GUEST ein Timer gestartet, der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;asleep&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAwoken====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Erwachen (&amp;quot;awoken&amp;quot; oder &amp;quot;home nach asleep&amp;quot;) jedes ROOMMATE/GUEST dieser auf &amp;quot;awoken&amp;quot; gesetzt und ein Timer gestartet, der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;home&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoDaytime====&lt;br /&gt;
Standardmäßig wird mode anhand der Tageszeit automatisch gesetzt. Ist das nicht gewünscht, kann das über den Wert 0 deaktiviert werden. Dann stehen allerdings tageszeitabhängigen mode(s) nicht mehr zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeResidentCmdDelay====&lt;br /&gt;
Normalerweise werden die Events der ROOMMATE/GUEST vor denen des HOMEMODE Device ausgeführt. Um das zu ändern wird die Ausführung der ROOMMATE/GUEST HomeCMD Attribute um die hier eingestellte Zeit in Sekunden verzögert.&amp;lt;br&amp;gt;&lt;br /&gt;
Je genauer der Name des jeweiligen HomeCMD Attributs beschrieben wird, desto später wird dieser ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Das heißt z.B. dass HomeCMDmode vor HomeCMDmode-absent und dieser wiederrum vor HomeCMDmode-absent-ROOMMATE/GUEST-NAME ausgeführt wird usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Um das normale Verhalten wiederherzustellen ist der Wert dieses Attributs auf 0 zu setzen. Dann wird HomeCMDmode-absent-ROOMMATE/GUEST-NAME vor HomeCMDmode-absent und vor HomeCMDmode ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis unendlich in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
==Konfiguration Presence Devices (automatische anwesend/abwesend Umschaltung von ROOMMATE/GUEST)==&lt;br /&gt;
Damit die automatische Zuordnung der Presence Devices zu ihren ROOMMATE/GUEST Devices zuverlässig funktioniert, ist es nötig dass der Hauptteil des Namens des ROOMMATE/GUEST innerhalb des Namens des zugehörigen PRESENCE Device(s) vorkommt.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Attribut HomePresenceDeviceType kann man den zu suchenden TYPE von Presence Device vorgeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Per Default werden nur Devices vom TYPE PRESENCE gesucht und versucht den ROOMMATE/GUEST zuzuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls man z.B. auch Devices vom TYPE dummy zur Anwesenheitssteuerung benutzt, kann man diese im Attribut HomePresenceDeviceType mit hinzunehmen. Es sind alles Device TYPEn möglich die ein &amp;quot;presence&amp;quot; Reading mit den Werten &amp;quot;present/appeared&amp;quot; und &amp;quot;absent/disappeared&amp;quot; bereitstellen. Mehrere TYPEn sind möglich da in diesem Attribut ein Regex erwartet wird. z.B.: dummy oder PRESENCE|dummy oder PRESENCE|dummy|ONKYO_AVR.&lt;br /&gt;
&lt;br /&gt;
===Beispiel===&lt;br /&gt;
Der Device Name meines ROOMMATE ist &amp;quot;rr_Dan&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf der Suche nach dem zugehörigen Presence Device wird der erste Teil (rr_ oder rg_) weggeschnitten und der Rest in Kleinbuchstaben umgewandelt.&amp;lt;br&amp;gt;&lt;br /&gt;
Mit dem was übrig bleibt, bei mir also nur dan, werden die möglichen Presence Devices versucht zu erkennen.&amp;lt;br&amp;gt;&lt;br /&gt;
Mein zugehöriges Presence Device heißt, historisch gewachsen, PRESENCE_rr_Dan und würde somit problemlos zugeordnet werden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen der zugehörigen Presence Devives könnten in ihrer kürzesten Form auch wie folgt sein um meinen ROOMMATE/GUEST Device zugeordnet zu werden:&amp;lt;br&amp;gt;&lt;br /&gt;
 pdan&lt;br /&gt;
 danp&lt;br /&gt;
 ZDan&lt;br /&gt;
 DANZ&lt;br /&gt;
 wenndannsonst&lt;br /&gt;
Aber Achtung, es funktioniert nicht mehr wenn die Namen nicht eindeutig sind. Wenn es z.B. eine rr_Dana geben würde mit Presence Device Name &amp;quot;pdani&amp;quot;, dann würde dieser Name auch bei mir (dan) passen. Das könnte man aber auch bewußt nutzen um mit einem Presence Device 2 ROOMMATE/GUEST Devices gleichzeitig zu steuern.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn die Namen wirklich absolut eindeutig sind, dann könnte man den Regex im Attribut HomePresenceDeviceType sogar auf &amp;quot;.*&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Werden pro ROOMMATE/GUEST mehrere Presence Devices gefunden und zugeordnet, so wird automatisch dass Attribut HomePresenceDeviceAbsentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt; auf die Anzahl der gefundenen Presence Devices gesetzt, so dass der/die jeweilige ROOMMATE/GUEST immer erst als abwesend gewertet wird sobald alle zugehörigen Presence Devices abwesend sind. Analog dazu gibt es noch das Attribut HomePresenceDevicePresentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresence====&lt;br /&gt;
Ist dieses Attribut auf 1 gesetzt, so werden die ROOMMATE/GUEST Devices automatisch zum Status ihrer zugehörigen PRESENCE Devices geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device present - ROOMMATE/GUEST home&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device absent - ROOMMATE/GUEST absent&amp;lt;br&amp;gt;&lt;br /&gt;
Falls es sich bei den von Euch benutzen PRESENCE Devices nicht um Devices vom TYPE PRESENCE handeln sollte, sondern z.B. um PRESENCE und dummy, so kann dieses im Attribut HomePresenceDeviceType als Regex konfiguriert werden! z.B.: PRESENCE|dummy&amp;lt;br&amp;gt;&lt;br /&gt;
Damit ein Device als Presence Device erkannt werden kann, muss dieses über ein presence Reading verfügen.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresenceSuppressState====&lt;br /&gt;
unterdrücke Anwesenheitsänderung in angegebenen State(s) der RESIDENTS&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. für &amp;quot;mysteriös&amp;quot; verschwindende Anwesenheitsgeräte in der Nacht&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: asleep|awoken|gotosleep&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceType====&lt;br /&gt;
Regex des TYPEs/der TYPEn von Presence Devices&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Regex der Device TYPEn&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: PRESENCE&lt;br /&gt;
&lt;br /&gt;
==Erweiterte Konfiguration==&lt;br /&gt;
Um das HOMEMODE Device vollumfänglich zu benutzen ist es sinnvoll weitere Devices (zur Überwachung) hinzuzufügen.&lt;br /&gt;
&lt;br /&gt;
Die bereits möglichen hinzuzufügenden Devices werden hier folgend nach Attributnamen erklärt.&lt;br /&gt;
&lt;br /&gt;
===Attribute zum Hinzufügen weiterer Geräte===&lt;br /&gt;
&lt;br /&gt;
====HomeEventsCalendarDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeEventsHolidayDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorAirpressure====&lt;br /&gt;
Luftdrucksensor aussen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorHumidityOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussensensors für Luftfeuchtigkeit anzugeben. Dieser muss ein Reading humidity besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für (Aussen)Luftfeuchtigkeit und Aussentemperatur ein und der selbe ist, so muss dieser nur einmalig im Attribut HomeSensorTemperatureOutside hinterlegt werden. Dieser muss dann die beiden Readings humidity und temperature haben. Im Bedarfsfall können diese Readings auch vorher entsprechend durch eigene userReadings erstellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%HUMIDITY%&#039;&#039;&#039; für den Wert des Readings humidity zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorTemperatureOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussentemperatursensors anzugeben. Dieser muss mindestens ein Reading temperature besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für Aussentemperatur auch ein Reading humidity besitzen sollte und dieses auch der Sensor für die Aussenlufteuchtigkeit ist, so muss dieser nur einmalig hier in diesem Attribut hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%TEMPERATURE%&#039;&#039;&#039; für den Wert des Readings temperature zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading temperature und optional humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContact====&lt;br /&gt;
Hier können alle Kontakt Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDcontact Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das optische und magnetische Kontaktsensoren vom HomeMatic. HM-SEC-SCO und HM-SEC-SC-2.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;model=HM-SEC-SC(O|-2)&#039;&#039;&#039; eingetragen um alle diese Kontaktsensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Kontaktsensoren mit ihren Namen im Internal SENSORSCONTACT des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Kontaktsensor folgende Attribute im Attribut userattr hinzugefügt:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====HomeContactType=====&lt;br /&gt;
Typ des Kontakts - wird versucht anhand des Namen/Alias beim Hinzufügen zum HOMEMODE Device zu ermitteln, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: doorinside,dooroutside,doormain,window&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: window&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Kontaktsensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModes=====&lt;br /&gt;
Regex der Mode(s) des HOMEMODE Device in denen keine Offen Warnungen erfolgen sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist ein Kontakt geöffnet während die hier eingestellten Mode(s) eintreten, so wird der noch bestehende Timer abgebrochen. Entgegengesetzt startet er wieder sobal die hier eingestellten Mode(s) verlassen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist hier z.B. &amp;quot;gotosleep|asleep&amp;quot; eingestellt, so kann man z.B. das Fenster schon vor dem Auslösen von gotosleep oder asleep öffnen und der bestehende Offenwarnung-Timer wird dann abgebrochen. Sobald man am Morgen z.B. awoken oder home auslöst, so wird ein neuer Timer gestartet der einen dann an das noch offene Fenster erinnert.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle Modes des HOMEMODE Device&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModesResidents=====&lt;br /&gt;
Devspec der ROOMMATE/GUEST Devices deren Status statt der Modes des HOMEMODE Device für Attribut HomeOpenDontTriggerModes benutzt werden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle überwachten ROOMMATE/GUEST&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenMaxTrigger=====&lt;br /&gt;
Maximale Anzahl an Warnmeldungen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ganze Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimes=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimesDividers=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactOpenTimeDividers des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2 1 2 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsContactReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactReadings====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeDividers====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeOpenTimesDividers in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 2 1 2 2.5 (für 4 Jahreszeiten)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeMin====&lt;br /&gt;
Minimale Zeit in Minuten die mindestens für eine Offenwarnung gewartet werden soll - im Falle dass sich durch den Teiler evtl. zu kleine Werte ergeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: eine Zahle mit max. einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimes====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 7.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminance====&lt;br /&gt;
Devspec von (Innen-)Lichtsensoren deren Durchschnittswert berechnet werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotion====&lt;br /&gt;
Hier können alle Bewegungs Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDmotion Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Motion Sensor Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0801-1001|010f-0800-1001&#039;&#039;&#039; eingetragen um alle diese Bewegungssensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Damit bei den Gen5 Sensoren auch das open im reading state steht, habe ich mir bei diesen Sensoren ein userReading angelegt.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Bewegungssensoren mit ihren Namen im Internal SENSORSMOTION des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Bewegungssensor folgende Attribute im Attribut userattr hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Bewegungssensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsMotionReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeSensorLocation=====&lt;br /&gt;
Standort des Bewegungssensors (außen oder innen) - wird standardmäßig beim Hinzufügen zum HOMEMODE Device auf &amp;quot;inside&amp;quot; gesetzt, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: inside,outside&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: inside&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsMotionValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionReadings====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergy====&lt;br /&gt;
Hier können alle Energie Sensoren als Devspec hinterlegt werden. Diese müssen die beiden Readings power und energy besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Anhand dieser Readings wird dann der Gesamtverbrauch und die derzeitige gesamte Leistungsaufnahme berechnet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Wall Plugs Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0600-1000|010f-0602-1001&#039;&#039;&#039; eingetragen um alle diese Energie Sensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec mit vorhandenen energy und power Readings&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmoke====&lt;br /&gt;
Devspec mit Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorWindspeed====&lt;br /&gt;
Sensor für Windgeschwindigkeit&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors und Reading der Windgeschwindigkeit separiert mit : (z.B. ga_Windsensor:wind)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBattery====&lt;br /&gt;
Devspec von Batteriesensoren mit einem Reading &amp;quot;battery&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerAnyoneElseAtHome====&lt;br /&gt;
auslösendes Gerät für anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn:valueOff&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerPanic====&lt;br /&gt;
auslösendes Gerät für Panikalarm&amp;lt;br&amp;gt;&lt;br /&gt;
valueOff ist optional, wird es weggelassen, so fungiert valueOn als toggle&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn[:valueOff]&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTwilightDevice====&lt;br /&gt;
Hier ist der Name des lokalen Twilight Device anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich die Platzhalter &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039;, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; in den HomeCMD Attributen zur Verfügung. &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039; wird dann durch das Reading light, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; durch das Reading twilight und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; durch das aktuelle Twilight Event ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeUWZ====&lt;br /&gt;
Hier ist der Name des lokalen UWZ Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%UWZ%&#039;&#039;&#039;, &#039;&#039;&#039;%UWZSHORT%&#039;&#039;&#039; und &#039;&#039;&#039;%UWZLONG%&#039;&#039;&#039; sind verfügbar in allen HomeCMD Attributen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des UWZ Geräts&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeYahooWeatherDevice====&lt;br /&gt;
Hier ist der Name des lokalen Yahoo Weather Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich einige Platzhalter zur Verfügung. Für die genaue Beschreibung derer siehe &amp;quot;Platzhalter&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
===HomeText Attribute===&lt;br /&gt;
Die HomeText Attribute sind größtenteils zur Übersetzung einiger benötigter Begriffe gedacht.&amp;lt;br&amp;gt;&lt;br /&gt;
In den speziellen Attributen die mit HomeTextWeather anfangen, sind ganze Texte mit entsprechenden Platzhaltern einzufügen.&lt;br /&gt;
&lt;br /&gt;
====HomeTextAndAreIs====&lt;br /&gt;
Übersetzung für &amp;quot;and&amp;quot;, &amp;quot;are&amp;quot; und &amp;quot;is&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort/Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: and|are|is&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 und|sind|ist&lt;br /&gt;
&lt;br /&gt;
====HomeTextClosedOpen====&lt;br /&gt;
Übersetzung für &amp;quot;closed&amp;quot; und &amp;quot;open&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: closed|open&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 geschlossen|geöffnet&lt;br /&gt;
&lt;br /&gt;
====HomeTextNosmokeSmoke====&lt;br /&gt;
Übersetzung für &amp;quot;no smoke&amp;quot; und &amp;quot;smoke&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: no smoke|smoke&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 kein Rauch|Rauch&lt;br /&gt;
&lt;br /&gt;
====HomeTextRisingConstantFalling====&lt;br /&gt;
Übersetzung für &amp;quot;rising&amp;quot;, &amp;quot;constant&amp;quot; und &amp;quot;falling&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: rising|constant|falling&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 steigend|gleichbleibend|fallend&lt;br /&gt;
&lt;br /&gt;
====HomeTextTodayTomorrowAfterTomorrow====&lt;br /&gt;
Übersetzung für &amp;quot;today&amp;quot;, &amp;quot;tomorrow&amp;quot; und &amp;quot;day after tomorrow&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: today|tomorrow|day after tomorrow&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Heute|Morgen|Übermorgen&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherNoForecast====&lt;br /&gt;
Übersetzung für &amp;quot;No forecast available&amp;quot; - Text wenn keine Wettervorhersage verfügbar ist&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: No forecast available&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es ist leider keine Wettervorhersage für den angegebenen Tag verfügbar!&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastInSpecDays====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage in 4-10 Tagen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 In %DAY% Tagen %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastToday====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für heute&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C. Aktuelle Temperatur %TEMPERATURE%°C bei einer Luftfeuchtigkeit von %HUMIDITY%%. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastTomorrow====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für morgen/übermorgen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherLong====&lt;br /&gt;
Langer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es %TOBE% %CONDITION% bei %TEMPERATURE%°C und %HUMIDITY%% Luftfeuchtigkeit. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h. Der Luftdruck liegt bei %PRESSURE%hPa.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherShort====&lt;br /&gt;
Kurzer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %CONDITION%, %TEMPERATURE%°C, %HUMIDITY%% Luftfeuchtigkeit, Luftdruck %PRESSURE%hPa&lt;br /&gt;
&lt;br /&gt;
===weitere Attribute===&lt;br /&gt;
Viele weitere Dinge lassen sich anpassen.&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedDetails====&lt;br /&gt;
mehr Details anzeigen, abhängig von den zu HOMEMODE hinzugefügten Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: none, detail, both, room&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Auswahlliste&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: none&lt;br /&gt;
&lt;br /&gt;
====HomeDaytimes====&lt;br /&gt;
Eigene Tageszeiten als Paare aus Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Zeit|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 00:00|Mitternacht&lt;br /&gt;
 00:05|Nacht&lt;br /&gt;
 06:30|Morgen&lt;br /&gt;
 10:00|Vormittag&lt;br /&gt;
 13:00|Mittag&lt;br /&gt;
 14:30|Nachmittag&lt;br /&gt;
 17:30|Vorabend&lt;br /&gt;
 19:00|Abend&lt;br /&gt;
 23:00|Spätabend&lt;br /&gt;
&lt;br /&gt;
====HomeIcewarningOnOffTemps====&lt;br /&gt;
2 leerzeichenseparierte Temperaturen für das Ein- und Ausschalten der Eiswarnung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei leerzeichenseparierte Temperaturen mit maximal einer Kommastelle&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 2 3&lt;br /&gt;
&lt;br /&gt;
====HomeModeAlarmArmDelay====&lt;br /&gt;
Zeit in Sekunden um das aktivieren der Alarmschaltung zu verzögern.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl (gleiche Verzögerung für alle modeAlarm) oder 3 leerzeichenseparierte Zahlen für jeden modeAlarm (Reihenfolge: armaway armnight armhome)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAtTmpRoom====&lt;br /&gt;
Diesen Raum zu temporäre at(s) hinzufügen die von HOMEMODE generiert werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceAbsentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;absent&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: maximale Anzahl von verfügbaren Presence Geräten für jeden ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDevicePresentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;present&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomePublicIpCheckInterval====&lt;br /&gt;
Interval in Minuten für die Überprüfung der öffentlichen IP-Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0 (deaktiviert)&lt;br /&gt;
&lt;br /&gt;
====HomeSeasons====&lt;br /&gt;
Eigene Jahreszeiten als Paare aus Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Datum|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 03.01|spring 06.01|summer 09.01|autumn 12.01|winter&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 03.01|Frühling&lt;br /&gt;
 06.01|Sommer&lt;br /&gt;
 09.01|Herbst&lt;br /&gt;
 12.01|Winter&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryLowPercentage====&lt;br /&gt;
Prozentsatz um einen Batteriesensor mit geringer Batterie anzuzeigen (nur bei Sensoren die ihren Batteriewert prozentual angeben)&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 50&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryReading====&lt;br /&gt;
Reading der Batteriesensoren welches statt &amp;quot;battery&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: battery&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminanceReading====&lt;br /&gt;
Reading der Lichtsensoren welches statt &amp;quot;luminance&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: luminance&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergyReadings====&lt;br /&gt;
Readings der Power/Energy Sensoren welche statt &amp;quot;power&amp;quot; und &amp;quot;energy&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: 2 leerzeichenseparierte Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: power energy&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeReading====&lt;br /&gt;
Readings der Rauchmelder welche statt &amp;quot;state&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ein Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeValue====&lt;br /&gt;
Regex der Auslösewerte von Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: RegEx&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: on&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialLocation====&lt;br /&gt;
Hier können eigene zusätzliche location(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; location &amp;lt;LOCATION&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialModes====&lt;br /&gt;
Hier können eigene zusätzliche mode(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; mode &amp;lt;MODE&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTrendCalcAge====&lt;br /&gt;
Zeit in Sekunden für das Maximalalter des vorherigen Wertes für die Trendberechnung&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 900&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Teil der Konfiguration ist das Befüllen der HomeCMD Attribute. Da dieses durch die Vermischung von FHEM Code, Perl Code und zusätzlichen Platzhaltern erst einmal sehr befremdlich sein kann, habe ich bei der Beschreibung der HomeCMD Attribute teilweise Beispiele hinzugefügt um den Einstieg weiter zu erleichtern.&lt;br /&gt;
&lt;br /&gt;
==HomeCMD Attribute (mit Beispielen)==&lt;br /&gt;
Die HomeCMD Attribute sind zum Festlegen der jeweiligen Schaltaktionen gedacht und können damit evtl. vorhandene notify/DOIF ablösen. Sie können mit FHEM-Code, Perl-Code oder aber auch mit beidem vermischt befüllt werden (wovon ich allerdings abrate). Zusätzlich sind noch diverse Platzhalter (siehe Platzhalter) verfügbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Perl-Code innerhalb der HomeCMD Attribute gibt es hier Besonderheiten.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
*Im Gegensatz zur FHEM-Eingabezeile müssen hier keine Semikolon verdoppelt werden&lt;br /&gt;
*Kommetarzeilen sind zulässig&lt;br /&gt;
*Kommentare am Ende einer Perl-Zeile sind nicht zulässig&lt;br /&gt;
&lt;br /&gt;
Typischer Weise werden in den HomeCMD Attributen weitere Module angesprochen.&amp;lt;br&amp;gt;&lt;br /&gt;
Z.B. benutze ich für jegliche Form der Benachrichtigung den msg Befehl.&lt;br /&gt;
&lt;br /&gt;
Keines der HomeCMD Attribute hat einen Standardwert. Es müssen alle Befehle selbst programmiert werden.&lt;br /&gt;
&lt;br /&gt;
Platzhalter die Text(e) (string) beinhalten, müssen im Perl-Code in Anführungszeichen gesetzt werden (Beispiel %SENSOR%).&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter die Zahlen beinhalten (int,float) sollten nicht in Anführungszeichen gesetzt werden damit Zahlenvergleiche (mittels ==, &amp;lt;=, &amp;gt;=, &amp;gt;, &amp;lt;) funktionieren (Beispiel %LIGHT%, %ICE% oder %TEMPERATURE%).&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-off====&lt;br /&gt;
Befehle die beim Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Rauchalarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-on====&lt;br /&gt;
Befehle die bei einem Rauchalarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;meldet&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;melden&amp;quot; if (%SMOKECT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %SMOKEHR% $is Rauchalarm!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Sabotage Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-off====&lt;br /&gt;
Befehle die beim Ende eines Sabotage Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Manipulationen wurden beseitigt!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-on====&lt;br /&gt;
Befehle die bei einem Sabotage Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%TAMPEREDCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %TAMPEREDHR% $is sabotiert!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-off====&lt;br /&gt;
Befehle die beim Ende eines Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg ENTWARNUNG: Alle Alarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-on====&lt;br /&gt;
Befehle die bei einem Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%ALARMCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg audio,push,light 3 !!! ALARM !!! %ALARMHR% $is ausgelöst!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome====&lt;br /&gt;
Befehle die beim on/off von anyoneElseAtHome ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-off====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armaway&amp;quot; auf &amp;quot;armhome&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome on&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun niemand anderes mehr zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-on====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armhome&amp;quot; auf &amp;quot;armaway&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder wieder Alarme melden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird anyoneElseAtHome bei Anwesenheit und nicht deaktiviertem HomeAutoAlarmModes aktiviert, so passiert erst einmal nichts, ausser dass die hier angegebenen Befehle ausgeführt werden. Wird dann später die Abwesenheit erkannt, schaltet der Alarm Mode auf &amp;quot;armhome&amp;quot; statt auf &amp;quot;armaway&amp;quot; damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome off&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun noch jemand anderes zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDbatteryLow====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Sensor einen niedrigen Batteriewert meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg;&lt;br /&gt;
   $msg = &amp;quot;Die Batterien von %BATTERYLOW% gehen zur Neige und sollten ausgetauscht werden!&amp;quot; if (%BATTERYLOWCT% == 1);&lt;br /&gt;
   $msg = &amp;quot;Die Batterien bei folgenden Geräten sollten ausgetauscht werden: %BATTERYLOWALL%&amp;quot; if (%BATTERYLOWCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push $msg&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontact====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor geschlossen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geschlossen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor offen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun offen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormain====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor Type doormain open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain wird geschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 { &lt;br /&gt;
   # Wenn es Ankommende gibt&lt;br /&gt;
   if (&amp;quot;%ARRIVERS%&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Zusammenstellen der Begrüßung&lt;br /&gt;
     my $msg = &amp;quot;Gute&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # &amp;quot;n&amp;quot; anhängen wenn Tageszeit nicht Nacht ist&lt;br /&gt;
     $msg .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Leerzeichen einfügen&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # den Feiertag der Tageszeit voranstellen wenn ein Feiertag im Kalender FEIERTAG ist&lt;br /&gt;
     $msg .= &amp;quot;%FEIERTAG%-&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Tageszeit einfügen&lt;br /&gt;
     $msg .= &amp;quot;%DAYTIME% &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # bei ROOMMATE &amp;quot;zu Hause&amp;quot; in Begrüßung einfügen&lt;br /&gt;
     $msg .= &amp;quot;zu Hause &amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; =~ /^rr_/);&lt;br /&gt;
 &lt;br /&gt;
     # Ankommende einfügen&lt;br /&gt;
     $msg .= &amp;quot;%ARRIVERS%&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Begrüßung am Sonos im Flur ausgeben bei Abwesenheit über 60 min&lt;br /&gt;
     fhem &amp;quot;msg audio \@fl_Sonos $msg!&amp;quot; if (%DURABSENCELAST% &amp;gt; 60);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain geöffnet&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geöffnet!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning1====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die erste Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: erste Offenwarnzeit des Kontakts erreicht&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning2====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die zweite Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: ab Erreichen der zweiten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht immer noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarningLast====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die letzte Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Erreichen der letzten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das ist der letzte Hinweis %ALIAS% endlich zu schliessen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald sich die Tageszeit (daytime) auf einen beliebigen Wert ändert.&amp;lt;br&amp;gt;&lt;br /&gt;
Um die jeweilige eingetretene Tageszeit zu ermitteln ist der Platzhalter &#039;&#039;&#039;%DAYTIME%&#039;&#039;&#039; vorgesehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime)&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime-&amp;amp;lt;DAYTIME&amp;amp;gt;====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald die jeweilige Tageszeit (daytime) erreicht ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime) auf bestimmten Wert&amp;lt;br&amp;gt;&lt;br /&gt;
Bei &amp;quot;night&amp;quot; könnte man z.B. die Heizung bewohnerunabhängig ausschalten, bei &amp;quot;morning&amp;quot; wieder ein.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceDisable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceDisable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun deaktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional wirklich attr disable für Device setzen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;attr %DEVICE%:FILTER=disable!=1 disable 1; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf gone/none setzen wenn Presence Devices deaktiviert werden&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     my $resident = $1;&lt;br /&gt;
     my $gone = $resident =~ /^rr_/ ? &amp;quot;gone&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set $resident:FILTER=state!=$gone state $gone&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceEnable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceEnable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun aktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional attr disable für Device entfernen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;deleteattr %DEVICE%:FILTER=disable=1 disable; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf home setzen wenn Presence Devices aktiviert werden und anwesend sind&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $1:FILTER=state!=home state home&amp;quot; if (ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;present&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd====&lt;br /&gt;
Befehle die beim Anfang/Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%DND%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun eingeschaltet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun beendet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-off====&lt;br /&gt;
Befehle die beim Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-on====&lt;br /&gt;
Befehle die beim Beginn des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun eingeschaltet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent====&lt;br /&gt;
Befehle die beim Beginn eines beliebigen (holiday)Kalender Events ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten on&amp;quot; if (&amp;quot;%EVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-each====&lt;br /&gt;
Befehle die beim Beginn/Ende eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-URLAUBDAN-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Dan hat jetzt Urlaub!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Der Urlaub von Dan ist nun zu Ende!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-WOHNUNG-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Heizung an/aus schalten&lt;br /&gt;
   my $heiz = &amp;quot;([bksw]z|ku)_Thermostat&amp;quot;;&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /^heizung(..+)?$/i)&lt;br /&gt;
   {&lt;br /&gt;
     my $zeit = $1;&lt;br /&gt;
     if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
 &lt;br /&gt;
       # morgens nicht alle Thermostaten schalten&lt;br /&gt;
       $heiz = &amp;quot;([bks]z|ku)_Thermostat&amp;quot; if ($zeit &amp;amp;&amp;amp; $zeit =~ /morgens?$/i);&lt;br /&gt;
       fhem &amp;quot;set $heiz:FILTER=controlMode!=day controlMode day&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^heizung/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $heiz:FILTER=controlMode!=night controlMode night&amp;quot; if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # WLAN an/aus schalten&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi off&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi on&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Putzfrau (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Gast (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-begin====&lt;br /&gt;
Befehle die beim Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-Neujahr-begin&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set %SENSORSENERGY% meterReset&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-end====&lt;br /&gt;
Befehle die bei Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemDEFINED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn ein neues Gerät angelegt wird (define)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Jedem neu definierten Gerät den Geräte-TYPE auch als Raum im Menüpunkt Module zuweisen&lt;br /&gt;
   fhem &amp;quot;attr %DEFINED% room Module-&amp;gt;&amp;quot;.InternalVal(&amp;quot;%DEFINED%&amp;quot;,&amp;quot;TYPE&amp;quot;,&amp;quot;default&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemINITIALIZED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn FHEM gestartet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg FHEM Home wurde gestartet...&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemSAVE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn in FHEM die Konfigurationsdatei gespeichert wird&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel (Backup von fhem.cfg und fhem.state):&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Datum/Uhrzeit&lt;br /&gt;
   my $now = Timeow();&lt;br /&gt;
   # Leerzeichen durch Unterstriche ersetzen&lt;br /&gt;
   $now =~ s/ /_/g;&lt;br /&gt;
   # Backup der Datei fhem.cfg&lt;br /&gt;
   `cp $attr{global}{configfile} ./backup/fhem.cfg.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.cfg.$now&amp;quot;;&lt;br /&gt;
   # Backup der Datei fhem.state&lt;br /&gt;
   `cp $attr{global}{statefile} ./backup/fhem.state.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.state.$now&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemUPDATE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn das Update von FHEM ausgeführt wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das Update für FHEM ist beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning====&lt;br /&gt;
Befehle die bei Anfang/Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0/1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%ICE%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg push ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!.&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-off====&lt;br /&gt;
Befehle die bei Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-on====&lt;br /&gt;
Befehle die bei Beginn der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation====&lt;br /&gt;
Befehle die beim Ändern der location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation-&amp;amp;lt;LOCATION&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf eine bestimmte location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmte location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode====&lt;br /&gt;
Befehle die beim Ändern von mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-absent-belated====&lt;br /&gt;
Befehle die nachträglich zur Abwesenheit ausgeführt werden sollen, die Zeit kann im Atteribut &amp;quot;HomeModeAbsentBelatedTime&amp;quot; eingestellt werden&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Abwesenheit + XX min&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten mode&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-absent&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set HarmonyHub:FILTER=activity!=PowerOff activity PowerOff;&lt;br /&gt;
 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 set TYPE=SONOSPLAYER:FILTER=Volume&amp;gt;0 Volume 0;&lt;br /&gt;
 set Sonos stopAll;&lt;br /&gt;
 sleep 3;&lt;br /&gt;
 set Wohnung [FILTER=state!=off] off&amp;quot;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 define atTmp_wz_Media_aus_%SELF% at +01:00:00 set HarmonyHub:FILTER=currentActivity!=PowerOff activity PowerOff;&lt;br /&gt;
 define atTmp_wz_Venti_aus_%SELF% at +01:00:00 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 define atTmp_wzLS_aus_%SELF% at +00:30:00 set wz_LS scene aus;&lt;br /&gt;
 define atTmp_all_Sonos_vol_down_%SELF% at +00:02:00 set TYPE=SONOSPLAYER:FILTER=Volume!=0 Volume 0 1;&lt;br /&gt;
 define atTmp_all_Sonos_off_%SELF% at +00:02:30 set Sonos stopAll;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=off off;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=on on&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-gone&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlManu off&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen beliebigen Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von beliebigem Resident ausgelöst&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 msg audio @%AUDIO% Guten Nacht und schlaf&#039; gut %ALIAS%!&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg = &amp;quot;Guten&amp;quot;;&lt;br /&gt;
   $msg .= &amp;quot; %FEIERTAG%&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
   $msg .= &amp;quot; Morgen %ALIAS%&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;msg audio \@%AUDIO% $msg&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;defmod atTmp_wetter_%RESIDENT%_%SELF% at +00:07:00 msg audio Wettervorhersage für heute: %FORECASTTODAY%&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen bestimmten Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von bestimmten Resident ausgelöst&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm====&lt;br /&gt;
Befehle die beim Ändern von modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung modeAlarm&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm-&amp;amp;lt;armaway/armhome/armnight/disarm&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armaway&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%PREVAMODE%&amp;quot; eq &amp;quot;disarm&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Alarmanlage einschalten&lt;br /&gt;
     fhem &amp;quot;set AA_Arm:FILTER=level!=100 alarmLevel armAll&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht zusammensetzen&lt;br /&gt;
     my $msg;&lt;br /&gt;
     $msg .= &amp;quot;Die Alarmanlage ist nun scharf geschaltet!&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
     my $is = &amp;quot;%ALARMHR%&amp;quot; =~ /und/ ? &amp;quot;sind&amp;quot; : &amp;quot;ist&amp;quot;;&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot; if ($msg);&lt;br /&gt;
     $msg .= &amp;quot;ACHTUNG: %ALARMHR% $is noch offen!!!&amp;quot; if (%ALARMCT%);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an ROOMMATE/GUEST senden&lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 &lt;br /&gt;
     # Eingangstür abschließen falls noch nicht geschehen&lt;br /&gt;
     fhem &amp;quot;set fl_Tuerschloss:FILTER=state!=locked lock&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armhome&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armnight&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-disarm&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Alarmanlage ausschalten&lt;br /&gt;
   fhem &amp;quot;set AA_Arm:FILTER=level!=0 alarmLevel disarmed&amp;quot;;&lt;br /&gt;
   my $prio = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # Nachrichtenpriorität auf 1 setzen bei Ankunft (höhere Lautstärke beim Abspielen damit man das auch vor der Tür hört)&lt;br /&gt;
   $prio = &amp;quot; 1&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; eq &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht an ROOMMATE/GUEST senden wenn der vorherige alarmMode nicht &amp;quot;armnight&amp;quot; ist&lt;br /&gt;
   fhem &amp;quot;msg audio \@fl_Sonos$prio Die Alarmanlage ist nun ausgeschaltet %ALIAS%!&amp;quot; if (&amp;quot;%PREVAMODE%&amp;quot; ne &amp;quot;armnight&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion====&lt;br /&gt;
Befehle die bei Statusänderung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: öffnen/schließen eines beliebigen Bewegungsmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Raum aus Sensornamen ermitteln, z.B. bz_Sensor&lt;br /&gt;
   my $room = (split /_/,&amp;quot;%SENSOR%&amp;quot;)[0];&lt;br /&gt;
 &lt;br /&gt;
   # Status des structure aller Lichter dieses Raums&lt;br /&gt;
   my $lichter = Value($room.&amp;quot;_Lichter&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Status des dummy Tageslicht&lt;br /&gt;
   my $tl = Value(&amp;quot;Tageslicht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   if (&amp;quot;%STATE%&amp;quot; eq &amp;quot;geöffnet&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Lichtwert des Sensors&lt;br /&gt;
     my $lum = ReadingsNum(&amp;quot;%SENSOR%&amp;quot;,&amp;quot;luminance&amp;quot;,100);&lt;br /&gt;
 &lt;br /&gt;
     # Löschen des evtl. schon vorhandenen &amp;quot;at&amp;quot;&lt;br /&gt;
     fhem &amp;quot;delete atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot; if (IsDevice(&amp;quot;atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
     # Licht nur wenn kein Tageslicht oder Lichtwert des Sensors kleiner als 10 und AutoLight eingeschaltet und modeAlarm nicht armaway&lt;br /&gt;
     if (($tl eq &amp;quot;off&amp;quot; || $lum &amp;lt; 10) &amp;amp;&amp;amp; $lichter eq &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot; &amp;amp;&amp;amp; &amp;quot;%AMODE%&amp;quot; ne &amp;quot;armaway&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $scene;&lt;br /&gt;
 &lt;br /&gt;
       # verschiedene Szenen für verschiedene Modus bzw. Aussenlichtstärken&lt;br /&gt;
       if (&amp;quot;%MODE%&amp;quot; eq &amp;quot;gotosleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Abend&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (&amp;quot;%MODE%&amp;quot; eq &amp;quot;asleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Nacht&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;gt; 3)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;viel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;lt; 4)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;mittel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       # Schalten der entsprechenden Szene (Modul LightScene)&lt;br /&gt;
       fhem &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene $scene&amp;quot; if ($scene);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     # unterschiedliche Ausschaltzeiten für unterschiedliche Räume&lt;br /&gt;
     my $t = 3;&lt;br /&gt;
     $t = 15 if ($room eq &amp;quot;wz&amp;quot;);&lt;br /&gt;
     $t = 2 if ($room eq &amp;quot;bz&amp;quot; || ($room =~ /wz|ku/ &amp;amp;&amp;amp; &amp;quot;%MODE%&amp;quot; =~ /sleep/));&lt;br /&gt;
     $t = 1 if ($room eq &amp;quot;fl&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Zahl in Minuten umrechnen in einen Zeitpunkt für das &amp;quot;at&amp;quot;&lt;br /&gt;
     my $d = HOMEMODE_hourMaker($t);&lt;br /&gt;
 &lt;br /&gt;
     # Anlegen des &amp;quot;at&amp;quot; zum Ausschalten des Lichts wenn die Lichter angeschaltet sind und auch AutoLight eingeschaltet ist&lt;br /&gt;
     if ($lichter ne &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $cmd = &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene aus&amp;quot;;&lt;br /&gt;
       fhem &amp;quot;defmod atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF% at +$d $cmd&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-off====&lt;br /&gt;
Befehle die bei Ende der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-on====&lt;br /&gt;
Befehle die bei Beginn der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set w_Steckdosen [FILTER=state!=on] on;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode auto&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-device====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein beliebiges Presence Device, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebiges Presence Device&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present-device&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # mindestens 1x täglich den Batteriewert des PRESENCE Geräts bei erkannter Anwesenheit holen&lt;br /&gt;
   fhem &#039;&amp;quot;sudo /opt/fhem/scripts/GTag-bat.sh %DEVICE% %ADDRESS% &amp;amp;&amp;quot;&#039;&lt;br /&gt;
     if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE_/ &amp;amp;&amp;amp; (!defined ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,undef) || ReadingsAge(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,0) &amp;gt; 64800));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen beliebigen Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebigen Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-absent-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Mich benachrichtigen wenn ich nicht zu hause bin und jemand anderes die Wohnung verlässt&lt;br /&gt;
   fhem &amp;quot;msg push \@rr_Dan %ALIAS% hat gerade die Wohnung verlassen!&amp;quot;&lt;br /&gt;
     if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot; &amp;amp;&amp;amp; ReadingsVal(&amp;quot;rr_Dan&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) ne &amp;quot;present&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Verabschiedungsnachricht zusammensetzen&lt;br /&gt;
   my $msg;&lt;br /&gt;
 &lt;br /&gt;
   # Alle außer mich selbst verabschieden&lt;br /&gt;
   $msg .= &amp;quot;Bis bald und auf Wiedersehen %ALIAS%...&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Glättewarnung wenn nötig&lt;br /&gt;
   $msg .= &amp;quot; ACHTUNG!!! Es ist %TEMPERATURE%°C kalt! Somit könnte es glatt werden!&amp;quot; if (%ICE%);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht senden wenn vorhanden&lt;br /&gt;
   fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispielcode für &amp;quot;HomeCMDpresence-present-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # alle Ankommenden außer mir selbst&lt;br /&gt;
   if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Benachrichtigung wenn jemand kommt&lt;br /&gt;
     fhem &amp;quot;msg audio %ALIAS% kommt gerade!&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; ne &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) zusammensetzen&lt;br /&gt;
     my $g = &amp;quot;gute&amp;quot;;&lt;br /&gt;
     $g .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) senden &lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% Willkommen und $g %DAYTIME% %ALIAS%!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmten Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;-&amp;amp;lt;DEVICE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein bestimmtes Presence Device eines bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Dieses Attribut ist nur verfügbar wenn ein Resident mehr als ein Presence Device hat&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmtes Presence Device eines bestimmten Resident&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Jahreszeit&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $t = &amp;quot;%SEASON%&amp;quot;;&lt;br /&gt;
   $t .= &amp;quot;s&amp;quot; if ($t eq &amp;quot;Frühling&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;msg push Die Wohnung ist nun im $t-Modus!&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set Heizungen [FILTER=controlMode!=auto] controlMode auto&amp;quot; if ($t ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason-&amp;amp;lt;SEASON&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit in eine bestimmte Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung bestimmte Jahreszeit&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight====&lt;br /&gt;
Befehle die bei Änderung der Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight-&amp;amp;lt;sr/sr_astro/sr_civil/sr_indoor/sr_weather/ss/ss_astro/ss_civil/ss_indoor/ss_weather&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung zu bestimmter Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung zu bestimmter Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn====&lt;br /&gt;
Befehle die bei Beginn/Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn/Ende der UWZ Warnungen&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-begin====&lt;br /&gt;
Befehle die bei Beginn der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg %UWZLONG%&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-end====&lt;br /&gt;
Befehle die beim Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg Alle Unwetterwarnungen sind nun beendet!&lt;br /&gt;
&lt;br /&gt;
=Platzhalter=&lt;br /&gt;
==verfügbar in allen HomeCMD Attributen==&lt;br /&gt;
===%ADDRESS%===&lt;br /&gt;
MAC Adresse des zuletzt ausgelösten Presence Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALARM%===&lt;br /&gt;
Liste mit Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&lt;br /&gt;
&lt;br /&gt;
===%ALARMCT%===&lt;br /&gt;
Anzahl der ausgelösten Alarm Geräte&lt;br /&gt;
&lt;br /&gt;
===%ALARMHR%===&lt;br /&gt;
Liste mit (human readable) Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für msg benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
Alias des zuletzt ausgelösten Resident&lt;br /&gt;
&lt;br /&gt;
===%AMODE%===&lt;br /&gt;
aktueller Alarm Mode&lt;br /&gt;
&lt;br /&gt;
===%AEAH%===&lt;br /&gt;
Wert von anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 1 wenn on und 0 wenn off&lt;br /&gt;
&lt;br /&gt;
===%ARRIVERS%===&lt;br /&gt;
Alias-Liste der ROOMMATE/GUEST deren location auf arrival steht&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Residents zu begrüßen&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. Peter, Paul und Marry&lt;br /&gt;
&lt;br /&gt;
===%AUDIO%===&lt;br /&gt;
Audio Device des zuletzt ausgelösten ROOMMATE/GUEST (Attribut msgContactAudio)&amp;lt;br&amp;gt;&lt;br /&gt;
wenn das Attribut msgContactAudio des jeweiligen Resident keinen Wert hat, so wird versucht den Wert des Attributs aus dem globalMsg (sofern vorhanden) auszulesen&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Resident spezifische msg(s) vom Typ audio zu senden, z.B. Nacht/Morgen Grüße/Wünsche&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOW%===&lt;br /&gt;
Alias des zu letzt gemeldeten Geräts mit niedrigem Batteriestand&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWALL%===&lt;br /&gt;
Wert des Reading batteryLow_hr&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWCT%===&lt;br /&gt;
Wert des Reading batteryLow_ct&lt;br /&gt;
&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Reading condition des überwachten Yahoo weather Device&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für Wetter(vorhersage) benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%CONTACT%===&lt;br /&gt;
Wert des Reading lastContact (Name des zuletzt geöffneten Kontakt Sensor)&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um msg zu versenden&lt;br /&gt;
&lt;br /&gt;
===%DAYTIME%===&lt;br /&gt;
Wert des Reading daytime&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Tageszeit spezifische Aktionen zu schalten&lt;br /&gt;
&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
Name des zuletzt ausgelösten Presence Gerät&lt;br /&gt;
&lt;br /&gt;
===%DEVICEA%===&lt;br /&gt;
Wert des Reading lastAbsentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DEVICEP%===&lt;br /&gt;
Wert des Reading lastPresentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DISABLED%===&lt;br /&gt;
Wert des Reading devicesDisabled&lt;br /&gt;
&lt;br /&gt;
===%DND%===&lt;br /&gt;
DND Status&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn an, 0 wenn aus&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCE%===&lt;br /&gt;
Wert des Reading durTimerAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCELAST%===&lt;br /&gt;
Wert des Reading lastDurAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCE%===&lt;br /&gt;
Wert des Reading durTimerPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCELAST%===&lt;br /&gt;
Wert des Reading lastDurPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEP%===&lt;br /&gt;
Wert des Reading durTimerSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEPLAST%===&lt;br /&gt;
Wert des Reading lastDurSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME&amp;gt;%===&lt;br /&gt;
Event des benannten Kalenders&amp;lt;br&amp;gt;&lt;br /&gt;
0 wenn kein gerade kein Event ist&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME-EVENTNAME&amp;gt;%===&lt;br /&gt;
0 wenn das benannte Event nicht aktiv ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn das benannte Event aktiv ist&lt;br /&gt;
&lt;br /&gt;
===%FORECAST%===&lt;br /&gt;
Wettervorhersage für morgen&lt;br /&gt;
&lt;br /&gt;
===%FORECASTTODAY%===&lt;br /&gt;
Wettervorhersage für heute&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITY%===&lt;br /&gt;
Wert des Reading humidity von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITYTREND%===&lt;br /&gt;
Wert des Reading humidityTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%ICE%===&lt;br /&gt;
0 wenn keine Eiswarnung besteht&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn Eiswarnung besteht&lt;br /&gt;
&lt;br /&gt;
===%IP%===&lt;br /&gt;
Wert des Reading publicIP von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LIGHT%===&lt;br /&gt;
Wert des Reading light von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATION%===&lt;br /&gt;
Wert des Reading location von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATIONR%===&lt;br /&gt;
Wert des Reading location des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCE%===&lt;br /&gt;
Wert des Reading luminance von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCETREND%===&lt;br /&gt;
Wert des Reading luminanceTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%MODE%===&lt;br /&gt;
gerade aktiver Modus von HOMEMODE (Reading mode)&lt;br /&gt;
&lt;br /&gt;
===%MODEALARM%===&lt;br /&gt;
aktueller Alarm Mode (wie %AMODE%)&lt;br /&gt;
&lt;br /&gt;
===%MOTION%===&lt;br /&gt;
Wert des Reading lastMotion von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%NAME%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %SELF%)&lt;br /&gt;
&lt;br /&gt;
===%OPEN%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENCT%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENHR%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PANIC%===&lt;br /&gt;
0 wenn panic ausgeschaltet ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn panic eingeschaltet ist&lt;br /&gt;
&lt;br /&gt;
===%RESIDENT%===&lt;br /&gt;
Name des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PRESENT%===&lt;br /&gt;
presence von HOMEMODE&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESENTR%===&lt;br /&gt;
presence des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESSURE%===&lt;br /&gt;
Wert des Reading pressure von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVAMODE%===&lt;br /&gt;
vorheriger modeAlarm von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVCONTACT%===&lt;br /&gt;
vorheriger geöffneter Kontaktsensor&lt;br /&gt;
&lt;br /&gt;
===%PREVMODE%===&lt;br /&gt;
vorheriger mode von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVMODER%===&lt;br /&gt;
vorheriger state des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PREVMOTION%===&lt;br /&gt;
vorheriger geöffneter Bewegungsmelder&lt;br /&gt;
&lt;br /&gt;
===%SEASON%===&lt;br /&gt;
Wert des Reading season von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SELF%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %NAME%)&lt;br /&gt;
&lt;br /&gt;
===%SENSORSBATTERY%===&lt;br /&gt;
Liste aus Internal SENSORSBATTERY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSCONTACT%===&lt;br /&gt;
Liste aus Internal SENSORSCONTACT&lt;br /&gt;
&lt;br /&gt;
===%SENSORSENERGY%===&lt;br /&gt;
Liste aus Internal SENSORSENERGY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSMOTION%===&lt;br /&gt;
Liste aus Internal SENSORSMOTION&lt;br /&gt;
&lt;br /&gt;
===%SENSORSSMOKE%===&lt;br /&gt;
Liste aus Internal SENSORSSMOKE&lt;br /&gt;
&lt;br /&gt;
===%SMOKE%===&lt;br /&gt;
Wert des Reading alarmSmoke von HOMEMODE&lt;br /&gt;
0 wenn kein Alarm&lt;br /&gt;
&lt;br /&gt;
===%SMOKECT%===&lt;br /&gt;
Wert des Reading alarmSmoke_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SMOKEHR%===&lt;br /&gt;
Wert des Reading alarmSmoke_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPERED%===&lt;br /&gt;
Wert des Reading sensorsTampered von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDCT%===&lt;br /&gt;
Wert des Reading sensorsTampered_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDHR%===&lt;br /&gt;
Wert des Reading sensorsTampered_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURE%===&lt;br /&gt;
Wert des Reading temperature von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURETREND%===&lt;br /&gt;
Wert des Reading temperatureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TOBE%===&lt;br /&gt;
are/sind oder is/ist der Wetterkondition&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHT%===&lt;br /&gt;
Wert des Reading twilight von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHTEVENT%===&lt;br /&gt;
aktuelles twilight Event&lt;br /&gt;
&lt;br /&gt;
===%UWZ%===&lt;br /&gt;
UWZ Warnlevel&lt;br /&gt;
&lt;br /&gt;
===%UWZLONG%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (lange Version)&lt;br /&gt;
&lt;br /&gt;
===%UWZSHORT%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (kurze Version)&lt;br /&gt;
&lt;br /&gt;
===%WEATHER%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather short&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WEATHERLONG%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather long&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WIND%===&lt;br /&gt;
Wert des Reading wind von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%WINDCHILL%===&lt;br /&gt;
Wert des Reading wind_chill vom eingebundenen Yahoo Wetter Gerät&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDcontact, HomeCMDmotion und HomeCMDalarm Attributen==&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%SENSOR%===&lt;br /&gt;
name des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%STATE%===&lt;br /&gt;
state des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeTextWeatherForecast Attributen==&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Readings condition des Yahoo Weather Geräts&lt;br /&gt;
&lt;br /&gt;
===%DAY%===&lt;br /&gt;
Tag der Wettervorhersage (1 - heute, 2 - morgen)&lt;br /&gt;
&lt;br /&gt;
===%HIGH%===&lt;br /&gt;
maximale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
===%LOW%===&lt;br /&gt;
minimale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDevent Attributen==&lt;br /&gt;
===%CALENDAR%===&lt;br /&gt;
Name der Kalenders&lt;br /&gt;
&lt;br /&gt;
===%DESCRIPTION%===&lt;br /&gt;
Beschreibung des aktuellen Event des Kalenders (nicht verfügbar bei holiday Geräten)&lt;br /&gt;
&lt;br /&gt;
===%EVENT%===&lt;br /&gt;
Name/Titel des aktuellen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
===%PREVEVENT%===&lt;br /&gt;
Name/Titel des vorherigen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDdevice Attributen==&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
name der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
=Benötigte Events=&lt;br /&gt;
Folgende Events werden von HOMEMODE ausgewertet bzw. werden benötigt damit HOMEMODE vollumfänglich funktionieren kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;DEVICE-TYPE&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;EVENT&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;RESIDENTS&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;ROOMMATE,GUEST&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wayhome&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSCONTACT}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsContactReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSMOTION}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsMotionReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSLUMINANCE}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;luminance&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsLuminanceReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSENERGY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;power&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;energy&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsPowerEnergyReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSBATTERY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;battery&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsBatteryReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomePresenceDeviceType&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeYahooWeatherDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wind&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeTwilightDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;light&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;twilight&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;aktEvent&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorTemperatureOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorHumidityOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeEventsHolidayDevices&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeUWZ&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;WarnCount&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=30696</id>
		<title>HOMEMODE</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=30696"/>
		<updated>2019-06-06T20:57:27Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* verfügbar in allen HomeCMD Attributen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Das Modul wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden und viele grundlegende Automationen durch Hinzufügen weiterer Geräte bereitzustellen.&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=HOMEMODE&lt;br /&gt;
|ModFTopic=64317&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=22_HOMEMODE.pm&lt;br /&gt;
|ModOwner=DeeSPe&lt;br /&gt;
}}&lt;br /&gt;
Diese Seite beschreibt die Konfiguration und Verwendung des Moduls &#039;&#039;22_HOMEMODE.pm&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Das Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier aufgeführte Anleitung entspricht dem Modul in Version 1.4.2.&lt;br /&gt;
&lt;br /&gt;
Viele allgemein typische Automationen sind bereits fertig integriert.&lt;br /&gt;
&lt;br /&gt;
Die jeweils per Event auszuführenden Befehle können in den entsprechenden &#039;&#039;HomeCMD...&#039;&#039; Atributen hinterlegt werden und so in der Detail Ansicht des HOMEMODE Geräts übersichtlich angezeigt und bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen vieler notify/DOIF ist durch den Einsatz von &#039;&#039;HOMEMODE&#039;&#039; unnötig.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wurde das Modul für die Verwendung mit HomeKit als GUI optimiert. Alle möglichen Mappings für Homebridge sind bereits enthalten und können über einen set Befehl aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:HOMEMODE_Device.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Um Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; benutzen zu können benötigt man als Mindestvoraussetzung ein bereits angelegtes RESIDENTS Gerät mit entsprechenden ROOMMATE/GUEST Geräten.&lt;br /&gt;
&lt;br /&gt;
==Mögliche Automationen==&lt;br /&gt;
Alle Automationen sind optional.&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Beispiele:&lt;br /&gt;
*Änderung des Zustands von ROOMMATE/GUEST Geräten anhand von PRESENCE Geräten&lt;br /&gt;
*Bereitstellung von CMD Attributen für mögliche Events rund um den Heim-/Hausstatus&lt;br /&gt;
*Bereitstellung von Platzhaltern innerhalb der CMD Attribute, z.B. %MODE%, %SEASON% oder %PREVMODE% für die Werte der Readings mode, season und prevMode&lt;br /&gt;
*Einbindung von Kontakt Sensoren, für z.B. Offen-Warnungen nach bestimmten Zeitraum oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Kontakt Sensor konfiguriert werden&lt;br /&gt;
*Einbindung von Bewegungs Sensoren, für z.B. automatische Licht Schaltungen oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Bewegungs Sensor konfiguriert werden&lt;br /&gt;
*Darstellungen und Auslösen von Sabotage Alarmen der eingebundenen Kontakt- und Bewegungssensoren&lt;br /&gt;
*Einbindung von jeweils einem Temperatur und Luftfeuchtigkeitssensor&lt;br /&gt;
*Einbindung eines lokalen Yahoo Wetter Devices zur Ermittlung und Ausgabe der lokalen Wetterdaten und Erzeugung der Wettervorhersage&lt;br /&gt;
*Einbindung von Power und Energy Sensoren zur Ermittlung der Gesamtmengen&lt;br /&gt;
*Einbindung von Calendar/holiday Devices für spezielle im HOMEMODE Device verfügbar zu machende Events&lt;br /&gt;
*von Uhrzeit abhängiger Anwesend-Modus&lt;br /&gt;
*Bewohner unabhängige Tageszeit-Modus&lt;br /&gt;
*Alarm-Modus&lt;br /&gt;
*DND-Modus&lt;br /&gt;
*Überwachung von Batteriewerten&lt;br /&gt;
&lt;br /&gt;
=HOMEMODE-Gerät=&lt;br /&gt;
==Definition==&lt;br /&gt;
Das HOMEMODE Gerät - hier mit dem Namen &#039;&#039;Home&#039;&#039; versehen - selbst wird über&lt;br /&gt;
 define Home HOMEMODE&lt;br /&gt;
bei Vorhandensein nur eines RESIDENTS Geräts definiert.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung mehrerer RESIDENTS Geräte muss das Master RESIDENTS Gerät beim Definieren mit angegeben werden&lt;br /&gt;
 define Home HOMEMODE rgr_Residents&lt;br /&gt;
Dieses Modul verwendet das globale Attribut &#039;&#039;language&#039;&#039; zur Bestimmung der Anzeigedaten (Standard: EN=english). Für deutsche Ausgabedaten kann das Attribut&lt;br /&gt;
 attr global language DE&lt;br /&gt;
gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Alternativ kann auch nur das HOMEMODE Gerät auf deutsch geändert werden&lt;br /&gt;
 attr Home HomeLanguage DE&lt;br /&gt;
&lt;br /&gt;
==Set-Befehle==&lt;br /&gt;
&#039;&#039;set &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 set Home anyoneElseAtHome &amp;lt;on/off&amp;gt;&lt;br /&gt;
einschalten wenn jemand anderes zu Hause ist der kein registrierter ROOMMATE/GUEST ist, z.B. Hund/Katze oder unregistrierte Gäste&amp;lt;br&amp;gt;&lt;br /&gt;
wenn eingeschaltet, dann wird der Alarm Mode beim Verlassen statt auf armaway nur auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
schaltet man ein und hat schon Haus/Wohnung verlassen, so wird der Alarm Mode von armaway auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AEAH%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd &amp;lt;on/off&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. um Benachrichtigungen zu deaktivieren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DND%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd-for-minutes &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus für die angegebenen Minuten ein&amp;lt;br&amp;gt;&lt;br /&gt;
kehrt danach zum vorherigen (tageszeitabhängigen) Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home deviceDisable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
deaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home deviceEnable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
reaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home location &amp;lt;arrival/home/bed/underway/wayhome&amp;gt;&lt;br /&gt;
manueller Ortswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%LOCATION%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home mode &amp;lt;morning/day/afternoon/evening/night/gotosleep/asleep/absent/gone/home&amp;gt;&lt;br /&gt;
manueller Moduswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm &amp;lt;armaway/armhome/armnight/disarm&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVAMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm-for-minutes &amp;lt;armaway/armhome/armnight/disarm&amp;gt; &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus für die angegebenen Minuten ein&lt;br /&gt;
kehrt danach zum vorherigen Alarm Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home updateHomebridgeMapping&lt;br /&gt;
aktualisiert das Attribut homebridgeMapping des HOMEMODDE Device abhängig von den verfügbaren Informationen&lt;br /&gt;
&lt;br /&gt;
 set Home updateInternalForce&lt;br /&gt;
führt eine Aktualisierung der Internals des HOMEMODE Device aus&amp;lt;br&amp;gt;&lt;br /&gt;
das sollte manuell benutzt werden nachdem das Modul aktualisiert und nur ein reload statt restart gemacht wurde&amp;lt;br&amp;gt;&lt;br /&gt;
auch wenn man überwachte/kontrollierte Geräte ändert sollte man diesen Befehl manuell ausführen, z.B. neue ROOMMATE/GUEST im RESIDENTS Device hinzufügt, oder Geräte in FHEM hinzufügt die dem selben Devspec wie bisher entsprechen (Steckdosen, Sensoren)&lt;br /&gt;
&lt;br /&gt;
==Get-Befehle==&lt;br /&gt;
&#039;&#039;get &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 get Home contactsOpen &amp;lt;all/doorsinside/doorsoutside/doorsmain/outside/windows&amp;gt;&lt;br /&gt;
Liste von all/doorsinside/doorsoutside/doorsmain/outside/windows offenen Kontakten&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%OPEN%&#039;&#039;&#039;, &#039;&#039;&#039;%OPENCT%&#039;&#039;&#039; und &#039;&#039;&#039;%OPENHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home devicesDisabled&lt;br /&gt;
Anzeige der für HOMEMODE deaktivierten Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home mode&lt;br /&gt;
Anzeige von mode&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home modeAlarm&lt;br /&gt;
Anzeige von modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%MODEALARM%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home publicIP&lt;br /&gt;
holen der öffentlichen IP Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%IP%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home sensorsTampered&lt;br /&gt;
Liste aller sabotierten Sensoren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%TAMPERED%&#039;&#039;&#039;, &#039;&#039;&#039;%TAMPEREDCT%&#039;&#039;&#039; und &#039;&#039;&#039;%TAMPEREDHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weather &amp;lt;long/short&amp;gt;&lt;br /&gt;
Wetterinfo im angegebenen Format anzeigen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%WEATHER%&#039;&#039;&#039; und &#039;&#039;&#039;%WEATHERLONG%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weatherForecast [TAG]&lt;br /&gt;
Wettervorhersage für angegebenen Tag&amp;lt;br&amp;gt;&lt;br /&gt;
wenn kein Tag angegeben wird, so wird die Vorhersage für morgen (2) ausgegeben&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%FORECAST%&#039;&#039;&#039; (morgen) und &#039;&#039;&#039;%FORECASTTODAY%&#039;&#039;&#039; (heute) sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
==webCmd==&lt;br /&gt;
Die Schaltmöglichkeiten sind absichtlich gering gehalten, denn im normalen Betrieb sollte nicht mehr benötigt werden als die hier gebotenen.&amp;lt;br&amp;gt;&lt;br /&gt;
Es lässt sich der Alarm Mode manuell umschalten und beim Klick auf das devStateIcon wird der DND Mode an- und ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
==Grundkonfiguration==&lt;br /&gt;
&lt;br /&gt;
Diese Grundkonfiguration sollte immer als erstes erfolgen um entsprechend darauf weiter aufzubauen. Als zweiter Schritt ist dann die erweiterte Konfiguration angedacht.&lt;br /&gt;
&lt;br /&gt;
Bei der Namensvergabe der Attribute vom HOMEMODE Device wurde nach einem möglichst kurzem Prefix gesucht und nach vielen Tests wurde sich für das Prefix &amp;quot;Home&amp;quot; entschieden. Das hat den Vorteil, dass alle Attribute beisammen stehen und diese auch (durch den Großbuchstaben am Anfang) ziemlich weit oben in der Liste der Attribute stehen. Ebenso wurde bei der Namensvergabe versucht, selbsterklärende Namen zu wählen. Das hat den Vorteil, dass man relativ einfach genau erkennen kann wofür das Attribut steht, allerdings auch den Nachteil, dass einige Attributnamen ganz schön lang werden.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedUserAttr====&lt;br /&gt;
Als Erstes wird empfohlen, gerade für Anfänger, das Attribut &amp;quot;HomeAdvancedUserAttr&amp;quot; auf 1 zu setzen. Dadurch werden viel mehr HomeCMD Attribute freigeschaltet. Diese werden im Attribut userattr des HOMEMODE Device hinzugefügt.&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAlarmModes====&lt;br /&gt;
Als Nächstes sollte man sich entscheiden, ob die Alarm Modus evtl. nicht automatisch zum jeweiligen Modus des HOMEMODE Device geschaltet werden sollen. Standardmäßig werden die Alarm Modus automatisch gesteuert. Ist das nicht erwünscht, so ist der Wert dieses Attributs auf 0 zu setzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;absent&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armaway&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;home&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;disarm&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;asleep&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armnight&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Alarm Modus &amp;quot;armhome&amp;quot; kann nur manuell gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeAutoArrival====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird bei Ankunft jedes ROOMMATE/GUEST die location des jeweiligen ROOMMATE/GUEST für die hier angegeben Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt. Beim ersten nach Hause kommenden ROOMMATE/GUEST wird zusätzlich die location des HOMEMODE Device für die hier eingestellte Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Ablauf der hier eingestellten Minuten wechselt das jeweilige Device von &amp;quot;arrival&amp;quot; auf &amp;quot;home&amp;quot;, sofern es noch die location &amp;quot;arrival&amp;quot; hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAsleep====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Schlafengehen (gotosleep) jedes ROOMMATE/GUEST ein Timer gestartet, der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;asleep&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAwoken====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Erwachen (&amp;quot;awoken&amp;quot; oder &amp;quot;home nach asleep&amp;quot;) jedes ROOMMATE/GUEST dieser auf &amp;quot;awoken&amp;quot; gesetzt und ein Timer gestartet, der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;home&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoDaytime====&lt;br /&gt;
Standardmäßig wird mode anhand der Tageszeit automatisch gesetzt. Ist das nicht gewünscht, kann das über den Wert 0 deaktiviert werden. Dann stehen allerdings tageszeitabhängigen mode(s) nicht mehr zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeResidentCmdDelay====&lt;br /&gt;
Normalerweise werden die Events der ROOMMATE/GUEST vor denen des HOMEMODE Device ausgeführt. Um das zu ändern wird die Ausführung der ROOMMATE/GUEST HomeCMD Attribute um die hier eingestellte Zeit in Sekunden verzögert.&amp;lt;br&amp;gt;&lt;br /&gt;
Je genauer der Name des jeweiligen HomeCMD Attributs beschrieben wird, desto später wird dieser ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Das heißt z.B. dass HomeCMDmode vor HomeCMDmode-absent und dieser wiederrum vor HomeCMDmode-absent-ROOMMATE/GUEST-NAME ausgeführt wird usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Um das normale Verhalten wiederherzustellen ist der Wert dieses Attributs auf 0 zu setzen. Dann wird HomeCMDmode-absent-ROOMMATE/GUEST-NAME vor HomeCMDmode-absent und vor HomeCMDmode ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis unendlich in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
==Konfiguration Presence Devices (automatische anwesend/abwesend Umschaltung von ROOMMATE/GUEST)==&lt;br /&gt;
Damit die automatische Zuordnung der Presence Devices zu ihren ROOMMATE/GUEST Devices zuverlässig funktioniert, ist es nötig dass der Hauptteil des Namens des ROOMMATE/GUEST innerhalb des Namens des zugehörigen PRESENCE Device(s) vorkommt.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Attribut HomePresenceDeviceType kann man den zu suchenden TYPE von Presence Device vorgeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Per Default werden nur Devices vom TYPE PRESENCE gesucht und versucht den ROOMMATE/GUEST zuzuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls man z.B. auch Devices vom TYPE dummy zur Anwesenheitssteuerung benutzt, kann man diese im Attribut HomePresenceDeviceType mit hinzunehmen. Es sind alles Device TYPEn möglich die ein &amp;quot;presence&amp;quot; Reading mit den Werten &amp;quot;present/appeared&amp;quot; und &amp;quot;absent/disappeared&amp;quot; bereitstellen. Mehrere TYPEn sind möglich da in diesem Attribut ein Regex erwartet wird. z.B.: dummy oder PRESENCE|dummy oder PRESENCE|dummy|ONKYO_AVR.&lt;br /&gt;
&lt;br /&gt;
===Beispiel===&lt;br /&gt;
Der Device Name meines ROOMMATE ist &amp;quot;rr_Dan&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf der Suche nach dem zugehörigen Presence Device wird der erste Teil (rr_ oder rg_) weggeschnitten und der Rest in Kleinbuchstaben umgewandelt.&amp;lt;br&amp;gt;&lt;br /&gt;
Mit dem was übrig bleibt, bei mir also nur dan, werden die möglichen Presence Devices versucht zu erkennen.&amp;lt;br&amp;gt;&lt;br /&gt;
Mein zugehöriges Presence Device heißt, historisch gewachsen, PRESENCE_rr_Dan und würde somit problemlos zugeordnet werden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen der zugehörigen Presence Devives könnten in ihrer kürzesten Form auch wie folgt sein um meinen ROOMMATE/GUEST Device zugeordnet zu werden:&amp;lt;br&amp;gt;&lt;br /&gt;
 pdan&lt;br /&gt;
 danp&lt;br /&gt;
 ZDan&lt;br /&gt;
 DANZ&lt;br /&gt;
 wenndannsonst&lt;br /&gt;
Aber Achtung, es funktioniert nicht mehr wenn die Namen nicht eindeutig sind. Wenn es z.B. eine rr_Dana geben würde mit Presence Device Name &amp;quot;pdani&amp;quot;, dann würde dieser Name auch bei mir (dan) passen. Das könnte man aber auch bewußt nutzen um mit einem Presence Device 2 ROOMMATE/GUEST Devices gleichzeitig zu steuern.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn die Namen wirklich absolut eindeutig sind, dann könnte man den Regex im Attribut HomePresenceDeviceType sogar auf &amp;quot;.*&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Werden pro ROOMMATE/GUEST mehrere Presence Devices gefunden und zugeordnet, so wird automatisch dass Attribut HomePresenceDeviceAbsentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt; auf die Anzahl der gefundenen Presence Devices gesetzt, so dass der/die jeweilige ROOMMATE/GUEST immer erst als abwesend gewertet wird sobald alle zugehörigen Presence Devices abwesend sind. Analog dazu gibt es noch das Attribut HomePresenceDevicePresentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresence====&lt;br /&gt;
Ist dieses Attribut auf 1 gesetzt, so werden die ROOMMATE/GUEST Devices automatisch zum Status ihrer zugehörigen PRESENCE Devices geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device present - ROOMMATE/GUEST home&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device absent - ROOMMATE/GUEST absent&amp;lt;br&amp;gt;&lt;br /&gt;
Falls es sich bei den von Euch benutzen PRESENCE Devices nicht um Devices vom TYPE PRESENCE handeln sollte, sondern z.B. um PRESENCE und dummy, so kann dieses im Attribut HomePresenceDeviceType als Regex konfiguriert werden! z.B.: PRESENCE|dummy&amp;lt;br&amp;gt;&lt;br /&gt;
Damit ein Device als Presence Device erkannt werden kann, muss dieses über ein presence Reading verfügen.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresenceSuppressState====&lt;br /&gt;
unterdrücke Anwesenheitsänderung in angegebenen State(s) der RESIDENTS&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. für &amp;quot;mysteriös&amp;quot; verschwindende Anwesenheitsgeräte in der Nacht&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: asleep|awoken|gotosleep&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceType====&lt;br /&gt;
Regex des TYPEs/der TYPEn von Presence Devices&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Regex der Device TYPEn&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: PRESENCE&lt;br /&gt;
&lt;br /&gt;
==Erweiterte Konfiguration==&lt;br /&gt;
Um das HOMEMODE Device vollumfänglich zu benutzen ist es sinnvoll weitere Devices (zur Überwachung) hinzuzufügen.&lt;br /&gt;
&lt;br /&gt;
Die bereits möglichen hinzuzufügenden Devices werden hier folgend nach Attributnamen erklärt.&lt;br /&gt;
&lt;br /&gt;
===Attribute zum Hinzufügen weiterer Geräte===&lt;br /&gt;
&lt;br /&gt;
====HomeEventsCalendarDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeEventsHolidayDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorAirpressure====&lt;br /&gt;
Luftdrucksensor aussen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorHumidityOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussensensors für Luftfeuchtigkeit anzugeben. Dieser muss ein Reading humidity besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für (Aussen)Luftfeuchtigkeit und Aussentemperatur ein und der selbe ist, so muss dieser nur einmalig im Attribut HomeSensorTemperatureOutside hinterlegt werden. Dieser muss dann die beiden Readings humidity und temperature haben. Im Bedarfsfall können diese Readings auch vorher entsprechend durch eigene userReadings erstellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%HUMIDITY%&#039;&#039;&#039; für den Wert des Readings humidity zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorTemperatureOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussentemperatursensors anzugeben. Dieser muss mindestens ein Reading temperature besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für Aussentemperatur auch ein Reading humidity besitzen sollte und dieses auch der Sensor für die Aussenlufteuchtigkeit ist, so muss dieser nur einmalig hier in diesem Attribut hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%TEMPERATURE%&#039;&#039;&#039; für den Wert des Readings temperature zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading temperature und optional humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContact====&lt;br /&gt;
Hier können alle Kontakt Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDcontact Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das optische und magnetische Kontaktsensoren vom HomeMatic. HM-SEC-SCO und HM-SEC-SC-2.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;model=HM-SEC-SC(O|-2)&#039;&#039;&#039; eingetragen um alle diese Kontaktsensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Kontaktsensoren mit ihren Namen im Internal SENSORSCONTACT des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Kontaktsensor folgende Attribute im Attribut userattr hinzugefügt:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====HomeContactType=====&lt;br /&gt;
Typ des Kontakts - wird versucht anhand des Namen/Alias beim Hinzufügen zum HOMEMODE Device zu ermitteln, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: doorinside,dooroutside,doormain,window&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: window&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Kontaktsensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModes=====&lt;br /&gt;
Regex der Mode(s) des HOMEMODE Device in denen keine Offen Warnungen erfolgen sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist ein Kontakt geöffnet während die hier eingestellten Mode(s) eintreten, so wird der noch bestehende Timer abgebrochen. Entgegengesetzt startet er wieder sobal die hier eingestellten Mode(s) verlassen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist hier z.B. &amp;quot;gotosleep|asleep&amp;quot; eingestellt, so kann man z.B. das Fenster schon vor dem Auslösen von gotosleep oder asleep öffnen und der bestehende Offenwarnung-Timer wird dann abgebrochen. Sobald man am Morgen z.B. awoken oder home auslöst, so wird ein neuer Timer gestartet der einen dann an das noch offene Fenster erinnert.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle Modes des HOMEMODE Device&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModesResidents=====&lt;br /&gt;
Devspec der ROOMMATE/GUEST Devices deren Status statt der Modes des HOMEMODE Device für Attribut HomeOpenDontTriggerModes benutzt werden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle überwachten ROOMMATE/GUEST&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenMaxTrigger=====&lt;br /&gt;
Maximale Anzahl an Warnmeldungen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ganze Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimes=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimesDividers=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactOpenTimeDividers des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2 1 2 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsContactReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactReadings====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeDividers====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeOpenTimesDividers in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 2 1 2 2.5 (für 4 Jahreszeiten)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeMin====&lt;br /&gt;
Minimale Zeit in Minuten die mindestens für eine Offenwarnung gewartet werden soll - im Falle dass sich durch den Teiler evtl. zu kleine Werte ergeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: eine Zahle mit max. einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimes====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 7.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminance====&lt;br /&gt;
Devspec von (Innen-)Lichtsensoren deren Durchschnittswert berechnet werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotion====&lt;br /&gt;
Hier können alle Bewegungs Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDmotion Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Motion Sensor Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0801-1001|010f-0800-1001&#039;&#039;&#039; eingetragen um alle diese Bewegungssensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Damit bei den Gen5 Sensoren auch das open im reading state steht, habe ich mir bei diesen Sensoren ein userReading angelegt.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Bewegungssensoren mit ihren Namen im Internal SENSORSMOTION des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Bewegungssensor folgende Attribute im Attribut userattr hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Bewegungssensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsMotionReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeSensorLocation=====&lt;br /&gt;
Standort des Bewegungssensors (außen oder innen) - wird standardmäßig beim Hinzufügen zum HOMEMODE Device auf &amp;quot;inside&amp;quot; gesetzt, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: inside,outside&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: inside&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsMotionValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionReadings====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergy====&lt;br /&gt;
Hier können alle Energie Sensoren als Devspec hinterlegt werden. Diese müssen die beiden Readings power und energy besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Anhand dieser Readings wird dann der Gesamtverbrauch und die derzeitige gesamte Leistungsaufnahme berechnet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Wall Plugs Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0600-1000|010f-0602-1001&#039;&#039;&#039; eingetragen um alle diese Energie Sensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec mit vorhandenen energy und power Readings&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmoke====&lt;br /&gt;
Devspec mit Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorWindspeed====&lt;br /&gt;
Sensor für Windgeschwindigkeit&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors und Reading der Windgeschwindigkeit separiert mit : (z.B. ga_Windsensor:wind)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBattery====&lt;br /&gt;
Devspec von Batteriesensoren mit einem Reading &amp;quot;battery&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerAnyoneElseAtHome====&lt;br /&gt;
auslösendes Gerät für anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn:valueOff&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerPanic====&lt;br /&gt;
auslösendes Gerät für Panikalarm&amp;lt;br&amp;gt;&lt;br /&gt;
valueOff ist optional, wird es weggelassen, so fungiert valueOn als toggle&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn[:valueOff]&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTwilightDevice====&lt;br /&gt;
Hier ist der Name des lokalen Twilight Device anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich die Platzhalter &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039;, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; in den HomeCMD Attributen zur Verfügung. &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039; wird dann durch das Reading light, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; durch das Reading twilight und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; durch das aktuelle Twilight Event ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeUWZ====&lt;br /&gt;
Hier ist der Name des lokalen UWZ Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%UWZ%&#039;&#039;&#039;, &#039;&#039;&#039;%UWZSHORT%&#039;&#039;&#039; und &#039;&#039;&#039;%UWZLONG%&#039;&#039;&#039; sind verfügbar in allen HomeCMD Attributen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des UWZ Geräts&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeYahooWeatherDevice====&lt;br /&gt;
Hier ist der Name des lokalen Yahoo Weather Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich einige Platzhalter zur Verfügung. Für die genaue Beschreibung derer siehe &amp;quot;Platzhalter&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
===HomeText Attribute===&lt;br /&gt;
Die HomeText Attribute sind größtenteils zur Übersetzung einiger benötigter Begriffe gedacht.&amp;lt;br&amp;gt;&lt;br /&gt;
In den speziellen Attributen die mit HomeTextWeather anfangen, sind ganze Texte mit entsprechenden Platzhaltern einzufügen.&lt;br /&gt;
&lt;br /&gt;
====HomeTextAndAreIs====&lt;br /&gt;
Übersetzung für &amp;quot;and&amp;quot;, &amp;quot;are&amp;quot; und &amp;quot;is&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort/Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: and|are|is&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 und|sind|ist&lt;br /&gt;
&lt;br /&gt;
====HomeTextClosedOpen====&lt;br /&gt;
Übersetzung für &amp;quot;closed&amp;quot; und &amp;quot;open&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: closed|open&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 geschlossen|geöffnet&lt;br /&gt;
&lt;br /&gt;
====HomeTextNosmokeSmoke====&lt;br /&gt;
Übersetzung für &amp;quot;no smoke&amp;quot; und &amp;quot;smoke&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: no smoke|smoke&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 kein Rauch|Rauch&lt;br /&gt;
&lt;br /&gt;
====HomeTextRisingConstantFalling====&lt;br /&gt;
Übersetzung für &amp;quot;rising&amp;quot;, &amp;quot;constant&amp;quot; und &amp;quot;falling&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: rising|constant|falling&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 steigend|gleichbleibend|fallend&lt;br /&gt;
&lt;br /&gt;
====HomeTextTodayTomorrowAfterTomorrow====&lt;br /&gt;
Übersetzung für &amp;quot;today&amp;quot;, &amp;quot;tomorrow&amp;quot; und &amp;quot;day after tomorrow&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: today|tomorrow|day after tomorrow&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Heute|Morgen|Übermorgen&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherNoForecast====&lt;br /&gt;
Übersetzung für &amp;quot;No forecast available&amp;quot; - Text wenn keine Wettervorhersage verfügbar ist&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: No forecast available&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es ist leider keine Wettervorhersage für den angegebenen Tag verfügbar!&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastInSpecDays====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage in 4-10 Tagen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 In %DAY% Tagen %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastToday====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für heute&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C. Aktuelle Temperatur %TEMPERATURE%°C bei einer Luftfeuchtigkeit von %HUMIDITY%%. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastTomorrow====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für morgen/übermorgen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherLong====&lt;br /&gt;
Langer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es %TOBE% %CONDITION% bei %TEMPERATURE%°C und %HUMIDITY%% Luftfeuchtigkeit. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h. Der Luftdruck ist %PRESSURETREND% bei %PRESSURE%hPa.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherShort====&lt;br /&gt;
Kurzer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %CONDITION%, %TEMPERATURE%°C, %HUMIDITY%% Luftfeuchtigkeit, Luftdruck %PRESSURE%hPa&lt;br /&gt;
&lt;br /&gt;
===weitere Attribute===&lt;br /&gt;
Viele weitere Dinge lassen sich anpassen.&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedDetails====&lt;br /&gt;
mehr Details anzeigen, abhängig von den zu HOMEMODE hinzugefügten Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: none, detail, both, room&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Auswahlliste&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: none&lt;br /&gt;
&lt;br /&gt;
====HomeDaytimes====&lt;br /&gt;
Eigene Tageszeiten als Paare aus Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Zeit|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 00:00|Mitternacht&lt;br /&gt;
 00:05|Nacht&lt;br /&gt;
 06:30|Morgen&lt;br /&gt;
 10:00|Vormittag&lt;br /&gt;
 13:00|Mittag&lt;br /&gt;
 14:30|Nachmittag&lt;br /&gt;
 17:30|Vorabend&lt;br /&gt;
 19:00|Abend&lt;br /&gt;
 23:00|Spätabend&lt;br /&gt;
&lt;br /&gt;
====HomeIcewarningOnOffTemps====&lt;br /&gt;
2 leerzeichenseparierte Temperaturen für das Ein- und Ausschalten der Eiswarnung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei leerzeichenseparierte Temperaturen mit maximal einer Kommastelle&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 2 3&lt;br /&gt;
&lt;br /&gt;
====HomeModeAlarmArmDelay====&lt;br /&gt;
Zeit in Sekunden um das aktivieren der Alarmschaltung zu verzögern.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl (gleiche Verzögerung für alle modeAlarm) oder 3 leerzeichenseparierte Zahlen für jeden modeAlarm (Reihenfolge: armaway armnight armhome)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAtTmpRoom====&lt;br /&gt;
Diesen Raum zu temporäre at(s) hinzufügen die von HOMEMODE generiert werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceAbsentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;absent&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: maximale Anzahl von verfügbaren Presence Geräten für jeden ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDevicePresentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;present&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomePublicIpCheckInterval====&lt;br /&gt;
Interval in Minuten für die Überprüfung der öffentlichen IP-Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0 (deaktiviert)&lt;br /&gt;
&lt;br /&gt;
====HomeSeasons====&lt;br /&gt;
Eigene Jahreszeiten als Paare aus Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Datum|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 03.01|spring 06.01|summer 09.01|autumn 12.01|winter&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 03.01|Frühling&lt;br /&gt;
 06.01|Sommer&lt;br /&gt;
 09.01|Herbst&lt;br /&gt;
 12.01|Winter&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryLowPercentage====&lt;br /&gt;
Prozentsatz um einen Batteriesensor mit geringer Batterie anzuzeigen (nur bei Sensoren die ihren Batteriewert prozentual angeben)&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 50&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryReading====&lt;br /&gt;
Reading der Batteriesensoren welches statt &amp;quot;battery&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: battery&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminanceReading====&lt;br /&gt;
Reading der Lichtsensoren welches statt &amp;quot;luminance&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: luminance&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergyReadings====&lt;br /&gt;
Readings der Power/Energy Sensoren welche statt &amp;quot;power&amp;quot; und &amp;quot;energy&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: 2 leerzeichenseparierte Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: power energy&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeReading====&lt;br /&gt;
Readings der Rauchmelder welche statt &amp;quot;state&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ein Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeValue====&lt;br /&gt;
Regex der Auslösewerte von Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: RegEx&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: on&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialLocation====&lt;br /&gt;
Hier können eigene zusätzliche location(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; location &amp;lt;LOCATION&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialModes====&lt;br /&gt;
Hier können eigene zusätzliche mode(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; mode &amp;lt;MODE&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTrendCalcAge====&lt;br /&gt;
Zeit in Sekunden für das Maximalalter des vorherigen Wertes für die Trendberechnung&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 900&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Teil der Konfiguration ist das Befüllen der HomeCMD Attribute. Da dieses durch die Vermischung von FHEM Code, Perl Code und zusätzlichen Platzhaltern erst einmal sehr befremdlich sein kann, habe ich bei der Beschreibung der HomeCMD Attribute teilweise Beispiele hinzugefügt um den Einstieg weiter zu erleichtern.&lt;br /&gt;
&lt;br /&gt;
==HomeCMD Attribute (mit Beispielen)==&lt;br /&gt;
Die HomeCMD Attribute sind zum Festlegen der jeweiligen Schaltaktionen gedacht und können damit evtl. vorhandene notify/DOIF ablösen. Sie können mit FHEM-Code, Perl-Code oder aber auch mit beidem vermischt befüllt werden (wovon ich allerdings abrate). Zusätzlich sind noch diverse Platzhalter (siehe Platzhalter) verfügbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Perl-Code innerhalb der HomeCMD Attribute gibt es hier Besonderheiten.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
*Im Gegensatz zur FHEM-Eingabezeile müssen hier keine Semikolon verdoppelt werden&lt;br /&gt;
*Kommetarzeilen sind zulässig&lt;br /&gt;
*Kommentare am Ende einer Perl-Zeile sind nicht zulässig&lt;br /&gt;
&lt;br /&gt;
Typischer Weise werden in den HomeCMD Attributen weitere Module angesprochen.&amp;lt;br&amp;gt;&lt;br /&gt;
Z.B. benutze ich für jegliche Form der Benachrichtigung den msg Befehl.&lt;br /&gt;
&lt;br /&gt;
Keines der HomeCMD Attribute hat einen Standardwert. Es müssen alle Befehle selbst programmiert werden.&lt;br /&gt;
&lt;br /&gt;
Platzhalter die Text(e) (string) beinhalten, müssen im Perl-Code in Anführungszeichen gesetzt werden (Beispiel %SENSOR%).&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter die Zahlen beinhalten (int,float) sollten nicht in Anführungszeichen gesetzt werden damit Zahlenvergleiche (mittels ==, &amp;lt;=, &amp;gt;=, &amp;gt;, &amp;lt;) funktionieren (Beispiel %LIGHT%, %ICE% oder %TEMPERATURE%).&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-off====&lt;br /&gt;
Befehle die beim Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Rauchalarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-on====&lt;br /&gt;
Befehle die bei einem Rauchalarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;meldet&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;melden&amp;quot; if (%SMOKECT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %SMOKEHR% $is Rauchalarm!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Sabotage Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-off====&lt;br /&gt;
Befehle die beim Ende eines Sabotage Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Manipulationen wurden beseitigt!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-on====&lt;br /&gt;
Befehle die bei einem Sabotage Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%TAMPEREDCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %TAMPEREDHR% $is sabotiert!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-off====&lt;br /&gt;
Befehle die beim Ende eines Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg ENTWARNUNG: Alle Alarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-on====&lt;br /&gt;
Befehle die bei einem Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%ALARMCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg audio,push,light 3 !!! ALARM !!! %ALARMHR% $is ausgelöst!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome====&lt;br /&gt;
Befehle die beim on/off von anyoneElseAtHome ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-off====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armaway&amp;quot; auf &amp;quot;armhome&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome on&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun niemand anderes mehr zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-on====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armhome&amp;quot; auf &amp;quot;armaway&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder wieder Alarme melden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird anyoneElseAtHome bei Anwesenheit und nicht deaktiviertem HomeAutoAlarmModes aktiviert, so passiert erst einmal nichts, ausser dass die hier angegebenen Befehle ausgeführt werden. Wird dann später die Abwesenheit erkannt, schaltet der Alarm Mode auf &amp;quot;armhome&amp;quot; statt auf &amp;quot;armaway&amp;quot; damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome off&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun noch jemand anderes zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDbatteryLow====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Sensor einen niedrigen Batteriewert meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg;&lt;br /&gt;
   $msg = &amp;quot;Die Batterien von %BATTERYLOW% gehen zur Neige und sollten ausgetauscht werden!&amp;quot; if (%BATTERYLOWCT% == 1);&lt;br /&gt;
   $msg = &amp;quot;Die Batterien bei folgenden Geräten sollten ausgetauscht werden: %BATTERYLOWALL%&amp;quot; if (%BATTERYLOWCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push $msg&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontact====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor geschlossen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geschlossen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor offen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun offen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormain====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor Type doormain open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain wird geschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 { &lt;br /&gt;
   # Wenn es Ankommende gibt&lt;br /&gt;
   if (&amp;quot;%ARRIVERS%&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Zusammenstellen der Begrüßung&lt;br /&gt;
     my $msg = &amp;quot;Gute&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # &amp;quot;n&amp;quot; anhängen wenn Tageszeit nicht Nacht ist&lt;br /&gt;
     $msg .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Leerzeichen einfügen&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # den Feiertag der Tageszeit voranstellen wenn ein Feiertag im Kalender FEIERTAG ist&lt;br /&gt;
     $msg .= &amp;quot;%FEIERTAG%-&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Tageszeit einfügen&lt;br /&gt;
     $msg .= &amp;quot;%DAYTIME% &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # bei ROOMMATE &amp;quot;zu Hause&amp;quot; in Begrüßung einfügen&lt;br /&gt;
     $msg .= &amp;quot;zu Hause &amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; =~ /^rr_/);&lt;br /&gt;
 &lt;br /&gt;
     # Ankommende einfügen&lt;br /&gt;
     $msg .= &amp;quot;%ARRIVERS%&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Begrüßung am Sonos im Flur ausgeben bei Abwesenheit über 60 min&lt;br /&gt;
     fhem &amp;quot;msg audio \@fl_Sonos $msg!&amp;quot; if (%DURABSENCELAST% &amp;gt; 60);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain geöffnet&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geöffnet!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning1====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die erste Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: erste Offenwarnzeit des Kontakts erreicht&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning2====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die zweite Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: ab Erreichen der zweiten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht immer noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarningLast====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die letzte Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Erreichen der letzten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das ist der letzte Hinweis %ALIAS% endlich zu schliessen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald sich die Tageszeit (daytime) auf einen beliebigen Wert ändert.&amp;lt;br&amp;gt;&lt;br /&gt;
Um die jeweilige eingetretene Tageszeit zu ermitteln ist der Platzhalter &#039;&#039;&#039;%DAYTIME%&#039;&#039;&#039; vorgesehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime)&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime-&amp;amp;lt;DAYTIME&amp;amp;gt;====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald die jeweilige Tageszeit (daytime) erreicht ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime) auf bestimmten Wert&amp;lt;br&amp;gt;&lt;br /&gt;
Bei &amp;quot;night&amp;quot; könnte man z.B. die Heizung bewohnerunabhängig ausschalten, bei &amp;quot;morning&amp;quot; wieder ein.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceDisable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceDisable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun deaktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional wirklich attr disable für Device setzen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;attr %DEVICE%:FILTER=disable!=1 disable 1; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf gone/none setzen wenn Presence Devices deaktiviert werden&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     my $resident = $1;&lt;br /&gt;
     my $gone = $resident =~ /^rr_/ ? &amp;quot;gone&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set $resident:FILTER=state!=$gone state $gone&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceEnable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceEnable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun aktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional attr disable für Device entfernen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;deleteattr %DEVICE%:FILTER=disable=1 disable; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf home setzen wenn Presence Devices aktiviert werden und anwesend sind&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $1:FILTER=state!=home state home&amp;quot; if (ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;present&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd====&lt;br /&gt;
Befehle die beim Anfang/Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%DND%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun eingeschaltet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun beendet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-off====&lt;br /&gt;
Befehle die beim Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-on====&lt;br /&gt;
Befehle die beim Beginn des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun eingeschaltet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent====&lt;br /&gt;
Befehle die beim Beginn eines beliebigen (holiday)Kalender Events ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten on&amp;quot; if (&amp;quot;%EVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-each====&lt;br /&gt;
Befehle die beim Beginn/Ende eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-URLAUBDAN-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Dan hat jetzt Urlaub!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Der Urlaub von Dan ist nun zu Ende!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-WOHNUNG-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Heizung an/aus schalten&lt;br /&gt;
   my $heiz = &amp;quot;([bksw]z|ku)_Thermostat&amp;quot;;&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /^heizung(..+)?$/i)&lt;br /&gt;
   {&lt;br /&gt;
     my $zeit = $1;&lt;br /&gt;
     if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
 &lt;br /&gt;
       # morgens nicht alle Thermostaten schalten&lt;br /&gt;
       $heiz = &amp;quot;([bks]z|ku)_Thermostat&amp;quot; if ($zeit &amp;amp;&amp;amp; $zeit =~ /morgens?$/i);&lt;br /&gt;
       fhem &amp;quot;set $heiz:FILTER=controlMode!=day controlMode day&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^heizung/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $heiz:FILTER=controlMode!=night controlMode night&amp;quot; if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # WLAN an/aus schalten&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi off&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi on&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Putzfrau (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Gast (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-begin====&lt;br /&gt;
Befehle die beim Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-Neujahr-begin&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set %SENSORSENERGY% meterReset&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-end====&lt;br /&gt;
Befehle die bei Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemDEFINED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn ein neues Gerät angelegt wird (define)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Jedem neu definierten Gerät den Geräte-TYPE auch als Raum im Menüpunkt Module zuweisen&lt;br /&gt;
   fhem &amp;quot;attr %DEFINED% room Module-&amp;gt;&amp;quot;.InternalVal(&amp;quot;%DEFINED%&amp;quot;,&amp;quot;TYPE&amp;quot;,&amp;quot;default&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemINITIALIZED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn FHEM gestartet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg FHEM Home wurde gestartet...&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemSAVE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn in FHEM die Konfigurationsdatei gespeichert wird&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel (Backup von fhem.cfg und fhem.state):&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Datum/Uhrzeit&lt;br /&gt;
   my $now = Timeow();&lt;br /&gt;
   # Leerzeichen durch Unterstriche ersetzen&lt;br /&gt;
   $now =~ s/ /_/g;&lt;br /&gt;
   # Backup der Datei fhem.cfg&lt;br /&gt;
   `cp $attr{global}{configfile} ./backup/fhem.cfg.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.cfg.$now&amp;quot;;&lt;br /&gt;
   # Backup der Datei fhem.state&lt;br /&gt;
   `cp $attr{global}{statefile} ./backup/fhem.state.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.state.$now&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemUPDATE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn das Update von FHEM ausgeführt wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das Update für FHEM ist beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning====&lt;br /&gt;
Befehle die bei Anfang/Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0/1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%ICE%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg push ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!.&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-off====&lt;br /&gt;
Befehle die bei Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-on====&lt;br /&gt;
Befehle die bei Beginn der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation====&lt;br /&gt;
Befehle die beim Ändern der location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation-&amp;amp;lt;LOCATION&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf eine bestimmte location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmte location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode====&lt;br /&gt;
Befehle die beim Ändern von mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-absent-belated====&lt;br /&gt;
Befehle die nachträglich zur Abwesenheit ausgeführt werden sollen, die Zeit kann im Atteribut &amp;quot;HomeModeAbsentBelatedTime&amp;quot; eingestellt werden&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Abwesenheit + XX min&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten mode&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-absent&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set HarmonyHub:FILTER=activity!=PowerOff activity PowerOff;&lt;br /&gt;
 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 set TYPE=SONOSPLAYER:FILTER=Volume&amp;gt;0 Volume 0;&lt;br /&gt;
 set Sonos stopAll;&lt;br /&gt;
 sleep 3;&lt;br /&gt;
 set Wohnung [FILTER=state!=off] off&amp;quot;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 define atTmp_wz_Media_aus_%SELF% at +01:00:00 set HarmonyHub:FILTER=currentActivity!=PowerOff activity PowerOff;&lt;br /&gt;
 define atTmp_wz_Venti_aus_%SELF% at +01:00:00 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 define atTmp_wzLS_aus_%SELF% at +00:30:00 set wz_LS scene aus;&lt;br /&gt;
 define atTmp_all_Sonos_vol_down_%SELF% at +00:02:00 set TYPE=SONOSPLAYER:FILTER=Volume!=0 Volume 0 1;&lt;br /&gt;
 define atTmp_all_Sonos_off_%SELF% at +00:02:30 set Sonos stopAll;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=off off;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=on on&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-gone&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlManu off&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen beliebigen Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von beliebigem Resident ausgelöst&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 msg audio @%AUDIO% Guten Nacht und schlaf&#039; gut %ALIAS%!&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg = &amp;quot;Guten&amp;quot;;&lt;br /&gt;
   $msg .= &amp;quot; %FEIERTAG%&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
   $msg .= &amp;quot; Morgen %ALIAS%&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;msg audio \@%AUDIO% $msg&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;defmod atTmp_wetter_%RESIDENT%_%SELF% at +00:07:00 msg audio Wettervorhersage für heute: %FORECASTTODAY%&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen bestimmten Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von bestimmten Resident ausgelöst&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm====&lt;br /&gt;
Befehle die beim Ändern von modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung modeAlarm&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm-&amp;amp;lt;armaway/armhome/armnight/disarm&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armaway&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%PREVAMODE%&amp;quot; eq &amp;quot;disarm&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Alarmanlage einschalten&lt;br /&gt;
     fhem &amp;quot;set AA_Arm:FILTER=level!=100 alarmLevel armAll&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht zusammensetzen&lt;br /&gt;
     my $msg;&lt;br /&gt;
     $msg .= &amp;quot;Die Alarmanlage ist nun scharf geschaltet!&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
     my $is = &amp;quot;%ALARMHR%&amp;quot; =~ /und/ ? &amp;quot;sind&amp;quot; : &amp;quot;ist&amp;quot;;&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot; if ($msg);&lt;br /&gt;
     $msg .= &amp;quot;ACHTUNG: %ALARMHR% $is noch offen!!!&amp;quot; if (%ALARMCT%);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an ROOMMATE/GUEST senden&lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 &lt;br /&gt;
     # Eingangstür abschließen falls noch nicht geschehen&lt;br /&gt;
     fhem &amp;quot;set fl_Tuerschloss:FILTER=state!=locked lock&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armhome&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armnight&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-disarm&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Alarmanlage ausschalten&lt;br /&gt;
   fhem &amp;quot;set AA_Arm:FILTER=level!=0 alarmLevel disarmed&amp;quot;;&lt;br /&gt;
   my $prio = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # Nachrichtenpriorität auf 1 setzen bei Ankunft (höhere Lautstärke beim Abspielen damit man das auch vor der Tür hört)&lt;br /&gt;
   $prio = &amp;quot; 1&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; eq &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht an ROOMMATE/GUEST senden wenn der vorherige alarmMode nicht &amp;quot;armnight&amp;quot; ist&lt;br /&gt;
   fhem &amp;quot;msg audio \@fl_Sonos$prio Die Alarmanlage ist nun ausgeschaltet %ALIAS%!&amp;quot; if (&amp;quot;%PREVAMODE%&amp;quot; ne &amp;quot;armnight&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion====&lt;br /&gt;
Befehle die bei Statusänderung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: öffnen/schließen eines beliebigen Bewegungsmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Raum aus Sensornamen ermitteln, z.B. bz_Sensor&lt;br /&gt;
   my $room = (split /_/,&amp;quot;%SENSOR%&amp;quot;)[0];&lt;br /&gt;
 &lt;br /&gt;
   # Status des structure aller Lichter dieses Raums&lt;br /&gt;
   my $lichter = Value($room.&amp;quot;_Lichter&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Status des dummy Tageslicht&lt;br /&gt;
   my $tl = Value(&amp;quot;Tageslicht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   if (&amp;quot;%STATE%&amp;quot; eq &amp;quot;geöffnet&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Lichtwert des Sensors&lt;br /&gt;
     my $lum = ReadingsNum(&amp;quot;%SENSOR%&amp;quot;,&amp;quot;luminance&amp;quot;,100);&lt;br /&gt;
 &lt;br /&gt;
     # Löschen des evtl. schon vorhandenen &amp;quot;at&amp;quot;&lt;br /&gt;
     fhem &amp;quot;delete atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot; if (IsDevice(&amp;quot;atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
     # Licht nur wenn kein Tageslicht oder Lichtwert des Sensors kleiner als 10 und AutoLight eingeschaltet und modeAlarm nicht armaway&lt;br /&gt;
     if (($tl eq &amp;quot;off&amp;quot; || $lum &amp;lt; 10) &amp;amp;&amp;amp; $lichter eq &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot; &amp;amp;&amp;amp; &amp;quot;%AMODE%&amp;quot; ne &amp;quot;armaway&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $scene;&lt;br /&gt;
 &lt;br /&gt;
       # verschiedene Szenen für verschiedene Modus bzw. Aussenlichtstärken&lt;br /&gt;
       if (&amp;quot;%MODE%&amp;quot; eq &amp;quot;gotosleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Abend&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (&amp;quot;%MODE%&amp;quot; eq &amp;quot;asleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Nacht&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;gt; 3)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;viel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;lt; 4)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;mittel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       # Schalten der entsprechenden Szene (Modul LightScene)&lt;br /&gt;
       fhem &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene $scene&amp;quot; if ($scene);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     # unterschiedliche Ausschaltzeiten für unterschiedliche Räume&lt;br /&gt;
     my $t = 3;&lt;br /&gt;
     $t = 15 if ($room eq &amp;quot;wz&amp;quot;);&lt;br /&gt;
     $t = 2 if ($room eq &amp;quot;bz&amp;quot; || ($room =~ /wz|ku/ &amp;amp;&amp;amp; &amp;quot;%MODE%&amp;quot; =~ /sleep/));&lt;br /&gt;
     $t = 1 if ($room eq &amp;quot;fl&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Zahl in Minuten umrechnen in einen Zeitpunkt für das &amp;quot;at&amp;quot;&lt;br /&gt;
     my $d = HOMEMODE_hourMaker($t);&lt;br /&gt;
 &lt;br /&gt;
     # Anlegen des &amp;quot;at&amp;quot; zum Ausschalten des Lichts wenn die Lichter angeschaltet sind und auch AutoLight eingeschaltet ist&lt;br /&gt;
     if ($lichter ne &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $cmd = &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene aus&amp;quot;;&lt;br /&gt;
       fhem &amp;quot;defmod atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF% at +$d $cmd&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-off====&lt;br /&gt;
Befehle die bei Ende der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-on====&lt;br /&gt;
Befehle die bei Beginn der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set w_Steckdosen [FILTER=state!=on] on;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode auto&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-device====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein beliebiges Presence Device, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebiges Presence Device&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present-device&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # mindestens 1x täglich den Batteriewert des PRESENCE Geräts bei erkannter Anwesenheit holen&lt;br /&gt;
   fhem &#039;&amp;quot;sudo /opt/fhem/scripts/GTag-bat.sh %DEVICE% %ADDRESS% &amp;amp;&amp;quot;&#039;&lt;br /&gt;
     if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE_/ &amp;amp;&amp;amp; (!defined ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,undef) || ReadingsAge(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,0) &amp;gt; 64800));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen beliebigen Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebigen Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-absent-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Mich benachrichtigen wenn ich nicht zu hause bin und jemand anderes die Wohnung verlässt&lt;br /&gt;
   fhem &amp;quot;msg push \@rr_Dan %ALIAS% hat gerade die Wohnung verlassen!&amp;quot;&lt;br /&gt;
     if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot; &amp;amp;&amp;amp; ReadingsVal(&amp;quot;rr_Dan&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) ne &amp;quot;present&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Verabschiedungsnachricht zusammensetzen&lt;br /&gt;
   my $msg;&lt;br /&gt;
 &lt;br /&gt;
   # Alle außer mich selbst verabschieden&lt;br /&gt;
   $msg .= &amp;quot;Bis bald und auf Wiedersehen %ALIAS%...&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Glättewarnung wenn nötig&lt;br /&gt;
   $msg .= &amp;quot; ACHTUNG!!! Es ist %TEMPERATURE%°C kalt! Somit könnte es glatt werden!&amp;quot; if (%ICE%);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht senden wenn vorhanden&lt;br /&gt;
   fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispielcode für &amp;quot;HomeCMDpresence-present-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # alle Ankommenden außer mir selbst&lt;br /&gt;
   if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Benachrichtigung wenn jemand kommt&lt;br /&gt;
     fhem &amp;quot;msg audio %ALIAS% kommt gerade!&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; ne &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) zusammensetzen&lt;br /&gt;
     my $g = &amp;quot;gute&amp;quot;;&lt;br /&gt;
     $g .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) senden &lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% Willkommen und $g %DAYTIME% %ALIAS%!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmten Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;-&amp;amp;lt;DEVICE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein bestimmtes Presence Device eines bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Dieses Attribut ist nur verfügbar wenn ein Resident mehr als ein Presence Device hat&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmtes Presence Device eines bestimmten Resident&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Jahreszeit&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $t = &amp;quot;%SEASON%&amp;quot;;&lt;br /&gt;
   $t .= &amp;quot;s&amp;quot; if ($t eq &amp;quot;Frühling&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;msg push Die Wohnung ist nun im $t-Modus!&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set Heizungen [FILTER=controlMode!=auto] controlMode auto&amp;quot; if ($t ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason-&amp;amp;lt;SEASON&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit in eine bestimmte Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung bestimmte Jahreszeit&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight====&lt;br /&gt;
Befehle die bei Änderung der Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight-&amp;amp;lt;sr/sr_astro/sr_civil/sr_indoor/sr_weather/ss/ss_astro/ss_civil/ss_indoor/ss_weather&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung zu bestimmter Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung zu bestimmter Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn====&lt;br /&gt;
Befehle die bei Beginn/Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn/Ende der UWZ Warnungen&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-begin====&lt;br /&gt;
Befehle die bei Beginn der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg %UWZLONG%&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-end====&lt;br /&gt;
Befehle die beim Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg Alle Unwetterwarnungen sind nun beendet!&lt;br /&gt;
&lt;br /&gt;
=Platzhalter=&lt;br /&gt;
==verfügbar in allen HomeCMD Attributen==&lt;br /&gt;
===%ADDRESS%===&lt;br /&gt;
MAC Adresse des zuletzt ausgelösten Presence Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALARM%===&lt;br /&gt;
Liste mit Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&lt;br /&gt;
&lt;br /&gt;
===%ALARMCT%===&lt;br /&gt;
Anzahl der ausgelösten Alarm Geräte&lt;br /&gt;
&lt;br /&gt;
===%ALARMHR%===&lt;br /&gt;
Liste mit (human readable) Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für msg benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
Alias des zuletzt ausgelösten Resident&lt;br /&gt;
&lt;br /&gt;
===%AMODE%===&lt;br /&gt;
aktueller Alarm Mode&lt;br /&gt;
&lt;br /&gt;
===%AEAH%===&lt;br /&gt;
Wert von anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 1 wenn on und 0 wenn off&lt;br /&gt;
&lt;br /&gt;
===%ARRIVERS%===&lt;br /&gt;
Alias-Liste der ROOMMATE/GUEST deren location auf arrival steht&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Residents zu begrüßen&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. Peter, Paul und Marry&lt;br /&gt;
&lt;br /&gt;
===%AUDIO%===&lt;br /&gt;
Audio Device des zuletzt ausgelösten ROOMMATE/GUEST (Attribut msgContactAudio)&amp;lt;br&amp;gt;&lt;br /&gt;
wenn das Attribut msgContactAudio des jeweiligen Resident keinen Wert hat, so wird versucht den Wert des Attributs aus dem globalMsg (sofern vorhanden) auszulesen&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Resident spezifische msg(s) vom Typ audio zu senden, z.B. Nacht/Morgen Grüße/Wünsche&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOW%===&lt;br /&gt;
Alias des zu letzt gemeldeten Geräts mit niedrigem Batteriestand&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWALL%===&lt;br /&gt;
Wert des Reading batteryLow_hr&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWCT%===&lt;br /&gt;
Wert des Reading batteryLow_ct&lt;br /&gt;
&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Reading condition des überwachten Yahoo weather Device&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für Wetter(vorhersage) benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%CONTACT%===&lt;br /&gt;
Wert des Reading lastContact (Name des zuletzt geöffneten Kontakt Sensor)&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um msg zu versenden&lt;br /&gt;
&lt;br /&gt;
===%DAYTIME%===&lt;br /&gt;
Wert des Reading daytime&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Tageszeit spezifische Aktionen zu schalten&lt;br /&gt;
&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
Name des zuletzt ausgelösten Presence Gerät&lt;br /&gt;
&lt;br /&gt;
===%DEVICEA%===&lt;br /&gt;
Wert des Reading lastAbsentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DEVICEP%===&lt;br /&gt;
Wert des Reading lastPresentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DISABLED%===&lt;br /&gt;
Wert des Reading devicesDisabled&lt;br /&gt;
&lt;br /&gt;
===%DND%===&lt;br /&gt;
DND Status&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn an, 0 wenn aus&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCE%===&lt;br /&gt;
Wert des Reading durTimerAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCELAST%===&lt;br /&gt;
Wert des Reading lastDurAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCE%===&lt;br /&gt;
Wert des Reading durTimerPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCELAST%===&lt;br /&gt;
Wert des Reading lastDurPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEP%===&lt;br /&gt;
Wert des Reading durTimerSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEPLAST%===&lt;br /&gt;
Wert des Reading lastDurSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME&amp;gt;%===&lt;br /&gt;
Event des benannten Kalenders&amp;lt;br&amp;gt;&lt;br /&gt;
0 wenn kein gerade kein Event ist&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME-EVENTNAME&amp;gt;%===&lt;br /&gt;
0 wenn das benannte Event nicht aktiv ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn das benannte Event aktiv ist&lt;br /&gt;
&lt;br /&gt;
===%FORECAST%===&lt;br /&gt;
Wettervorhersage für morgen&lt;br /&gt;
&lt;br /&gt;
===%FORECASTTODAY%===&lt;br /&gt;
Wettervorhersage für heute&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITY%===&lt;br /&gt;
Wert des Reading humidity von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITYTREND%===&lt;br /&gt;
Wert des Reading humidityTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%ICE%===&lt;br /&gt;
0 wenn keine Eiswarnung besteht&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn Eiswarnung besteht&lt;br /&gt;
&lt;br /&gt;
===%IP%===&lt;br /&gt;
Wert des Reading publicIP von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LIGHT%===&lt;br /&gt;
Wert des Reading light von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATION%===&lt;br /&gt;
Wert des Reading location von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATIONR%===&lt;br /&gt;
Wert des Reading location des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCE%===&lt;br /&gt;
Wert des Reading luminance von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCETREND%===&lt;br /&gt;
Wert des Reading luminanceTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%MODE%===&lt;br /&gt;
gerade aktiver Modus von HOMEMODE (Reading mode)&lt;br /&gt;
&lt;br /&gt;
===%MODEALARM%===&lt;br /&gt;
aktueller Alarm Mode (wie %AMODE%)&lt;br /&gt;
&lt;br /&gt;
===%MOTION%===&lt;br /&gt;
Wert des Reading lastMotion von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%NAME%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %SELF%)&lt;br /&gt;
&lt;br /&gt;
===%OPEN%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENCT%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENHR%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PANIC%===&lt;br /&gt;
0 wenn panic ausgeschaltet ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn panic eingeschaltet ist&lt;br /&gt;
&lt;br /&gt;
===%RESIDENT%===&lt;br /&gt;
Name des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PRESENT%===&lt;br /&gt;
presence von HOMEMODE&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESENTR%===&lt;br /&gt;
presence des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESSURE%===&lt;br /&gt;
Wert des Reading pressure von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVAMODE%===&lt;br /&gt;
vorheriger modeAlarm von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVCONTACT%===&lt;br /&gt;
vorheriger geöffneter Kontaktsensor&lt;br /&gt;
&lt;br /&gt;
===%PREVMODE%===&lt;br /&gt;
vorheriger mode von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVMODER%===&lt;br /&gt;
vorheriger state des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PREVMOTION%===&lt;br /&gt;
vorheriger geöffneter Bewegungsmelder&lt;br /&gt;
&lt;br /&gt;
===%SEASON%===&lt;br /&gt;
Wert des Reading season von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SELF%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %NAME%)&lt;br /&gt;
&lt;br /&gt;
===%SENSORSBATTERY%===&lt;br /&gt;
Liste aus Internal SENSORSBATTERY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSCONTACT%===&lt;br /&gt;
Liste aus Internal SENSORSCONTACT&lt;br /&gt;
&lt;br /&gt;
===%SENSORSENERGY%===&lt;br /&gt;
Liste aus Internal SENSORSENERGY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSMOTION%===&lt;br /&gt;
Liste aus Internal SENSORSMOTION&lt;br /&gt;
&lt;br /&gt;
===%SENSORSSMOKE%===&lt;br /&gt;
Liste aus Internal SENSORSSMOKE&lt;br /&gt;
&lt;br /&gt;
===%SMOKE%===&lt;br /&gt;
Wert des Reading alarmSmoke von HOMEMODE&lt;br /&gt;
0 wenn kein Alarm&lt;br /&gt;
&lt;br /&gt;
===%SMOKECT%===&lt;br /&gt;
Wert des Reading alarmSmoke_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SMOKEHR%===&lt;br /&gt;
Wert des Reading alarmSmoke_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPERED%===&lt;br /&gt;
Wert des Reading sensorsTampered von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDCT%===&lt;br /&gt;
Wert des Reading sensorsTampered_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDHR%===&lt;br /&gt;
Wert des Reading sensorsTampered_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURE%===&lt;br /&gt;
Wert des Reading temperature von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURETREND%===&lt;br /&gt;
Wert des Reading temperatureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TOBE%===&lt;br /&gt;
are/sind oder is/ist der Wetterkondition&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHT%===&lt;br /&gt;
Wert des Reading twilight von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHTEVENT%===&lt;br /&gt;
aktuelles twilight Event&lt;br /&gt;
&lt;br /&gt;
===%UWZ%===&lt;br /&gt;
UWZ Warnlevel&lt;br /&gt;
&lt;br /&gt;
===%UWZLONG%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (lange Version)&lt;br /&gt;
&lt;br /&gt;
===%UWZSHORT%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (kurze Version)&lt;br /&gt;
&lt;br /&gt;
===%WEATHER%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather short&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WEATHERLONG%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather long&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WIND%===&lt;br /&gt;
Wert des Reading wind von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%WINDCHILL%===&lt;br /&gt;
Wert des Reading wind_chill vom eingebundenen Yahoo Wetter Gerät&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDcontact, HomeCMDmotion und HomeCMDalarm Attributen==&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%SENSOR%===&lt;br /&gt;
name des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%STATE%===&lt;br /&gt;
state des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeTextWeatherForecast Attributen==&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Readings condition des Yahoo Weather Geräts&lt;br /&gt;
&lt;br /&gt;
===%DAY%===&lt;br /&gt;
Tag der Wettervorhersage (1 - heute, 2 - morgen)&lt;br /&gt;
&lt;br /&gt;
===%HIGH%===&lt;br /&gt;
maximale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
===%LOW%===&lt;br /&gt;
minimale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDevent Attributen==&lt;br /&gt;
===%CALENDAR%===&lt;br /&gt;
Name der Kalenders&lt;br /&gt;
&lt;br /&gt;
===%DESCRIPTION%===&lt;br /&gt;
Beschreibung des aktuellen Event des Kalenders (nicht verfügbar bei holiday Geräten)&lt;br /&gt;
&lt;br /&gt;
===%EVENT%===&lt;br /&gt;
Name/Titel des aktuellen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
===%PREVEVENT%===&lt;br /&gt;
Name/Titel des vorherigen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDdevice Attributen==&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
name der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
=Benötigte Events=&lt;br /&gt;
Folgende Events werden von HOMEMODE ausgewertet bzw. werden benötigt damit HOMEMODE vollumfänglich funktionieren kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;DEVICE-TYPE&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;EVENT&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;RESIDENTS&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;ROOMMATE,GUEST&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wayhome&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSCONTACT}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsContactReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSMOTION}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsMotionReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSLUMINANCE}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;luminance&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsLuminanceReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSENERGY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;power&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;energy&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsPowerEnergyReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSBATTERY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;battery&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsBatteryReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomePresenceDeviceType&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeYahooWeatherDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wind&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeTwilightDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;light&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;twilight&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;aktEvent&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorTemperatureOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorHumidityOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeEventsHolidayDevices&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeUWZ&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;WarnCount&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Unterbrechungsfreie_Spannungsversorgung_%22PIUSV%2B%22_direkt_ansteuern&amp;diff=30605</id>
		<title>Unterbrechungsfreie Spannungsversorgung &quot;PIUSV+&quot; direkt ansteuern</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Unterbrechungsfreie_Spannungsversorgung_%22PIUSV%2B%22_direkt_ansteuern&amp;diff=30605"/>
		<updated>2019-06-03T13:23:52Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: removed rp_ Attributes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Idee ==&lt;br /&gt;
&lt;br /&gt;
Hier wird der direkte FHEM-Zugriff auf die unterbrechungsfreien Spannungsversorgung PIUSV+, die früher von CW2 und aktuell über Reichelt vertrieben wird, beschrieben.   &lt;br /&gt;
Der direkte Zugriff bedeutet, dass die Kommunikation vollständig über die I2C-Schnittstelle erfolgt, wie es die Originalsoftware &amp;quot;piupsmon&amp;quot; auch bewerkstelligt.&lt;br /&gt;
&lt;br /&gt;
Der direkte Zugriff hat folgenden Vorteile:&lt;br /&gt;
* Die Originalsoftware &amp;quot;piupsmon&amp;quot;, die für den Betrieb der USV vorgesehen ist, wird nicht bzw. nicht mehr benötig (ggf. sollte diese mit &amp;lt;code&amp;gt;sudo apt-get --purge piupsmon&amp;lt;/code&amp;gt; deinstalliert werden). Die Originalsoftware, die vom ursprünglichen Hersteller CW2 stammt und nicht mehr supportet wird, arbeitet nicht immer zuverlässig.&lt;br /&gt;
* Es muss kein zusätzliches Skript in die piupsmon-Software zum sauberen Runterfahren des FHEM-Servers eingebunden werden.&lt;br /&gt;
* Die direkte Ansteuerung bietet mehr Möglichkeiten (auch für eigene Erweiterungen). So wird beispielsweise nach einem Spannungsausfall wie hier beschrieben der Shutdown nicht nach einer festen Zeit ausgelöst, sondern beim Unterschreiten einer bestimmten Akkusspannung.&lt;br /&gt;
* Es können diverse Werte wie Versorgungspannung, Pi-Spannung, Pi-Strom, Pi-Leistung und Akku-Status ausgelesen bzw. angezeigt werden.&lt;br /&gt;
* Durch die eigene Kontrolle über die USV wird die Sicherheit erhöht, wodurch ein Crash des Betriebssystems auf dem Systemspeicher (SD-Karte oder externer USB-Speicher) noch effektiv verhindert werden kann.&lt;br /&gt;
&lt;br /&gt;
== Umsetzung ==&lt;br /&gt;
&lt;br /&gt;
I2C-Daten werden über ein I2C Interface Modul wie beispielsweise RPII2C, FRM oder NetzerI2C gesendet. Daher muss eines dieser Module zuvor definiert werden (siehe Commandref).&lt;br /&gt;
Hier wurde der Zugriff auf die I2C-Schnittstelle über das Modul RPII2C realisiert.&lt;br /&gt;
&lt;br /&gt;
In der Datei &amp;quot;99_myUtils.pm&amp;quot; müssen die folgende Funktionen kopiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=pl&amp;gt;&lt;br /&gt;
sub USV_Werte_auslesen($$)&lt;br /&gt;
{&lt;br /&gt;
my ($USV_Netzteilspannung_Error_Counter, $USV_Akkuspannung_Error_Counter) = @_;&lt;br /&gt;
&lt;br /&gt;
my $content;&lt;br /&gt;
my $u_akku_high;&lt;br /&gt;
my $u_akku_low;&lt;br /&gt;
my $u_akku;&lt;br /&gt;
my $u_netz_high;&lt;br /&gt;
my $u_netz_low;&lt;br /&gt;
my $u_netz;&lt;br /&gt;
my $u_pi_high;&lt;br /&gt;
my $u_pi_low;&lt;br /&gt;
my $u_pi;&lt;br /&gt;
my $i_pi_high;&lt;br /&gt;
my $i_pi_low;&lt;br /&gt;
my $i_pi;&lt;br /&gt;
my $p_pi;&lt;br /&gt;
my $usv_meldung;&lt;br /&gt;
&lt;br /&gt;
# Werte lesen&lt;br /&gt;
fhem(&amp;quot;set PIi2c_1 writeByte 18 02&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$content=fhem(&amp;quot;get PIi2c_1 readblock 18 10&amp;quot;,1);&lt;br /&gt;
$content=~ m/received : (\d+).(\d+).(\d+).(\d+).(\d+).(\d+).(\d+).(\d+).(\d+).(\d+) |/is;&lt;br /&gt;
$u_akku_high=$1;&lt;br /&gt;
$u_akku_low=$2;&lt;br /&gt;
$u_netz_high=$7;&lt;br /&gt;
$u_netz_low=$8;&lt;br /&gt;
$u_pi_high=$5;&lt;br /&gt;
$u_pi_low=$6;&lt;br /&gt;
$i_pi_high=$3;&lt;br /&gt;
$i_pi_low=$4;&lt;br /&gt;
&lt;br /&gt;
$u_akku=((($u_akku_high &amp;amp; 0x7F)*256+$u_akku_low)/1000);&lt;br /&gt;
$u_netz=((($u_netz_high &amp;amp; 0x7F)*256+$u_netz_low)/1000);&lt;br /&gt;
$u_pi=((($u_pi_high &amp;amp; 0x3F)*256+$u_pi_low)/1000);&lt;br /&gt;
$i_pi=((($i_pi_high &amp;amp; 0x3F)*256+$i_pi_low)/1000);&lt;br /&gt;
$p_pi=floor($u_pi*$i_pi*1000+0.5)/1000;&lt;br /&gt;
&lt;br /&gt;
if ($u_akku&amp;lt;5 &amp;amp;&amp;amp; $u_akku&amp;gt;2.5 &amp;amp;&amp;amp; $u_netz&amp;lt;6 &amp;amp;&amp;amp; $u_pi&amp;lt;6 &amp;amp;&amp;amp; $i_pi&amp;lt;3 &amp;amp;&amp;amp; not($u_pi==0 &amp;amp;&amp;amp; $i_pi&amp;gt;0) &amp;amp;&amp;amp; not($i_pi==0 &amp;amp;&amp;amp; $u_pi&amp;gt;0))&lt;br /&gt;
	{&lt;br /&gt;
	if ($u_netz&amp;lt;0.1)&lt;br /&gt;
		{&lt;br /&gt;
		$USV_Netzteilspannung_Error_Counter++;&lt;br /&gt;
		if ($USV_Netzteilspannung_Error_Counter==2) { $usv_meldung=&amp;quot;FHEM: USV-Netzspannung fehlt!&amp;quot;; }&lt;br /&gt;
		fhem(&amp;quot;set USV_Netzteilspannung_Error_Counter $USV_Netzteilspannung_Error_Counter&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	else&lt;br /&gt;
		{&lt;br /&gt;
		$USV_Netzteilspannung_Error_Counter=0;&lt;br /&gt;
		fhem(&amp;quot;set USV_Netzteilspannung_Error_Counter $USV_Netzteilspannung_Error_Counter&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	if ($u_akku&amp;lt;3.0)&lt;br /&gt;
		{&lt;br /&gt;
		$USV_Akkuspannung_Error_Counter++;&lt;br /&gt;
		if ($USV_Akkuspannung_Error_Counter==2) { $usv_meldung=&amp;quot;FHEM: USV-Akkuspannung zu niedrig!&amp;quot;; }&lt;br /&gt;
		fhem(&amp;quot;set USV_Akkuspannung_Error_Counter $USV_Akkuspannung_Error_Counter&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	else&lt;br /&gt;
		{&lt;br /&gt;
		$USV_Akkuspannung_Error_Counter=0;&lt;br /&gt;
		fhem(&amp;quot;set USV_Akkuspannung_Error_Counter $USV_Akkuspannung_Error_Counter&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	if (($u_netz&amp;lt;0.1) &amp;amp;&amp;amp; ($u_akku&amp;gt;3.0) &amp;amp;&amp;amp; ($u_akku&amp;lt;3.5)) # shutdown-Bedingung ermitteln&lt;br /&gt;
		{&lt;br /&gt;
		$usv_meldung=&amp;quot;Raspberry Pi und USV wurden wegen Stromausfall abgeschaltet!&amp;quot;;&lt;br /&gt;
		USV_abschalten();&lt;br /&gt;
		rasp_shutdown();&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	$u_akku=$u_akku.&amp;quot; V (3.0 ... 4.2 V)&amp;quot;;&lt;br /&gt;
	$u_netz=$u_netz.&amp;quot; V (5V)&amp;quot;;&lt;br /&gt;
	$u_pi=$u_pi.&amp;quot; V (5V)&amp;quot;;&lt;br /&gt;
	$i_pi=$i_pi.&amp;quot; A&amp;quot;;&lt;br /&gt;
	$p_pi=$p_pi.&amp;quot; W&amp;quot;;&lt;br /&gt;
	fhem(&amp;quot;set USV_Datagramm $content&amp;quot;);&lt;br /&gt;
	fhem(&amp;quot;set USV_Akkuspannung $u_akku&amp;quot;);&lt;br /&gt;
	fhem(&amp;quot;set USV_Netzteilspannung $u_netz&amp;quot;);&lt;br /&gt;
	fhem(&amp;quot;set USV_Spannung $u_pi&amp;quot;);&lt;br /&gt;
	fhem(&amp;quot;set USV_Strom $i_pi&amp;quot;);&lt;br /&gt;
	fhem(&amp;quot;set USV_Leistung $p_pi&amp;quot;);&lt;br /&gt;
	fhem(&amp;quot;set USV_Meldung $usv_meldung&amp;quot;)&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sub USV_abschalten()&lt;br /&gt;
{&lt;br /&gt;
# USV-Abschaltung auslösen&lt;br /&gt;
fhem(&amp;quot;set PIi2c_1 writeByte 18 10&amp;quot;);&lt;br /&gt;
fhem(&amp;quot;set PIi2c_1 writeByte 18 15&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub rasp_shutdown()&lt;br /&gt;
{&lt;br /&gt;
my @processes = `sudo shutdown -h now`;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung:&lt;br /&gt;
Um den Raspberry wie hier direkt vom FHEM aus über den Befehl &amp;quot;sudo shutdown -h now&amp;quot; auszuschalten, muss in die Datei &amp;lt;code&amp;gt;/etc/sudoers.d/010_pi-nopasswd&amp;lt;/code&amp;gt; hinter dem Eintrag&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi ALL=(ALL) NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
folgendes ergänzt werden &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi ALL=(ALL) NOPASSWD: ALL&lt;br /&gt;
fhem ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/shutdown, /sbin/halt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Datei &amp;quot;fhem.cfg&amp;quot; kann dann die Anzeige der USV-Parameter und die Abschaltung der USV beispielsweise folgendermaßen realisiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#i2C-Schnittstelle einrichten&lt;br /&gt;
define PIi2c_1 RPII2C 1&lt;br /&gt;
&lt;br /&gt;
# PI USV+ Netzteilspannung&lt;br /&gt;
define USV_Netzteilspannung dummy&lt;br /&gt;
define USV_Netzteilspannung_Error_Counter dummy&lt;br /&gt;
define USV_Netzteilspannung_Error_Counter_Init notify global:INITIALIZED set USV_Netzteilspannung_Error_Counter 0&lt;br /&gt;
&lt;br /&gt;
# PI USV+ Akkuspannung&lt;br /&gt;
define USV_Akkuspannung dummy&lt;br /&gt;
define USV_Akkuspannung_Error_Counter dummy&lt;br /&gt;
define USV_Akkuspannung_Error_Counter_Init notify global:INITIALIZED set USV_Akkuspannung_Error_Counter 0&lt;br /&gt;
&lt;br /&gt;
# PI USV+ Spannung&lt;br /&gt;
define USV_Spannung dummy&lt;br /&gt;
&lt;br /&gt;
# PI USV+ Strom&lt;br /&gt;
define USV_Strom dummy&lt;br /&gt;
&lt;br /&gt;
# PI USV+ Leistung&lt;br /&gt;
define USV_Leistung dummy&lt;br /&gt;
&lt;br /&gt;
# PI USV+ Leistung&lt;br /&gt;
define USV_Meldung dummy&lt;br /&gt;
&lt;br /&gt;
# PI USV+ Werte aktualisieren und ggf. Abschaltung auslösen&lt;br /&gt;
define USV_Werte_auslesen at +*00:00:05 { USV_Werte_auslesen(Value(&amp;quot;USV_Netzteilspannung_Error_Counter&amp;quot;),Value(&amp;quot;USV_Akkuspannung_Error_Counter&amp;quot;)) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Registerbeschreibung (für eigene Erweiterungen) ==&lt;br /&gt;
&lt;br /&gt;
Die PIUSV+ kann per I2C-Schnittstelle über die Adresse &amp;quot;0x18&amp;quot; angesprochen werden.&amp;lt;br&amp;gt; &lt;br /&gt;
Achtung: lt. Foren wurde bei älteren PIUSV+ teilweise auch die Adresse &amp;quot;0x30&amp;quot; verwendet.&amp;lt;br&amp;gt; &lt;br /&gt;
Das nächste Byte, das hinter der Adresse an die PIUSV+ gesendet werden muss, ist als Befehl zu verstehen.&lt;br /&gt;
&lt;br /&gt;
Folgende Befehle sind möglich:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Status lesen&amp;quot;              0x00   danach muss 1 Byte (Statusregister) gelesen werden&lt;br /&gt;
                                   Die einzelnen Bits des Statusregister haben folgende Bedeutung:&lt;br /&gt;
                                     Bit0:  Primäre Spannungsversorgung (5V) aktiv&lt;br /&gt;
                                     Bit1:  Sekundäre Spannungsversorgung (5V...25V) aktiv&lt;br /&gt;
                                     Bit2:  Akkuspannung zu niedrig&lt;br /&gt;
                                     Bit3:  Akku wird geladen&lt;br /&gt;
                                     Bit4:  Akku ist voll&lt;br /&gt;
                                     Bit5:  Taster S1 an der USV betätigt&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Firmare Version lesen&amp;quot;     0x01   danach müssen 12 Bytes (Zeichen) gelesen werden&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Werte lesen&amp;quot;               0x02   danach müssen 10 Byte gelesen werden&lt;br /&gt;
                                   Die zu lesenden Bytes haben folgende Reihenfolge und Bedeutung:&lt;br /&gt;
	                             HIGH_BYTE (UINT) Akku-Spannung in mV	&lt;br /&gt;
	                             LOW_BYTE  (UINT) Akku-Spannung in mV&lt;br /&gt;
                                     HIGH_BYTE (UINT) Strom in mA, der zum Raspberry Pi fließt&lt;br /&gt;
                                     LOW_BYTE  (UINT) Strom in mA, der zum Raspberry Pi fließt&lt;br /&gt;
                                     HIGH_BYTE (UINT) 5V-Versorgungsspannung in mV (USV-Spannungversorung für Raspberry Pi)&lt;br /&gt;
                                     LOW_BYTE  (UINT) 5V-Versorgungsspannung in mV (USV-Spannungversorung für Raspberry Pi)&lt;br /&gt;
                                     HIGH_BYTE (UINT) Spannung in mV am Micro USB-Stecker der USV (primäre Spannungsversorgung)&lt;br /&gt;
                                     LOW_BYTE  (UINT) Spannung in mV am Micro USB-Stecker der USV (primäre Spannungsversorgung)&lt;br /&gt;
                                     HIGH_BYTE (UINT) Spannung in mV externe Spannungsversorgung (sekundäre Spannungsversorgung)&lt;br /&gt;
                                     LOW_BYTE  (UINT) Spannung in mV externe Spannungsversorgung (sekundäre Spannungsversorgung)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;USV-Abschaltung auslösen&amp;quot;  0x10   danach muss 1 Byte geschrieben werden&lt;br /&gt;
                                   Folgende Werte sind möglich:&lt;br /&gt;
                                     0x00 (default Wert): USV wird nach einer Zeit von 30sec. abgeschaltet&lt;br /&gt;
                                     0x01...0xFF:	  USV wird nach einer Zeit von 1...255 Sekunden abgeschaltet&lt;br /&gt;
                                   Anmerkung: Durch das zeitverzögerte Auschalten der USV kann sichergestellt werden,&lt;br /&gt;
                                              dass ein zuvor ausgelöster Shutdown des Raspberry Pi abgeschlossen ist.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ausblick ==&lt;br /&gt;
Es wäre sinnvoll, das hier Beschriebene in einem eigenen Modul z.B. &amp;quot;52_I2C_PIUPS_PLUS.pm&amp;quot; unterzubringen, um den Zugriff noch eleganter zu realisieren.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Kategorie:Examples]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Unterbrechungsfreie_Spannungsversorgung_%22PIUSV%2B%22_direkt_ansteuern&amp;diff=30589</id>
		<title>Unterbrechungsfreie Spannungsversorgung &quot;PIUSV+&quot; direkt ansteuern</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Unterbrechungsfreie_Spannungsversorgung_%22PIUSV%2B%22_direkt_ansteuern&amp;diff=30589"/>
		<updated>2019-06-03T11:51:57Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* Umsetzung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Idee ==&lt;br /&gt;
&lt;br /&gt;
Hier wird der direkte FHEM-Zugriff auf die unterbrechungsfreien Spannungsversorgung PIUSV+, die früher von CW2 und aktuell über Reichelt vertrieben wird, beschrieben.   &lt;br /&gt;
Der direkte Zugriff bedeutet, dass die Kommunikation vollständig über die I2C-Schnittstelle erfolgt, wie es die Originalsoftware &amp;quot;piupsmon&amp;quot; auch bewerkstelligt.&lt;br /&gt;
&lt;br /&gt;
Der direkte Zugriff hat folgenden Vorteile:&lt;br /&gt;
* Die Originalsoftware &amp;quot;piupsmon&amp;quot;, die für den Betrieb der USV vorgesehen ist, wird nicht bzw. nicht mehr benötig (ggf. sollte diese mit &amp;lt;code&amp;gt;sudo apt-get --purge piupsmon&amp;lt;/code&amp;gt; deinstalliert werden). Die Originalsoftware, die vom ursprünglichen Hersteller CW2 stammt und nicht mehr supportet wird, arbeitet nicht immer zuverlässig.&lt;br /&gt;
* Es muss kein zusätzliches Skript in die piupsmon-Software zum sauberen Runterfahren des FHEM-Servers eingebunden werden.&lt;br /&gt;
* Die direkte Ansteuerung bietet mehr Möglichkeiten (auch für eigene Erweiterungen). So wird beispielsweise nach einem Spannungsausfall wie hier beschrieben der Shutdown nicht nach einer festen Zeit ausgelöst, sondern beim Unterschreiten einer bestimmten Akkusspannung.&lt;br /&gt;
* Es können diverse Werte wie Versorgungspannung, Pi-Spannung, Pi-Strom, Pi-Leistung und Akku-Status ausgelesen bzw. angezeigt werden.&lt;br /&gt;
* Durch die eigene Kontrolle über die USV wird die Sicherheit erhöht, wodurch ein Crash des Betriebssystems auf dem Systemspeicher (SD-Karte oder externer USB-Speicher) noch effektiv verhindert werden kann.&lt;br /&gt;
&lt;br /&gt;
== Umsetzung ==&lt;br /&gt;
&lt;br /&gt;
I2C-Daten werden über ein I2C Interface Modul wie beispielsweise RPII2C, FRM oder NetzerI2C gesendet. Daher muss eines dieser Module zuvor definiert werden (siehe Commandref).&lt;br /&gt;
Hier wurde der Zugriff auf die I2C-Schnittstelle über das Modul RPII2C realisiert.&lt;br /&gt;
&lt;br /&gt;
In der Datei &amp;quot;99_myUtils.pm&amp;quot; müssen die folgende Funktionen kopiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=pl&amp;gt;&lt;br /&gt;
sub USV_Werte_auslesen($$)&lt;br /&gt;
{&lt;br /&gt;
my ($USV_Netzteilspannung_Error_Counter, $USV_Akkuspannung_Error_Counter) = @_;&lt;br /&gt;
&lt;br /&gt;
my $content;&lt;br /&gt;
my $u_akku_high;&lt;br /&gt;
my $u_akku_low;&lt;br /&gt;
my $u_akku;&lt;br /&gt;
my $u_netz_high;&lt;br /&gt;
my $u_netz_low;&lt;br /&gt;
my $u_netz;&lt;br /&gt;
my $u_pi_high;&lt;br /&gt;
my $u_pi_low;&lt;br /&gt;
my $u_pi;&lt;br /&gt;
my $i_pi_high;&lt;br /&gt;
my $i_pi_low;&lt;br /&gt;
my $i_pi;&lt;br /&gt;
my $p_pi;&lt;br /&gt;
my $usv_meldung;&lt;br /&gt;
&lt;br /&gt;
# Werte lesen&lt;br /&gt;
fhem(&amp;quot;set PIi2c_1 writeByte 18 02&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$content=fhem(&amp;quot;get PIi2c_1 readblock 18 10&amp;quot;,1);&lt;br /&gt;
$content=~ m/received : (\d+).(\d+).(\d+).(\d+).(\d+).(\d+).(\d+).(\d+).(\d+).(\d+) |/is;&lt;br /&gt;
$u_akku_high=$1;&lt;br /&gt;
$u_akku_low=$2;&lt;br /&gt;
$u_netz_high=$7;&lt;br /&gt;
$u_netz_low=$8;&lt;br /&gt;
$u_pi_high=$5;&lt;br /&gt;
$u_pi_low=$6;&lt;br /&gt;
$i_pi_high=$3;&lt;br /&gt;
$i_pi_low=$4;&lt;br /&gt;
&lt;br /&gt;
$u_akku=((($u_akku_high &amp;amp; 0x7F)*256+$u_akku_low)/1000);&lt;br /&gt;
$u_netz=((($u_netz_high &amp;amp; 0x7F)*256+$u_netz_low)/1000);&lt;br /&gt;
$u_pi=((($u_pi_high &amp;amp; 0x3F)*256+$u_pi_low)/1000);&lt;br /&gt;
$i_pi=((($i_pi_high &amp;amp; 0x3F)*256+$i_pi_low)/1000);&lt;br /&gt;
$p_pi=floor($u_pi*$i_pi*1000+0.5)/1000;&lt;br /&gt;
&lt;br /&gt;
if ($u_akku&amp;lt;5 &amp;amp;&amp;amp; $u_akku&amp;gt;2.5 &amp;amp;&amp;amp; $u_netz&amp;lt;6 &amp;amp;&amp;amp; $u_pi&amp;lt;6 &amp;amp;&amp;amp; $i_pi&amp;lt;3 &amp;amp;&amp;amp; not($u_pi==0 &amp;amp;&amp;amp; $i_pi&amp;gt;0) &amp;amp;&amp;amp; not($i_pi==0 &amp;amp;&amp;amp; $u_pi&amp;gt;0))&lt;br /&gt;
	{&lt;br /&gt;
	if ($u_netz&amp;lt;0.1)&lt;br /&gt;
		{&lt;br /&gt;
		$USV_Netzteilspannung_Error_Counter++;&lt;br /&gt;
		if ($USV_Netzteilspannung_Error_Counter==2) { $usv_meldung=&amp;quot;FHEM: USV-Netzspannung fehlt!&amp;quot;; }&lt;br /&gt;
		fhem(&amp;quot;set USV_Netzteilspannung_Error_Counter $USV_Netzteilspannung_Error_Counter&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	else&lt;br /&gt;
		{&lt;br /&gt;
		$USV_Netzteilspannung_Error_Counter=0;&lt;br /&gt;
		fhem(&amp;quot;set USV_Netzteilspannung_Error_Counter $USV_Netzteilspannung_Error_Counter&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	if ($u_akku&amp;lt;3.0)&lt;br /&gt;
		{&lt;br /&gt;
		$USV_Akkuspannung_Error_Counter++;&lt;br /&gt;
		if ($USV_Akkuspannung_Error_Counter==2) { $usv_meldung=&amp;quot;FHEM: USV-Akkuspannung zu niedrig!&amp;quot;; }&lt;br /&gt;
		fhem(&amp;quot;set USV_Akkuspannung_Error_Counter $USV_Akkuspannung_Error_Counter&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	else&lt;br /&gt;
		{&lt;br /&gt;
		$USV_Akkuspannung_Error_Counter=0;&lt;br /&gt;
		fhem(&amp;quot;set USV_Akkuspannung_Error_Counter $USV_Akkuspannung_Error_Counter&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	if (($u_netz&amp;lt;0.1) &amp;amp;&amp;amp; ($u_akku&amp;gt;3.0) &amp;amp;&amp;amp; ($u_akku&amp;lt;3.5)) # shutdown-Bedingung ermitteln&lt;br /&gt;
		{&lt;br /&gt;
		$usv_meldung=&amp;quot;Raspberry Pi und USV wurden wegen Stromausfall abgeschaltet!&amp;quot;;&lt;br /&gt;
		USV_abschalten();&lt;br /&gt;
		rasp_shutdown();&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	$u_akku=$u_akku.&amp;quot; V (3.0 ... 4.2 V)&amp;quot;;&lt;br /&gt;
	$u_netz=$u_netz.&amp;quot; V (5V)&amp;quot;;&lt;br /&gt;
	$u_pi=$u_pi.&amp;quot; V (5V)&amp;quot;;&lt;br /&gt;
	$i_pi=$i_pi.&amp;quot; A&amp;quot;;&lt;br /&gt;
	$p_pi=$p_pi.&amp;quot; W&amp;quot;;&lt;br /&gt;
	fhem(&amp;quot;set USV_Datagramm $content&amp;quot;);&lt;br /&gt;
	fhem(&amp;quot;set USV_Akkuspannung $u_akku&amp;quot;);&lt;br /&gt;
	fhem(&amp;quot;set USV_Netzteilspannung $u_netz&amp;quot;);&lt;br /&gt;
	fhem(&amp;quot;set USV_Spannung $u_pi&amp;quot;);&lt;br /&gt;
	fhem(&amp;quot;set USV_Strom $i_pi&amp;quot;);&lt;br /&gt;
	fhem(&amp;quot;set USV_Leistung $p_pi&amp;quot;);&lt;br /&gt;
	fhem(&amp;quot;set USV_Meldung $usv_meldung&amp;quot;)&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sub USV_abschalten()&lt;br /&gt;
{&lt;br /&gt;
# USV-Abschaltung auslösen&lt;br /&gt;
fhem(&amp;quot;set PIi2c_1 writeByte 18 10&amp;quot;);&lt;br /&gt;
fhem(&amp;quot;set PIi2c_1 writeByte 18 15&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub rasp_shutdown()&lt;br /&gt;
{&lt;br /&gt;
my @processes = `sudo shutdown -h now`;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anmerkung:&lt;br /&gt;
Um den Raspberry wie hier direkt vom FHEM aus über den Befehl &amp;quot;sudo shutdown -h now&amp;quot; auszuschalten, muss in die Datei &amp;lt;code&amp;gt;/etc/sudoers.d/010_pi-nopasswd&amp;lt;/code&amp;gt; hinter dem Eintrag&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi ALL=(ALL) NOPASSWD: ALL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
folgendes ergänzt werden &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi ALL=(ALL) NOPASSWD: ALL&lt;br /&gt;
fhem ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/shutdown, /sbin/halt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Datei &amp;quot;fhem.cfg&amp;quot; kann dann die Anzeige der USV-Parameter und die Abschaltung der USV beispielsweise folgendermaßen realisiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#i2C-Schnittstelle einrichten&lt;br /&gt;
define PIi2c_1 RPII2C 1&lt;br /&gt;
&lt;br /&gt;
# PI USV+ Netzteilspannung&lt;br /&gt;
define USV_Netzteilspannung dummy&lt;br /&gt;
attr USV_Netzteilspannung fp_Raspberry 25,460,2,USV Netzteilspannung:&lt;br /&gt;
define USV_Netzteilspannung_Error_Counter dummy&lt;br /&gt;
define USV_Netzteilspannung_Error_Counter_Init notify global:INITIALIZED set USV_Netzteilspannung_Error_Counter 0&lt;br /&gt;
&lt;br /&gt;
# PI USV+ Akkuspannung&lt;br /&gt;
define USV_Akkuspannung dummy&lt;br /&gt;
attr USV_Akkuspannung fp_Raspberry 75,460,2,USV Akkuspannung:&lt;br /&gt;
define USV_Akkuspannung_Error_Counter dummy&lt;br /&gt;
define USV_Akkuspannung_Error_Counter_Init notify global:INITIALIZED set USV_Akkuspannung_Error_Counter 0&lt;br /&gt;
&lt;br /&gt;
# PI USV+ Spannung&lt;br /&gt;
define USV_Spannung dummy&lt;br /&gt;
attr USV_Spannung fp_Raspberry 125,460,2,USV PI-Spannung:&lt;br /&gt;
&lt;br /&gt;
# PI USV+ Strom&lt;br /&gt;
define USV_Strom dummy&lt;br /&gt;
attr USV_Strom fp_Raspberry 175,460,2,USV PI-Strom:&lt;br /&gt;
&lt;br /&gt;
# PI USV+ Leistung&lt;br /&gt;
define USV_Leistung dummy&lt;br /&gt;
attr USV_Leistung fp_Raspberry 225,460,2,USV PI-Leistung:&lt;br /&gt;
&lt;br /&gt;
# PI USV+ Leistung&lt;br /&gt;
define USV_Meldung dummy&lt;br /&gt;
attr USV_Leistung fp_Raspberry 225,460,2,USV Meldung:&lt;br /&gt;
&lt;br /&gt;
# PI USV+ Werte aktualisieren und ggf. Abschaltung auslösen&lt;br /&gt;
define USV_Werte_auslesen at +*00:00:05 { USV_Werte_auslesen(Value(&amp;quot;USV_Netzteilspannung_Error_Counter&amp;quot;),Value(&amp;quot;USV_Akkuspannung_Error_Counter&amp;quot;)) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Registerbeschreibung (für eigene Erweiterungen) ==&lt;br /&gt;
&lt;br /&gt;
Die PIUSV+ kann per I2C-Schnittstelle über die Adresse &amp;quot;0x18&amp;quot; angesprochen werden.&amp;lt;br&amp;gt; &lt;br /&gt;
Achtung: lt. Foren wurde bei älteren PIUSV+ teilweise auch die Adresse &amp;quot;0x30&amp;quot; verwendet.&amp;lt;br&amp;gt; &lt;br /&gt;
Das nächste Byte, das hinter der Adresse an die PIUSV+ gesendet werden muss, ist als Befehl zu verstehen.&lt;br /&gt;
&lt;br /&gt;
Folgende Befehle sind möglich:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Status lesen&amp;quot;              0x00   danach muss 1 Byte (Statusregister) gelesen werden&lt;br /&gt;
                                   Die einzelnen Bits des Statusregister haben folgende Bedeutung:&lt;br /&gt;
                                     Bit0:  Primäre Spannungsversorgung (5V) aktiv&lt;br /&gt;
                                     Bit1:  Sekundäre Spannungsversorgung (5V...25V) aktiv&lt;br /&gt;
                                     Bit2:  Akkuspannung zu niedrig&lt;br /&gt;
                                     Bit3:  Akku wird geladen&lt;br /&gt;
                                     Bit4:  Akku ist voll&lt;br /&gt;
                                     Bit5:  Taster S1 an der USV betätigt&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Firmare Version lesen&amp;quot;     0x01   danach müssen 12 Bytes (Zeichen) gelesen werden&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Werte lesen&amp;quot;               0x02   danach müssen 10 Byte gelesen werden&lt;br /&gt;
                                   Die zu lesenden Bytes haben folgende Reihenfolge und Bedeutung:&lt;br /&gt;
	                             HIGH_BYTE (UINT) Akku-Spannung in mV	&lt;br /&gt;
	                             LOW_BYTE  (UINT) Akku-Spannung in mV&lt;br /&gt;
                                     HIGH_BYTE (UINT) Strom in mA, der zum Raspberry Pi fließt&lt;br /&gt;
                                     LOW_BYTE  (UINT) Strom in mA, der zum Raspberry Pi fließt&lt;br /&gt;
                                     HIGH_BYTE (UINT) 5V-Versorgungsspannung in mV (USV-Spannungversorung für Raspberry Pi)&lt;br /&gt;
                                     LOW_BYTE  (UINT) 5V-Versorgungsspannung in mV (USV-Spannungversorung für Raspberry Pi)&lt;br /&gt;
                                     HIGH_BYTE (UINT) Spannung in mV am Micro USB-Stecker der USV (primäre Spannungsversorgung)&lt;br /&gt;
                                     LOW_BYTE  (UINT) Spannung in mV am Micro USB-Stecker der USV (primäre Spannungsversorgung)&lt;br /&gt;
                                     HIGH_BYTE (UINT) Spannung in mV externe Spannungsversorgung (sekundäre Spannungsversorgung)&lt;br /&gt;
                                     LOW_BYTE  (UINT) Spannung in mV externe Spannungsversorgung (sekundäre Spannungsversorgung)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;USV-Abschaltung auslösen&amp;quot;  0x10   danach muss 1 Byte geschrieben werden&lt;br /&gt;
                                   Folgende Werte sind möglich:&lt;br /&gt;
                                     0x00 (default Wert): USV wird nach einer Zeit von 30sec. abgeschaltet&lt;br /&gt;
                                     0x01...0xFF:	  USV wird nach einer Zeit von 1...255 Sekunden abgeschaltet&lt;br /&gt;
                                   Anmerkung: Durch das zeitverzögerte Auschalten der USV kann sichergestellt werden,&lt;br /&gt;
                                              dass ein zuvor ausgelöster Shutdown des Raspberry Pi abgeschlossen ist.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ausblick ==&lt;br /&gt;
Es wäre sinnvoll, das hier Beschriebene in einem eigenen Modul z.B. &amp;quot;52_I2C_PIUPS_PLUS.pm&amp;quot; unterzubringen, um den Zugriff noch eleganter zu realisieren.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Kategorie:Examples]]&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=30472</id>
		<title>HOMEMODE</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=30472"/>
		<updated>2019-05-21T07:26:38Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: Anpassung an nun groß geschriebene Model in Homematic&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Das Modul wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden und viele grundlegende Automationen durch Hinzufügen weiterer Geräte bereitzustellen.&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=HOMEMODE&lt;br /&gt;
|ModFTopic=64317&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=22_HOMEMODE.pm&lt;br /&gt;
|ModOwner=DeeSPe&lt;br /&gt;
}}&lt;br /&gt;
Diese Seite beschreibt die Konfiguration und Verwendung des Moduls &#039;&#039;22_HOMEMODE.pm&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Das Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier aufgeführte Anleitung entspricht dem Modul in Version 1.4.2.&lt;br /&gt;
&lt;br /&gt;
Viele allgemein typische Automationen sind bereits fertig integriert.&lt;br /&gt;
&lt;br /&gt;
Die jeweils per Event auszuführenden Befehle können in den entsprechenden &#039;&#039;HomeCMD...&#039;&#039; Atributen hinterlegt werden und so in der Detail Ansicht des HOMEMODE Geräts übersichtlich angezeigt und bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen vieler notify/DOIF ist durch den Einsatz von &#039;&#039;HOMEMODE&#039;&#039; unnötig.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wurde das Modul für die Verwendung mit HomeKit als GUI optimiert. Alle möglichen Mappings für Homebridge sind bereits enthalten und können über einen set Befehl aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:HOMEMODE_Device.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Um Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; benutzen zu können benötigt man als Mindestvoraussetzung ein bereits angelegtes RESIDENTS Gerät mit entsprechenden ROOMMATE/GUEST Geräten.&lt;br /&gt;
&lt;br /&gt;
==Mögliche Automationen==&lt;br /&gt;
Alle Automationen sind optional.&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Beispiele:&lt;br /&gt;
*Änderung des Zustands von ROOMMATE/GUEST Geräten anhand von PRESENCE Geräten&lt;br /&gt;
*Bereistellung von CMD Attributen für mögliche Events rund um den Heim-/Hausstatus&lt;br /&gt;
*Bereistellung von Platzhaltern innerhalb der CMD Attribute, z.B. %MODE%, %SEASON% oder %PREVMODE% für die Werte der Readings mode, season und prevMode&lt;br /&gt;
*Einbindung von Kontakt Sensoren, für z.B. Offen-Warnungen nach bestimmten Zeitraum oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Kontakt Sensor konfiguriert werden&lt;br /&gt;
*Einbindung von Bewegungs Sensoren, für z.B. automatische Licht Schaltungen oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Bewegungs Sensor konfiguriert werden&lt;br /&gt;
*Darstellungen und Auslösen von Sabotage Alarmen der eingebundenen Kontakt- und Bewegungssensoren&lt;br /&gt;
*Einbindung von jeweils einem Temperatur und Luftfeuchtigkeitssensor&lt;br /&gt;
*Einbindung eines lokalen Yahoo Wetter Devices zur Ermittlung und Ausgabe der lokalen Wetterdaten und Erzeugung der Wettervorhersage&lt;br /&gt;
*Einbindung von Power und Energy Sensoren zur Ermittlung der Gesamtmengen&lt;br /&gt;
*Einbindung von Calendar/holiday Devices für spezielle im HOMEMODE Device verfügbar zu machende Events&lt;br /&gt;
*von Uhrzeit abhängiger Anwesend-Modus&lt;br /&gt;
*Bewohner unabhängige Tageszeit-Modus&lt;br /&gt;
*Alarm-Modus&lt;br /&gt;
*DND-Modus&lt;br /&gt;
*Überwachung von Batteriewerten&lt;br /&gt;
&lt;br /&gt;
=HOMEMODE-Gerät=&lt;br /&gt;
==Definition==&lt;br /&gt;
Das HOMEMODE Gerät - hier mit dem Namen &#039;&#039;Home&#039;&#039; versehen - selbst wird über&lt;br /&gt;
 define Home HOMEMODE&lt;br /&gt;
bei Vorhandensein nur eines RESIDENTS Geräts definiert.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung mehrerer RESIDENTS Geräte muss das Master RESIDENTS Gerät beim Definieren mit angegeben werden&lt;br /&gt;
 define Home HOMEMODE rgr_Residents&lt;br /&gt;
Dieses Modul verwendet das globale Attribut &#039;&#039;language&#039;&#039; zur Bestimmung der Anzeigedaten (Standard: EN=english). Für deutsche Ausgabedaten kann das Attribut&lt;br /&gt;
 attr global language DE&lt;br /&gt;
gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Alternativ kann auch nur das HOMEMODE Gerät auf deutsch geändert werden&lt;br /&gt;
 attr Home HomeLanguage DE&lt;br /&gt;
&lt;br /&gt;
==Set-Befehle==&lt;br /&gt;
&#039;&#039;set &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 set Home anyoneElseAtHome &amp;lt;on/off&amp;gt;&lt;br /&gt;
einschalten wenn jemand anderes zu Hause ist der kein registrierter ROOMMATE/GUEST ist, z.B. Hund/Katze oder unregistrierte Gäste&amp;lt;br&amp;gt;&lt;br /&gt;
wenn eingeschaltet, dann wird der Alarm Mode beim Verlassen statt auf armaway nur auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
schaltet man ein und hat schon Haus/Wohnung verlassen, so wird der Alarm Mode von armaway auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AEAH%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd &amp;lt;on/off&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. um Benachrichtigungen zu deaktivieren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DND%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd-for-minutes &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus für die angegebenen Minuten ein&amp;lt;br&amp;gt;&lt;br /&gt;
kehrt danach zum vorherigen (tageszeitabhängigen) Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home deviceDisable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
deaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home deviceEnable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
reaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home location &amp;lt;arrival/home/bed/underway/wayhome&amp;gt;&lt;br /&gt;
manueller Ortswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%LOCATION%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home mode &amp;lt;morning/day/afternoon/evening/night/gotosleep/asleep/absent/gone/home&amp;gt;&lt;br /&gt;
manueller Moduswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm &amp;lt;armaway/armhome/armnight/disarm&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVAMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm-for-minutes &amp;lt;armaway/armhome/armnight/disarm&amp;gt; &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus für die angegebenen Minuten ein&lt;br /&gt;
kehrt danach zum vorherigen Alarm Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home updateHomebridgeMapping&lt;br /&gt;
aktualisiert das Attribut homebridgeMapping des HOMEMODDE Device abhängig von den verfügbaren Informationen&lt;br /&gt;
&lt;br /&gt;
 set Home updateInternalForce&lt;br /&gt;
führt eine Aktualisierung der Internals des HOMEMODE Device aus&amp;lt;br&amp;gt;&lt;br /&gt;
das sollte manuell benutzt werden nachdem das Modul aktualisiert und nur ein reload statt restart gemacht wurde&amp;lt;br&amp;gt;&lt;br /&gt;
auch wenn man überwachte/kontrollierte Geräte ändert sollte man diesen Befehl manuell ausführen, z.B. neue ROOMMATE/GUEST im RESIDENTS Device hinzufügt, oder Geräte in FHEM hinzufügt die dem selben Devspec wie bisher entsprechen (Steckdosen, Sensoren)&lt;br /&gt;
&lt;br /&gt;
==Get-Befehle==&lt;br /&gt;
&#039;&#039;get &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 get Home contactsOpen &amp;lt;all/doorsinside/doorsoutside/doorsmain/outside/windows&amp;gt;&lt;br /&gt;
Liste von all/doorsinside/doorsoutside/doorsmain/outside/windows offenen Kontakten&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%OPEN%&#039;&#039;&#039;, &#039;&#039;&#039;%OPENCT%&#039;&#039;&#039; und &#039;&#039;&#039;%OPENHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home devicesDisabled&lt;br /&gt;
Anzeige der für HOMEMODE deaktivierten Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home mode&lt;br /&gt;
Anzeige von mode&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home modeAlarm&lt;br /&gt;
Anzeige von modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%MODEALARM%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home publicIP&lt;br /&gt;
holen der öffentlichen IP Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%IP%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home sensorsTampered&lt;br /&gt;
Liste aller sabotierten Sensoren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%TAMPERED%&#039;&#039;&#039;, &#039;&#039;&#039;%TAMPEREDCT%&#039;&#039;&#039; und &#039;&#039;&#039;%TAMPEREDHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weather &amp;lt;long/short&amp;gt;&lt;br /&gt;
Wetterinfo im angegebenen Format anzeigen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%WEATHER%&#039;&#039;&#039; und &#039;&#039;&#039;%WEATHERLONG%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weatherForecast [TAG]&lt;br /&gt;
Wettervorhersage für angegebenen Tag&amp;lt;br&amp;gt;&lt;br /&gt;
wenn kein Tag angegeben wird, so wird die Vorhersage für morgen (2) ausgegeben&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%FORECAST%&#039;&#039;&#039; (morgen) und &#039;&#039;&#039;%FORECASTTODAY%&#039;&#039;&#039; (heute) sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
==webCmd==&lt;br /&gt;
Die Schaltmöglichkeiten sind absichtlich gering gehalten, denn im normalen Betrieb sollte nicht mehr benötigt werden als die hier gebotenen.&amp;lt;br&amp;gt;&lt;br /&gt;
Es lässt sich der Alarm Mode manuell umschalten und beim Klick auf das devStateIcon wird der DND Mode an- und ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
==Grundkonfiguration==&lt;br /&gt;
&lt;br /&gt;
Diese Grundkonfiguration sollte immer als erstes erfolgen um entsprechend darauf weiter aufzubauen. Als zweiter Schritt ist dann die erweiterte Konfiguration angedacht.&lt;br /&gt;
&lt;br /&gt;
Bei der Namensvergabe der Attribute vom HOMEMODE Device wurde nach einem möglichst kurzem Prefix gesucht und nach vielen Tests wurde sich für das Prefix &amp;quot;Home&amp;quot; entschieden. Das hat den Vorteil, dass alle Attribute beisammen stehen und diese auch (durch den Großbuchstaben am Anfang) ziemlich weit oben in der Liste der Attribute stehen. Ebenso wurde bei der Namensvergabe versucht, selbsterklärende Namen zu wählen. Das hat den Vorteil, dass man relativ einfach genau erkennen kann wofür das Attribut steht, allerdings auch den Nachteil, dass einige Attributnamen ganz schön lang werden.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedUserAttr====&lt;br /&gt;
Als Erstes wird empfohlen, gerade für Anfänger, das Attribut &amp;quot;HomeAdvancedUserAttr&amp;quot; auf 1 zu setzen. Dadurch werden viel mehr HomeCMD Attribute freigeschaltet. Diese werden im Attribut userattr des HOMEMODE Device hinzugefügt.&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAlarmModes====&lt;br /&gt;
Als Nächstes sollte man sich entscheiden, ob die Alarm Modus evtl. nicht automatisch zum jeweiligen Modus des HOMEMODE Device geschaltet werden sollen. Standardmäßig werden die Alarm Modus automatisch gesteuert. Ist das nicht erwünscht, so ist der Wert dieses Attributs auf 0 zu setzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;absent&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armaway&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;home&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;disarm&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;asleep&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armnight&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Alarm Modus &amp;quot;armhome&amp;quot; kann nur manuell gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeAutoArrival====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird bei Ankunft jedes ROOMMATE/GUEST die location des jeweiligen ROOMMATE/GUEST für die hier angegeben Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt. Beim ersten nach Hause kommenden ROOMMATE/GUEST wird zusätzlich die location des HOMEMODE Device für die hier eingestellte Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Ablauf der hier eingestellten Minuten wechselt das jeweilige Device von &amp;quot;arrival&amp;quot; auf &amp;quot;home&amp;quot;, sofern es noch die location &amp;quot;arrival&amp;quot; hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAsleep====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Schlafengehen (gotosleep) jedes ROOMMATE/GUEST ein Timer gestartet, der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;asleep&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAwoken====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Erwachen (&amp;quot;awoken&amp;quot; oder &amp;quot;home nach asleep&amp;quot;) jedes ROOMMATE/GUEST dieser auf &amp;quot;awoken&amp;quot; gesetzt und ein Timer gestartet, der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;home&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoDaytime====&lt;br /&gt;
Standardmäßig wird mode anhand der Tageszeit automatisch gesetzt. Ist das nicht gewünscht, kann das über den Wert 0 deaktiviert werden. Dann stehen allerdings tageszeitabhängigen mode(s) nicht mehr zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeResidentCmdDelay====&lt;br /&gt;
Normalerweise werden die Events der ROOMMATE/GUEST vor denen des HOMEMODE Device ausgeführt. Um das zu ändern wird die Ausführung der ROOMMATE/GUEST HomeCMD Attribute um die hier eingestellte Zeit in Sekunden verzögert.&amp;lt;br&amp;gt;&lt;br /&gt;
Je genauer der Name des jeweiligen HomeCMD Attributs beschrieben wird, desto später wird dieser ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Das heißt z.B. dass HomeCMDmode vor HomeCMDmode-absent und dieser wiederrum vor HomeCMDmode-absent-ROOMMATE/GUEST-NAME ausgeführt wird usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Um das normale Verhalten wiederherzustellen ist der Wert dieses Attributs auf 0 zu setzen. Dann wird HomeCMDmode-absent-ROOMMATE/GUEST-NAME vor HomeCMDmode-absent und vor HomeCMDmode ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis unendlich in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
==Konfiguration Presence Devices (automatische anwesend/abwesend Umschaltung von ROOMMATE/GUEST)==&lt;br /&gt;
Damit die automatische Zuordnung der Presence Devices zu ihren ROOMMATE/GUEST Devices zuverlässig funktioniert, ist es nötig dass der Hauptteil des Namens des ROOMMATE/GUEST innerhalb des Namens des zugehörigen PRESENCE Device(s) vorkommt.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Attribut HomePresenceDeviceType kann man den zu suchenden TYPE von Presence Device vorgeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Per Default werden nur Devices vom TYPE PRESENCE gesucht und versucht den ROOMMATE/GUEST zuzuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls man z.B. auch Devices vom TYPE dummy zur Anwesenheitssteuerung benutzt, kann man diese im Attribut HomePresenceDeviceType mit hinzunehmen. Es sind alles Device TYPEn möglich die ein &amp;quot;presence&amp;quot; Reading mit den Werten &amp;quot;present/appeared&amp;quot; und &amp;quot;absent/disappeared&amp;quot; bereitstellen. Mehrere TYPEn sind möglich da in diesem Attribut ein Regex erwartet wird. z.B.: dummy oder PRESENCE|dummy oder PRESENCE|dummy|ONKYO_AVR.&lt;br /&gt;
&lt;br /&gt;
===Beispiel===&lt;br /&gt;
Der Device Name meines ROOMMATE ist &amp;quot;rr_Dan&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf der Suche nach dem zugehörigen Presence Device wird der erste Teil (rr_ oder rg_) weggeschnitten und der Rest in Kleinbuchstaben umgewandelt.&amp;lt;br&amp;gt;&lt;br /&gt;
Mit dem was übrig bleibt, bei mir also nur dan, werden die möglichen Presence Devices versucht zu erkennen.&amp;lt;br&amp;gt;&lt;br /&gt;
Mein zugehöriges Presence Device heißt, historisch gewachsen, PRESENCE_rr_Dan und würde somit problemlos zugeordnet werden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen der zugehörigen Presence Devives könnten in ihrer kürzesten Form auch wie folgt sein um meinen ROOMMATE/GUEST Device zugeordnet zu werden:&amp;lt;br&amp;gt;&lt;br /&gt;
 pdan&lt;br /&gt;
 danp&lt;br /&gt;
 ZDan&lt;br /&gt;
 DANZ&lt;br /&gt;
 wenndannsonst&lt;br /&gt;
Aber Achtung, es funktioniert nicht mehr wenn die Namen nicht eindeutig sind. Wenn es z.B. eine rr_Dana geben würde mit Presence Device Name &amp;quot;pdani&amp;quot;, dann würde dieser Name auch bei mir (dan) passen. Das könnte man aber auch bewußt nutzen um mit einem Presence Device 2 ROOMMATE/GUEST Devices gleichzeitig zu steuern.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn die Namen wirklich absolut eindeutig sind, dann könnte man den Regex im Attribut HomePresenceDeviceType sogar auf &amp;quot;.*&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Werden pro ROOMMATE/GUEST mehrere Presence Devices gefunden und zugeordnet, so wird automatisch dass Attribut HomePresenceDeviceAbsentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt; auf die Anzahl der gefundenen Presence Devices gesetzt, so dass der/die jeweilige ROOMMATE/GUEST immer erst als abwesend gewertet wird sobald alle zugehörigen Presence Devices abwesend sind. Analog dazu gibt es noch das Attribut HomePresenceDevicePresentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresence====&lt;br /&gt;
Ist dieses Attribut auf 1 gesetzt, so werden die ROOMMATE/GUEST Devices automatisch zum Status ihrer zugehörigen PRESENCE Devices geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device present - ROOMMATE/GUEST home&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device absent - ROOMMATE/GUEST absent&amp;lt;br&amp;gt;&lt;br /&gt;
Falls es sich bei den von Euch benutzen PRESENCE Devices nicht um Devices vom TYPE PRESENCE handeln sollte, sondern z.B. um PRESENCE und dummy, so kann dieses im Attribut HomePresenceDeviceType als Regex konfiguriert werden! z.B.: PRESENCE|dummy&amp;lt;br&amp;gt;&lt;br /&gt;
Damit ein Device als Presence Device erkannt werden kann, muss dieses über ein presence Reading verfügen.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresenceSuppressState====&lt;br /&gt;
unterdrücke Anwesenheitsänderung in angegebenen State(s) der RESIDENTS&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. für &amp;quot;mysteriös&amp;quot; verschwindende Anwesenheitsgeräte in der Nacht&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: asleep|awoken|gotosleep&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceType====&lt;br /&gt;
Regex des TYPEs/der TYPEn von Presence Devices&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Regex der Device TYPEn&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: PRESENCE&lt;br /&gt;
&lt;br /&gt;
==Erweiterte Konfiguration==&lt;br /&gt;
Um das HOMEMODE Device vollumfänglich zu benutzen ist es sinnvoll weitere Devices (zur Überwachung) hinzuzufügen.&lt;br /&gt;
&lt;br /&gt;
Die bereits möglichen hinzuzufügenden Devices werden hier folgend nach Attributnamen erklärt.&lt;br /&gt;
&lt;br /&gt;
===Attribute zum Hinzufügen weiterer Geräte===&lt;br /&gt;
&lt;br /&gt;
====HomeEventsCalendarDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeEventsHolidayDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorAirpressure====&lt;br /&gt;
Luftdrucksensor aussen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorHumidityOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussensensors für Luftfeuchtigkeit anzugeben. Dieser muss ein Reading humidity besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für (Aussen)Luftfeuchtigkeit und Aussentemperatur ein und der selbe ist, so muss dieser nur einmalig im Attribut HomeSensorTemperatureOutside hinterlegt werden. Dieser muss dann die beiden Readings humidity und temperature haben. Im Bedarfsfall können diese Readings auch vorher entsprechend durch eigene userReadings erstellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%HUMIDITY%&#039;&#039;&#039; für den Wert des Readings humidity zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorTemperatureOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussentemperatursensors anzugeben. Dieser muss mindestens ein Reading temperature besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für Aussentemperatur auch ein Reading humidity besitzen sollte und dieses auch der Sensor für die Aussenlufteuchtigkeit ist, so muss dieser nur einmalig hier in diesem Attribut hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%TEMPERATURE%&#039;&#039;&#039; für den Wert des Readings temperature zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading temperature und optional humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContact====&lt;br /&gt;
Hier können alle Kontakt Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDcontact Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das optische und magnetische Kontaktsensoren vom HomeMatic. HM-SEC-SCO und HM-SEC-SC-2.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;model=HM-SEC-SC(O|-2)&#039;&#039;&#039; eingetragen um alle diese Kontaktsensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Kontaktsensoren mit ihren Namen im Internal SENSORSCONTACT des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Kontaktsensor folgende Attribute im Attribut userattr hinzugefügt:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====HomeContactType=====&lt;br /&gt;
Typ des Kontakts - wird versucht anhand des Namen/Alias beim Hinzufügen zum HOMEMODE Device zu ermitteln, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: doorinside,dooroutside,doormain,window&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: window&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Kontaktsensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModes=====&lt;br /&gt;
Regex der Mode(s) des HOMEMODE Device in denen keine Offen Warnungen erfolgen sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist ein Kontakt geöffnet während die hier eingestellten Mode(s) eintreten, so wird der noch bestehende Timer abgebrochen. Entgegengesetzt startet er wieder sobal die hier eingestellten Mode(s) verlassen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist hier z.B. &amp;quot;gotosleep|asleep&amp;quot; eingestellt, so kann man z.B. das Fenster schon vor dem Auslösen von gotosleep oder asleep öffnen und der bestehende Offenwarnung-Timer wird dann abgebrochen. Sobald man am Morgen z.B. awoken oder home auslöst, so wird ein neuer Timer gestartet der einen dann an das noch offene Fenster erinnert.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle Modes des HOMEMODE Device&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModesResidents=====&lt;br /&gt;
Devspec der ROOMMATE/GUEST Devices deren Status statt der Modes des HOMEMODE Device für Attribut HomeOpenDontTriggerModes benutzt werden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle überwachten ROOMMATE/GUEST&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenMaxTrigger=====&lt;br /&gt;
Maximale Anzahl an Warnmeldungen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ganze Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimes=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimesDividers=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactOpenTimeDividers des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2 1 2 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsContactReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactReadings====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeDividers====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeOpenTimesDividers in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 2 1 2 2.5 (für 4 Jahreszeiten)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeMin====&lt;br /&gt;
Minimale Zeit in Minuten die mindestens für eine Offenwarnung gewartet werden soll - im Falle dass sich durch den Teiler evtl. zu kleine Werte ergeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: eine Zahle mit max. einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimes====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 7.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminance====&lt;br /&gt;
Devspec von (Innen-)Lichtsensoren deren Durchschnittswert berechnet werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotion====&lt;br /&gt;
Hier können alle Bewegungs Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDmotion Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Motion Sensor Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0801-1001|010f-0800-1001&#039;&#039;&#039; eingetragen um alle diese Bewegungssensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Damit bei den Gen5 Sensoren auch das open im reading state steht, habe ich mir bei diesen Sensoren ein userReading angelegt.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Bewegungssensoren mit ihren Namen im Internal SENSORSMOTION des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Bewegungssensor folgende Attribute im Attribut userattr hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Bewegungssensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsMotionReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeSensorLocation=====&lt;br /&gt;
Standort des Bewegungssensors (außen oder innen) - wird standardmäßig beim Hinzufügen zum HOMEMODE Device auf &amp;quot;inside&amp;quot; gesetzt, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: inside,outside&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: inside&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsMotionValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionReadings====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergy====&lt;br /&gt;
Hier können alle Energie Sensoren als Devspec hinterlegt werden. Diese müssen die beiden Readings power und energy besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Anhand dieser Readings wird dann der Gesamtverbrauch und die derzeitige gesamte Leistungsaufnahme berechnet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Wall Plugs Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0600-1000|010f-0602-1001&#039;&#039;&#039; eingetragen um alle diese Energie Sensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec mit vorhandenen energy und power Readings&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmoke====&lt;br /&gt;
Devspec mit Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorWindspeed====&lt;br /&gt;
Sensor für Windgeschwindigkeit&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors und Reading der Windgeschwindigkeit separiert mit : (z.B. ga_Windsensor:wind)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBattery====&lt;br /&gt;
Devspec von Batteriesensoren mit einem Reading &amp;quot;battery&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerAnyoneElseAtHome====&lt;br /&gt;
auslösendes Gerät für anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn:valueOff&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerPanic====&lt;br /&gt;
auslösendes Gerät für Panikalarm&amp;lt;br&amp;gt;&lt;br /&gt;
valueOff ist optional, wird es weggelassen, so fungiert valueOn als toggle&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn[:valueOff]&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTwilightDevice====&lt;br /&gt;
Hier ist der Name des lokalen Twilight Device anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich die Platzhalter &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039;, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; in den HomeCMD Attributen zur Verfügung. &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039; wird dann durch das Reading light, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; durch das Reading twilight und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; durch das aktuelle Twilight Event ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeUWZ====&lt;br /&gt;
Hier ist der Name des lokalen UWZ Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%UWZ%&#039;&#039;&#039;, &#039;&#039;&#039;%UWZSHORT%&#039;&#039;&#039; und &#039;&#039;&#039;%UWZLONG%&#039;&#039;&#039; sind verfügbar in allen HomeCMD Attributen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des UWZ Geräts&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeYahooWeatherDevice====&lt;br /&gt;
Hier ist der Name des lokalen Yahoo Weather Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich einige Platzhalter zur Verfügung. Für die genaue Beschreibung derer siehe &amp;quot;Platzhalter&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
===HomeText Attribute===&lt;br /&gt;
Die HomeText Attribute sind größtenteils zur Übersetzung einiger benötigter Begriffe gedacht.&amp;lt;br&amp;gt;&lt;br /&gt;
In den speziellen Attributen die mit HomeTextWeather anfangen, sind ganze Texte mit entsprechenden Platzhaltern einzufügen.&lt;br /&gt;
&lt;br /&gt;
====HomeTextAndAreIs====&lt;br /&gt;
Übersetzung für &amp;quot;and&amp;quot;, &amp;quot;are&amp;quot; und &amp;quot;is&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort/Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: and|are|is&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 und|sind|ist&lt;br /&gt;
&lt;br /&gt;
====HomeTextClosedOpen====&lt;br /&gt;
Übersetzung für &amp;quot;closed&amp;quot; und &amp;quot;open&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: closed|open&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 geschlossen|geöffnet&lt;br /&gt;
&lt;br /&gt;
====HomeTextNosmokeSmoke====&lt;br /&gt;
Übersetzung für &amp;quot;no smoke&amp;quot; und &amp;quot;smoke&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: no smoke|smoke&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 kein Rauch|Rauch&lt;br /&gt;
&lt;br /&gt;
====HomeTextRisingConstantFalling====&lt;br /&gt;
Übersetzung für &amp;quot;rising&amp;quot;, &amp;quot;constant&amp;quot; und &amp;quot;falling&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: rising|constant|falling&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 steigend|gleichbleibend|fallend&lt;br /&gt;
&lt;br /&gt;
====HomeTextTodayTomorrowAfterTomorrow====&lt;br /&gt;
Übersetzung für &amp;quot;today&amp;quot;, &amp;quot;tomorrow&amp;quot; und &amp;quot;day after tomorrow&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: today|tomorrow|day after tomorrow&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Heute|Morgen|Übermorgen&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherNoForecast====&lt;br /&gt;
Übersetzung für &amp;quot;No forecast available&amp;quot; - Text wenn keine Wettervorhersage verfügbar ist&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: No forecast available&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es ist leider keine Wettervorhersage für den angegebenen Tag verfügbar!&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastInSpecDays====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage in 4-10 Tagen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 In %DAY% Tagen %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastToday====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für heute&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C. Aktuelle Temperatur %TEMPERATURE%°C bei einer Luftfeuchtigkeit von %HUMIDITY%%. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastTomorrow====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für morgen/übermorgen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherLong====&lt;br /&gt;
Langer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es %TOBE% %CONDITION% bei %TEMPERATURE%°C und %HUMIDITY%% Luftfeuchtigkeit. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h. Der Luftdruck ist %PRESSURETREND% bei %PRESSURE%hPa.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherShort====&lt;br /&gt;
Kurzer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %CONDITION%, %TEMPERATURE%°C, %HUMIDITY%% Luftfeuchtigkeit, Luftdruck %PRESSURE%hPa&lt;br /&gt;
&lt;br /&gt;
===weitere Attribute===&lt;br /&gt;
Viele weitere Dinge lassen sich anpassen.&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedDetails====&lt;br /&gt;
mehr Details anzeigen, abhängig von den zu HOMEMODE hinzugefügten Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: none, detail, both, room&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Auswahlliste&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: none&lt;br /&gt;
&lt;br /&gt;
====HomeDaytimes====&lt;br /&gt;
Eigene Tageszeiten als Paare aus Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Zeit|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 00:00|Mitternacht&lt;br /&gt;
 00:05|Nacht&lt;br /&gt;
 06:30|Morgen&lt;br /&gt;
 10:00|Vormittag&lt;br /&gt;
 13:00|Mittag&lt;br /&gt;
 14:30|Nachmittag&lt;br /&gt;
 17:30|Vorabend&lt;br /&gt;
 19:00|Abend&lt;br /&gt;
 23:00|Spätabend&lt;br /&gt;
&lt;br /&gt;
====HomeIcewarningOnOffTemps====&lt;br /&gt;
2 leerzeichenseparierte Temperaturen für das Ein- und Ausschalten der Eiswarnung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei leerzeichenseparierte Temperaturen mit maximal einer Kommastelle&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 2 3&lt;br /&gt;
&lt;br /&gt;
====HomeModeAlarmArmDelay====&lt;br /&gt;
Zeit in Sekunden um das aktivieren der Alarmschaltung zu verzögern.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl (gleiche Verzögerung für alle modeAlarm) oder 3 leerzeichenseparierte Zahlen für jeden modeAlarm (Reihenfolge: armaway armnight armhome)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAtTmpRoom====&lt;br /&gt;
Diesen Raum zu temporäre at(s) hinzufügen die von HOMEMODE generiert werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceAbsentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;absent&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: maximale Anzahl von verfügbaren Presence Geräten für jeden ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDevicePresentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;present&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomePublicIpCheckInterval====&lt;br /&gt;
Interval in Minuten für die Überprüfung der öffentlichen IP-Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0 (deaktiviert)&lt;br /&gt;
&lt;br /&gt;
====HomeSeasons====&lt;br /&gt;
Eigene Jahreszeiten als Paare aus Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Datum|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 03.01|spring 06.01|summer 09.01|autumn 12.01|winter&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 03.01|Frühling&lt;br /&gt;
 06.01|Sommer&lt;br /&gt;
 09.01|Herbst&lt;br /&gt;
 12.01|Winter&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryLowPercentage====&lt;br /&gt;
Prozentsatz um einen Batteriesensor mit geringer Batterie anzuzeigen (nur bei Sensoren die ihren Batteriewert prozentual angeben)&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 50&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryReading====&lt;br /&gt;
Reading der Batteriesensoren welches statt &amp;quot;battery&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: battery&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminanceReading====&lt;br /&gt;
Reading der Lichtsensoren welches statt &amp;quot;luminance&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: luminance&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergyReadings====&lt;br /&gt;
Readings der Power/Energy Sensoren welche statt &amp;quot;power&amp;quot; und &amp;quot;energy&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: 2 leerzeichenseparierte Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: power energy&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeReading====&lt;br /&gt;
Readings der Rauchmelder welche statt &amp;quot;state&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ein Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeValue====&lt;br /&gt;
Regex der Auslösewerte von Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: RegEx&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: on&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialLocation====&lt;br /&gt;
Hier können eigene zusätzliche location(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; location &amp;lt;LOCATION&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialModes====&lt;br /&gt;
Hier können eigene zusätzliche mode(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; mode &amp;lt;MODE&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTrendCalcAge====&lt;br /&gt;
Zeit in Sekunden für das Maximalalter des vorherigen Wertes für die Trendberechnung&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 900&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Teil der Konfiguration ist das Befüllen der HomeCMD Attribute. Da dieses durch die Vermischung von FHEM Code, Perl Code und zusätzlichen Platzhaltern erst einmal sehr befremdlich sein kann, habe ich bei der Beschreibung der HomeCMD Attribute teilweise Beispiele hinzugefügt um den Einstieg weiter zu erleichtern.&lt;br /&gt;
&lt;br /&gt;
==HomeCMD Attribute (mit Beispielen)==&lt;br /&gt;
Die HomeCMD Attribute sind zum Festlegen der jeweiligen Schaltaktionen gedacht und können damit evtl. vorhandene notify/DOIF ablösen. Sie können mit FHEM-Code, Perl-Code oder aber auch mit beidem vermischt befüllt werden (wovon ich allerdings abrate). Zusätzlich sind noch diverse Platzhalter (siehe Platzhalter) verfügbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Perl-Code innerhalb der HomeCMD Attribute gibt es hier Besonderheiten.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
*Im Gegensatz zur FHEM-Eingabezeile müssen hier keine Semikolon verdoppelt werden&lt;br /&gt;
*Kommetarzeilen sind zulässig&lt;br /&gt;
*Kommentare am Ende einer Perl-Zeile sind nicht zulässig&lt;br /&gt;
&lt;br /&gt;
Typischer Weise werden in den HomeCMD Attributen weitere Module angesprochen.&amp;lt;br&amp;gt;&lt;br /&gt;
Z.B. benutze ich für jegliche Form der Benachrichtigung den msg Befehl.&lt;br /&gt;
&lt;br /&gt;
Keines der HomeCMD Attribute hat einen Standardwert. Es müssen alle Befehle selbst programmiert werden.&lt;br /&gt;
&lt;br /&gt;
Platzhalter die Text(e) (string) beinhalten, müssen im Perl-Code in Anführungszeichen gesetzt werden (Beispiel %SENSOR%).&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter die Zahlen beinhalten (int,float) sollten nicht in Anführungszeichen gesetzt werden damit Zahlenvergleiche (mittels ==, &amp;lt;=, &amp;gt;=, &amp;gt;, &amp;lt;) funktionieren (Beispiel %LIGHT%, %ICE% oder %TEMPERATURE%).&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-off====&lt;br /&gt;
Befehle die beim Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Rauchalarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-on====&lt;br /&gt;
Befehle die bei einem Rauchalarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;meldet&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;melden&amp;quot; if (%SMOKECT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %SMOKEHR% $is Rauchalarm!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Sabotage Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-off====&lt;br /&gt;
Befehle die beim Ende eines Sabotage Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Manipulationen wurden beseitigt!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-on====&lt;br /&gt;
Befehle die bei einem Sabotage Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%TAMPEREDCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %TAMPEREDHR% $is sabotiert!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-off====&lt;br /&gt;
Befehle die beim Ende eines Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg ENTWARNUNG: Alle Alarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-on====&lt;br /&gt;
Befehle die bei einem Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%ALARMCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg audio,push,light 3 !!! ALARM !!! %ALARMHR% $is ausgelöst!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome====&lt;br /&gt;
Befehle die beim on/off von anyoneElseAtHome ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-off====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armaway&amp;quot; auf &amp;quot;armhome&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome on&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun niemand anderes mehr zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-on====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armhome&amp;quot; auf &amp;quot;armaway&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder wieder Alarme melden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird anyoneElseAtHome bei Anwesenheit und nicht deaktiviertem HomeAutoAlarmModes aktiviert, so passiert erst einmal nichts, ausser dass die hier angegebenen Befehle ausgeführt werden. Wird dann später die Abwesenheit erkannt, schaltet der Alarm Mode auf &amp;quot;armhome&amp;quot; statt auf &amp;quot;armaway&amp;quot; damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome off&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun noch jemand anderes zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDbatteryLow====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Sensor einen niedrigen Batteriewert meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg;&lt;br /&gt;
   $msg = &amp;quot;Die Batterien von %BATTERYLOW% gehen zur Neige und sollten ausgetauscht werden!&amp;quot; if (%BATTERYLOWCT% == 1);&lt;br /&gt;
   $msg = &amp;quot;Die Batterien bei folgenden Geräten sollten ausgetauscht werden: %BATTERYLOWALL%&amp;quot; if (%BATTERYLOWCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push $msg&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontact====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor geschlossen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geschlossen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor offen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun offen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormain====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor Type doormain open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain wird geschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 { &lt;br /&gt;
   # Wenn es Ankommende gibt&lt;br /&gt;
   if (&amp;quot;%ARRIVERS%&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Zusammenstellen der Begrüßung&lt;br /&gt;
     my $msg = &amp;quot;Gute&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # &amp;quot;n&amp;quot; anhängen wenn Tageszeit nicht Nacht ist&lt;br /&gt;
     $msg .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Leerzeichen einfügen&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # den Feiertag der Tageszeit voranstellen wenn ein Feiertag im Kalender FEIERTAG ist&lt;br /&gt;
     $msg .= &amp;quot;%FEIERTAG%-&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Tageszeit einfügen&lt;br /&gt;
     $msg .= &amp;quot;%DAYTIME% &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # bei ROOMMATE &amp;quot;zu Hause&amp;quot; in Begrüßung einfügen&lt;br /&gt;
     $msg .= &amp;quot;zu Hause &amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; =~ /^rr_/);&lt;br /&gt;
 &lt;br /&gt;
     # Ankommende einfügen&lt;br /&gt;
     $msg .= &amp;quot;%ARRIVERS%&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Begrüßung am Sonos im Flur ausgeben bei Abwesenheit über 60 min&lt;br /&gt;
     fhem &amp;quot;msg audio \@fl_Sonos $msg!&amp;quot; if (%DURABSENCELAST% &amp;gt; 60);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain geöffnet&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geöffnet!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning1====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die erste Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: erste Offenwarnzeit des Kontakts erreicht&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning2====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die zweite Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: ab Erreichen der zweiten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht immer noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarningLast====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die letzte Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Erreichen der letzten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das ist der letzte Hinweis %ALIAS% endlich zu schliessen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald sich die Tageszeit (daytime) auf einen beliebigen Wert ändert.&amp;lt;br&amp;gt;&lt;br /&gt;
Um die jeweilige eingetretene Tageszeit zu ermitteln ist der Platzhalter &#039;&#039;&#039;%DAYTIME%&#039;&#039;&#039; vorgesehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime)&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime-&amp;amp;lt;DAYTIME&amp;amp;gt;====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald die jeweilige Tageszeit (daytime) erreicht ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime) auf bestimmten Wert&amp;lt;br&amp;gt;&lt;br /&gt;
Bei &amp;quot;night&amp;quot; könnte man z.B. die Heizung bewohnerunabhängig ausschalten, bei &amp;quot;morning&amp;quot; wieder ein.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceDisable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceDisable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun deaktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional wirklich attr disable für Device setzen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;attr %DEVICE%:FILTER=disable!=1 disable 1; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf gone/none setzen wenn Presence Devices deaktiviert werden&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     my $resident = $1;&lt;br /&gt;
     my $gone = $resident =~ /^rr_/ ? &amp;quot;gone&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set $resident:FILTER=state!=$gone state $gone&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceEnable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceEnable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun aktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional attr disable für Device entfernen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;deleteattr %DEVICE%:FILTER=disable=1 disable; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf home setzen wenn Presence Devices aktiviert werden und anwesend sind&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $1:FILTER=state!=home state home&amp;quot; if (ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;present&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd====&lt;br /&gt;
Befehle die beim Anfang/Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%DND%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun eingeschaltet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun beendet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-off====&lt;br /&gt;
Befehle die beim Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-on====&lt;br /&gt;
Befehle die beim Beginn des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun eingeschaltet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent====&lt;br /&gt;
Befehle die beim Beginn eines beliebigen (holiday)Kalender Events ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten on&amp;quot; if (&amp;quot;%EVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-each====&lt;br /&gt;
Befehle die beim Beginn/Ende eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-URLAUBDAN-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Dan hat jetzt Urlaub!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Der Urlaub von Dan ist nun zu Ende!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-WOHNUNG-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Heizung an/aus schalten&lt;br /&gt;
   my $heiz = &amp;quot;([bksw]z|ku)_Thermostat&amp;quot;;&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /^heizung(..+)?$/i)&lt;br /&gt;
   {&lt;br /&gt;
     my $zeit = $1;&lt;br /&gt;
     if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
 &lt;br /&gt;
       # morgens nicht alle Thermostaten schalten&lt;br /&gt;
       $heiz = &amp;quot;([bks]z|ku)_Thermostat&amp;quot; if ($zeit &amp;amp;&amp;amp; $zeit =~ /morgens?$/i);&lt;br /&gt;
       fhem &amp;quot;set $heiz:FILTER=controlMode!=day controlMode day&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^heizung/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $heiz:FILTER=controlMode!=night controlMode night&amp;quot; if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # WLAN an/aus schalten&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi off&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi on&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Putzfrau (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Gast (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-begin====&lt;br /&gt;
Befehle die beim Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-Neujahr-begin&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set %SENSORSENERGY% meterReset&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-end====&lt;br /&gt;
Befehle die bei Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemDEFINED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn ein neues Gerät angelegt wird (define)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Jedem neu definierten Gerät den Geräte-TYPE auch als Raum im Menüpunkt Module zuweisen&lt;br /&gt;
   fhem &amp;quot;attr %DEFINED% room Module-&amp;gt;&amp;quot;.InternalVal(&amp;quot;%DEFINED%&amp;quot;,&amp;quot;TYPE&amp;quot;,&amp;quot;default&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemINITIALIZED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn FHEM gestartet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg FHEM Home wurde gestartet...&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemSAVE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn in FHEM die Konfigurationsdatei gespeichert wird&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel (Backup von fhem.cfg und fhem.state):&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Datum/Uhrzeit&lt;br /&gt;
   my $now = Timeow();&lt;br /&gt;
   # Leerzeichen durch Unterstriche ersetzen&lt;br /&gt;
   $now =~ s/ /_/g;&lt;br /&gt;
   # Backup der Datei fhem.cfg&lt;br /&gt;
   `cp $attr{global}{configfile} ./backup/fhem.cfg.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.cfg.$now&amp;quot;;&lt;br /&gt;
   # Backup der Datei fhem.state&lt;br /&gt;
   `cp $attr{global}{statefile} ./backup/fhem.state.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.state.$now&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemUPDATE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn das Update von FHEM ausgeführt wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das Update für FHEM ist beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning====&lt;br /&gt;
Befehle die bei Anfang/Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0/1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%ICE%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg push ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!.&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-off====&lt;br /&gt;
Befehle die bei Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-on====&lt;br /&gt;
Befehle die bei Beginn der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation====&lt;br /&gt;
Befehle die beim Ändern der location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation-&amp;amp;lt;LOCATION&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf eine bestimmte location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmte location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode====&lt;br /&gt;
Befehle die beim Ändern von mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-absent-belated====&lt;br /&gt;
Befehle die nachträglich zur Abwesenheit ausgeführt werden sollen, die Zeit kann im Atteribut &amp;quot;HomeModeAbsentBelatedTime&amp;quot; eingestellt werden&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Abwesenheit + XX min&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten mode&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-absent&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set HarmonyHub:FILTER=activity!=PowerOff activity PowerOff;&lt;br /&gt;
 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 set TYPE=SONOSPLAYER:FILTER=Volume&amp;gt;0 Volume 0;&lt;br /&gt;
 set Sonos stopAll;&lt;br /&gt;
 sleep 3;&lt;br /&gt;
 set Wohnung [FILTER=state!=off] off&amp;quot;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 define atTmp_wz_Media_aus_%SELF% at +01:00:00 set HarmonyHub:FILTER=currentActivity!=PowerOff activity PowerOff;&lt;br /&gt;
 define atTmp_wz_Venti_aus_%SELF% at +01:00:00 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 define atTmp_wzLS_aus_%SELF% at +00:30:00 set wz_LS scene aus;&lt;br /&gt;
 define atTmp_all_Sonos_vol_down_%SELF% at +00:02:00 set TYPE=SONOSPLAYER:FILTER=Volume!=0 Volume 0 1;&lt;br /&gt;
 define atTmp_all_Sonos_off_%SELF% at +00:02:30 set Sonos stopAll;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=off off;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=on on&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-gone&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlManu off&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen beliebigen Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von beliebigem Resident ausgelöst&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 msg audio @%AUDIO% Guten Nacht und schlaf&#039; gut %ALIAS%!&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg = &amp;quot;Guten&amp;quot;;&lt;br /&gt;
   $msg .= &amp;quot; %FEIERTAG%&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
   $msg .= &amp;quot; Morgen %ALIAS%&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;msg audio \@%AUDIO% $msg&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;defmod atTmp_wetter_%RESIDENT%_%SELF% at +00:07:00 msg audio Wettervorhersage für heute: %FORECASTTODAY%&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen bestimmten Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von bestimmten Resident ausgelöst&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm====&lt;br /&gt;
Befehle die beim Ändern von modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung modeAlarm&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm-&amp;amp;lt;armaway/armhome/armnight/disarm&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armaway&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%PREVAMODE%&amp;quot; eq &amp;quot;disarm&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Alarmanlage einschalten&lt;br /&gt;
     fhem &amp;quot;set AA_Arm:FILTER=level!=100 alarmLevel armAll&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht zusammensetzen&lt;br /&gt;
     my $msg;&lt;br /&gt;
     $msg .= &amp;quot;Die Alarmanlage ist nun scharf geschaltet!&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
     my $is = &amp;quot;%ALARMHR%&amp;quot; =~ /und/ ? &amp;quot;sind&amp;quot; : &amp;quot;ist&amp;quot;;&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot; if ($msg);&lt;br /&gt;
     $msg .= &amp;quot;ACHTUNG: %ALARMHR% $is noch offen!!!&amp;quot; if (%ALARMCT%);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an ROOMMATE/GUEST senden&lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 &lt;br /&gt;
     # Eingangstür abschließen falls noch nicht geschehen&lt;br /&gt;
     fhem &amp;quot;set fl_Tuerschloss:FILTER=state!=locked lock&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armhome&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armnight&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-disarm&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Alarmanlage ausschalten&lt;br /&gt;
   fhem &amp;quot;set AA_Arm:FILTER=level!=0 alarmLevel disarmed&amp;quot;;&lt;br /&gt;
   my $prio = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # Nachrichtenpriorität auf 1 setzen bei Ankunft (höhere Lautstärke beim Abspielen damit man das auch vor der Tür hört)&lt;br /&gt;
   $prio = &amp;quot; 1&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; eq &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht an ROOMMATE/GUEST senden wenn der vorherige alarmMode nicht &amp;quot;armnight&amp;quot; ist&lt;br /&gt;
   fhem &amp;quot;msg audio \@fl_Sonos$prio Die Alarmanlage ist nun ausgeschaltet %ALIAS%!&amp;quot; if (&amp;quot;%PREVAMODE%&amp;quot; ne &amp;quot;armnight&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion====&lt;br /&gt;
Befehle die bei Statusänderung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: öffnen/schließen eines beliebigen Bewegungsmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Raum aus Sensornamen ermitteln, z.B. bz_Sensor&lt;br /&gt;
   my $room = (split /_/,&amp;quot;%SENSOR%&amp;quot;)[0];&lt;br /&gt;
 &lt;br /&gt;
   # Status des structure aller Lichter dieses Raums&lt;br /&gt;
   my $lichter = Value($room.&amp;quot;_Lichter&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Status des dummy Tageslicht&lt;br /&gt;
   my $tl = Value(&amp;quot;Tageslicht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   if (&amp;quot;%STATE%&amp;quot; eq &amp;quot;geöffnet&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Lichtwert des Sensors&lt;br /&gt;
     my $lum = ReadingsNum(&amp;quot;%SENSOR%&amp;quot;,&amp;quot;luminance&amp;quot;,100);&lt;br /&gt;
 &lt;br /&gt;
     # Löschen des evtl. schon vorhandenen &amp;quot;at&amp;quot;&lt;br /&gt;
     fhem &amp;quot;delete atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot; if (IsDevice(&amp;quot;atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
     # Licht nur wenn kein Tageslicht oder Lichtwert des Sensors kleiner als 10 und AutoLight eingeschaltet und modeAlarm nicht armaway&lt;br /&gt;
     if (($tl eq &amp;quot;off&amp;quot; || $lum &amp;lt; 10) &amp;amp;&amp;amp; $lichter eq &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot; &amp;amp;&amp;amp; &amp;quot;%AMODE%&amp;quot; ne &amp;quot;armaway&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $scene;&lt;br /&gt;
 &lt;br /&gt;
       # verschiedene Szenen für verschiedene Modus bzw. Aussenlichtstärken&lt;br /&gt;
       if (&amp;quot;%MODE%&amp;quot; eq &amp;quot;gotosleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Abend&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (&amp;quot;%MODE%&amp;quot; eq &amp;quot;asleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Nacht&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;gt; 3)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;viel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;lt; 4)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;mittel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       # Schalten der entsprechenden Szene (Modul LightScene)&lt;br /&gt;
       fhem &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene $scene&amp;quot; if ($scene);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     # unterschiedliche Ausschaltzeiten für unterschiedliche Räume&lt;br /&gt;
     my $t = 3;&lt;br /&gt;
     $t = 15 if ($room eq &amp;quot;wz&amp;quot;);&lt;br /&gt;
     $t = 2 if ($room eq &amp;quot;bz&amp;quot; || ($room =~ /wz|ku/ &amp;amp;&amp;amp; &amp;quot;%MODE%&amp;quot; =~ /sleep/));&lt;br /&gt;
     $t = 1 if ($room eq &amp;quot;fl&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Zahl in Minuten umrechnen in einen Zeitpunkt für das &amp;quot;at&amp;quot;&lt;br /&gt;
     my $d = HOMEMODE_hourMaker($t);&lt;br /&gt;
 &lt;br /&gt;
     # Anlegen des &amp;quot;at&amp;quot; zum Ausschalten des Lichts wenn die Lichter angeschaltet sind und auch AutoLight eingeschaltet ist&lt;br /&gt;
     if ($lichter ne &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $cmd = &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene aus&amp;quot;;&lt;br /&gt;
       fhem &amp;quot;defmod atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF% at +$d $cmd&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-off====&lt;br /&gt;
Befehle die bei Ende der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-on====&lt;br /&gt;
Befehle die bei Beginn der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set w_Steckdosen [FILTER=state!=on] on;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode auto&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-device====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein beliebiges Presence Device, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebiges Presence Device&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present-device&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # mindestens 1x täglich den Batteriewert des PRESENCE Geräts bei erkannter Anwesenheit holen&lt;br /&gt;
   fhem &#039;&amp;quot;sudo /opt/fhem/scripts/GTag-bat.sh %DEVICE% %ADDRESS% &amp;amp;&amp;quot;&#039;&lt;br /&gt;
     if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE_/ &amp;amp;&amp;amp; (!defined ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,undef) || ReadingsAge(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,0) &amp;gt; 64800));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen beliebigen Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebigen Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-absent-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Mich benachrichtigen wenn ich nicht zu hause bin und jemand anderes die Wohnung verlässt&lt;br /&gt;
   fhem &amp;quot;msg push \@rr_Dan %ALIAS% hat gerade die Wohnung verlassen!&amp;quot;&lt;br /&gt;
     if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot; &amp;amp;&amp;amp; ReadingsVal(&amp;quot;rr_Dan&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) ne &amp;quot;present&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Verabschiedungsnachricht zusammensetzen&lt;br /&gt;
   my $msg;&lt;br /&gt;
 &lt;br /&gt;
   # Alle außer mich selbst verabschieden&lt;br /&gt;
   $msg .= &amp;quot;Bis bald und auf Wiedersehen %ALIAS%...&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Glättewarnung wenn nötig&lt;br /&gt;
   $msg .= &amp;quot; ACHTUNG!!! Es ist %TEMPERATURE%°C kalt! Somit könnte es glatt werden!&amp;quot; if (%ICE%);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht senden wenn vorhanden&lt;br /&gt;
   fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispielcode für &amp;quot;HomeCMDpresence-present-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # alle Ankommenden außer mir selbst&lt;br /&gt;
   if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Benachrichtigung wenn jemand kommt&lt;br /&gt;
     fhem &amp;quot;msg audio %ALIAS% kommt gerade!&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; ne &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) zusammensetzen&lt;br /&gt;
     my $g = &amp;quot;gute&amp;quot;;&lt;br /&gt;
     $g .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) senden &lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% Willkommen und $g %DAYTIME% %ALIAS%!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmten Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;-&amp;amp;lt;DEVICE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein bestimmtes Presence Device eines bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Dieses Attribut ist nur verfügbar wenn ein Resident mehr als ein Presence Device hat&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmtes Presence Device eines bestimmten Resident&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Jahreszeit&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $t = &amp;quot;%SEASON%&amp;quot;;&lt;br /&gt;
   $t .= &amp;quot;s&amp;quot; if ($t eq &amp;quot;Frühling&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;msg push Die Wohnung ist nun im $t-Modus!&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set Heizungen [FILTER=controlMode!=auto] controlMode auto&amp;quot; if ($t ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason-&amp;amp;lt;SEASON&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit in eine bestimmte Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung bestimmte Jahreszeit&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight====&lt;br /&gt;
Befehle die bei Änderung der Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight-&amp;amp;lt;sr/sr_astro/sr_civil/sr_indoor/sr_weather/ss/ss_astro/ss_civil/ss_indoor/ss_weather&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung zu bestimmter Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung zu bestimmter Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn====&lt;br /&gt;
Befehle die bei Beginn/Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn/Ende der UWZ Warnungen&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-begin====&lt;br /&gt;
Befehle die bei Beginn der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg %UWZLONG%&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-end====&lt;br /&gt;
Befehle die beim Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg Alle Unwetterwarnungen sind nun beendet!&lt;br /&gt;
&lt;br /&gt;
=Platzhalter=&lt;br /&gt;
==verfügbar in allen HomeCMD Attributen==&lt;br /&gt;
===%ADDRESS%===&lt;br /&gt;
MAC Adresse des zuletzt ausgelösten Presence Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALARM%===&lt;br /&gt;
Liste mit Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&lt;br /&gt;
&lt;br /&gt;
===%ALARMCT%===&lt;br /&gt;
Anzahl der ausgelösten Alarm Geräte&lt;br /&gt;
&lt;br /&gt;
===%ALARMHR%===&lt;br /&gt;
Liste mit (human readable) Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für msg benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
Alias des zuletzt ausgelösten Resident&lt;br /&gt;
&lt;br /&gt;
===%AMODE%===&lt;br /&gt;
aktueller Alarm Mode&lt;br /&gt;
&lt;br /&gt;
===%AEAH%===&lt;br /&gt;
Wert von anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 1 wenn on und 0 wenn off&lt;br /&gt;
&lt;br /&gt;
===%ARRIVERS%===&lt;br /&gt;
Alias-Liste der ROOMMATE/GUEST deren location auf arrival steht&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Residents zu begrüßen&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. Peter, Paul und Marry&lt;br /&gt;
&lt;br /&gt;
===%AUDIO%===&lt;br /&gt;
Audio Device des zuletzt ausgelösten ROOMMATE/GUEST (Attribut msgContactAudio)&amp;lt;br&amp;gt;&lt;br /&gt;
wenn das Attribut msgContactAudio des jeweiligen Resident keinen Wert hat, so wird versucht den Wert des Attributs aus dem globalMsg (sofern vorhanden) auszulesen&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Resident spezifische msg(s) vom Typ audio zu senden, z.B. Nacht/Morgen Grüße/Wünsche&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOW%===&lt;br /&gt;
Alias des zu letzt gemeldeten Geräts mit niedrigem Batteriestand&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWALL%===&lt;br /&gt;
Wert des Reading batteryLow_hr&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWCT%===&lt;br /&gt;
Wert des Reading batteryLow_ct&lt;br /&gt;
&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Reading condition des überwachten Yahoo weather Device&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für Wetter(vorhersage) benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%CONTACT%===&lt;br /&gt;
Wert des Reading lastContact (Name des zuletzt geöffneten Kontakt Sensor)&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um msg zu versenden&lt;br /&gt;
&lt;br /&gt;
===%DAYTIME%===&lt;br /&gt;
Wert des Reading daytime&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Tageszeit spezifische Aktionen zu schalten&lt;br /&gt;
&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
Name des zuletzt ausgelösten Presence Gerät&lt;br /&gt;
&lt;br /&gt;
===%DEVICEA%===&lt;br /&gt;
Wert des Reading lastAbsentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DEVICEP%===&lt;br /&gt;
Wert des Reading lastPresentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DISABLED%===&lt;br /&gt;
Wert des Reading devicesDisabled&lt;br /&gt;
&lt;br /&gt;
===%DND%===&lt;br /&gt;
DND Status&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn an, 0 wenn aus&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCE%===&lt;br /&gt;
Wert des Reading durTimerAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCELAST%===&lt;br /&gt;
Wert des Reading lastDurAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCE%===&lt;br /&gt;
Wert des Reading durTimerPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCELAST%===&lt;br /&gt;
Wert des Reading lastDurPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEP%===&lt;br /&gt;
Wert des Reading durTimerSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEPLAST%===&lt;br /&gt;
Wert des Reading lastDurSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME&amp;gt;%===&lt;br /&gt;
Event des benannten Kalenders&amp;lt;br&amp;gt;&lt;br /&gt;
0 wenn kein gerade kein Event ist&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME-EVENTNAME&amp;gt;%===&lt;br /&gt;
0 wenn das benannte Event nicht aktiv ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn das benannte Event aktiv ist&lt;br /&gt;
&lt;br /&gt;
===%FORECAST%===&lt;br /&gt;
Wettervorhersage für morgen&lt;br /&gt;
&lt;br /&gt;
===%FORECASTTODAY%===&lt;br /&gt;
Wettervorhersage für heute&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITY%===&lt;br /&gt;
Wert des Reading humidity von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITYTREND%===&lt;br /&gt;
Wert des Reading humidityTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%ICE%===&lt;br /&gt;
0 wenn keine Eiswarnung besteht&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn Eiswarnung besteht&lt;br /&gt;
&lt;br /&gt;
===%IP%===&lt;br /&gt;
Wert des Reading publicIP von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LIGHT%===&lt;br /&gt;
Wert des Reading light von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATION%===&lt;br /&gt;
Wert des Reading location von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATIONR%===&lt;br /&gt;
Wert des Reading location des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCE%===&lt;br /&gt;
Wert des Reading luminance von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCETREND%===&lt;br /&gt;
Wert des Reading luminanceTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%MODE%===&lt;br /&gt;
gerade aktiver Modus von HOMEMODE (Reading mode)&lt;br /&gt;
&lt;br /&gt;
===%MODEALARM%===&lt;br /&gt;
aktueller Alarm Mode (wie %AMODE%)&lt;br /&gt;
&lt;br /&gt;
===%MOTION%===&lt;br /&gt;
Wert des Reading lastMotion von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%NAME%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %SELF%)&lt;br /&gt;
&lt;br /&gt;
===%OPEN%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENCT%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENHR%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PANIC%===&lt;br /&gt;
0 wenn panic ausgeschaltet ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn panic eingeschaltet ist&lt;br /&gt;
&lt;br /&gt;
===%RESIDENT%===&lt;br /&gt;
Name des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PRESENT%===&lt;br /&gt;
presence von HOMEMODE&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESENTR%===&lt;br /&gt;
presence des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESSURE%===&lt;br /&gt;
Wert des Reading pressure von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PRESSURETREND%===&lt;br /&gt;
Wert des Reading pressureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVAMODE%===&lt;br /&gt;
vorheriger modeAlarm von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVCONTACT%===&lt;br /&gt;
vorheriger geöffneter Kontaktsensor&lt;br /&gt;
&lt;br /&gt;
===%PREVMODE%===&lt;br /&gt;
vorheriger mode von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVMODER%===&lt;br /&gt;
vorheriger state des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PREVMOTION%===&lt;br /&gt;
vorheriger geöffneter Bewegungsmelder&lt;br /&gt;
&lt;br /&gt;
===%SEASON%===&lt;br /&gt;
Wert des Reading season von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SELF%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %NAME%)&lt;br /&gt;
&lt;br /&gt;
===%SENSORSBATTERY%===&lt;br /&gt;
Liste aus Internal SENSORSBATTERY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSCONTACT%===&lt;br /&gt;
Liste aus Internal SENSORSCONTACT&lt;br /&gt;
&lt;br /&gt;
===%SENSORSENERGY%===&lt;br /&gt;
Liste aus Internal SENSORSENERGY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSMOTION%===&lt;br /&gt;
Liste aus Internal SENSORSMOTION&lt;br /&gt;
&lt;br /&gt;
===%SENSORSSMOKE%===&lt;br /&gt;
Liste aus Internal SENSORSSMOKE&lt;br /&gt;
&lt;br /&gt;
===%SMOKE%===&lt;br /&gt;
Wert des Reading alarmSmoke von HOMEMODE&lt;br /&gt;
0 wenn kein Alarm&lt;br /&gt;
&lt;br /&gt;
===%SMOKECT%===&lt;br /&gt;
Wert des Reading alarmSmoke_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SMOKEHR%===&lt;br /&gt;
Wert des Reading alarmSmoke_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPERED%===&lt;br /&gt;
Wert des Reading sensorsTampered von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDCT%===&lt;br /&gt;
Wert des Reading sensorsTampered_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDHR%===&lt;br /&gt;
Wert des Reading sensorsTampered_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURE%===&lt;br /&gt;
Wert des Reading temperature von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURETREND%===&lt;br /&gt;
Wert des Reading temperatureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TOBE%===&lt;br /&gt;
are/sind oder is/ist der Wetterkondition&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHT%===&lt;br /&gt;
Wert des Reading twilight von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHTEVENT%===&lt;br /&gt;
aktuelles twilight Event&lt;br /&gt;
&lt;br /&gt;
===%UWZ%===&lt;br /&gt;
UWZ Warnlevel&lt;br /&gt;
&lt;br /&gt;
===%UWZLONG%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (lange Version)&lt;br /&gt;
&lt;br /&gt;
===%UWZSHORT%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (kurze Version)&lt;br /&gt;
&lt;br /&gt;
===%WEATHER%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather short&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WEATHERLONG%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather long&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WIND%===&lt;br /&gt;
Wert des Reading wind von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%WINDCHILL%===&lt;br /&gt;
Wert des Reading wind_chill vom eingebundenen Yahoo Wetter Gerät&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDcontact, HomeCMDmotion und HomeCMDalarm Attributen==&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%SENSOR%===&lt;br /&gt;
name des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%STATE%===&lt;br /&gt;
state des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeTextWeatherForecast Attributen==&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Readings condition des Yahoo Weather Geräts&lt;br /&gt;
&lt;br /&gt;
===%DAY%===&lt;br /&gt;
Tag der Wettervorhersage (1 - heute, 2 - morgen)&lt;br /&gt;
&lt;br /&gt;
===%HIGH%===&lt;br /&gt;
maximale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
===%LOW%===&lt;br /&gt;
minimale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDevent Attributen==&lt;br /&gt;
===%CALENDAR%===&lt;br /&gt;
Name der Kalenders&lt;br /&gt;
&lt;br /&gt;
===%DESCRIPTION%===&lt;br /&gt;
Beschreibung des aktuellen Event des Kalenders (nicht verfügbar bei holiday Geräten)&lt;br /&gt;
&lt;br /&gt;
===%EVENT%===&lt;br /&gt;
Name/Titel des aktuellen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
===%PREVEVENT%===&lt;br /&gt;
Name/Titel des vorherigen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDdevice Attributen==&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
name der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
=Benötigte Events=&lt;br /&gt;
Folgende Events werden von HOMEMODE ausgewertet bzw. werden benötigt damit HOMEMODE vollumfänglich funktionieren kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;DEVICE-TYPE&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;EVENT&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;RESIDENTS&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;ROOMMATE,GUEST&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wayhome&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSCONTACT}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsContactReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSMOTION}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsMotionReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSLUMINANCE}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;luminance&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsLuminanceReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSENERGY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;power&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;energy&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsPowerEnergyReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSBATTERY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;battery&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsBatteryReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomePresenceDeviceType&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeYahooWeatherDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wind&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeTwilightDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;light&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;twilight&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;aktEvent&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorTemperatureOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorHumidityOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeEventsHolidayDevices&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeUWZ&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;WarnCount&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30301</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30301"/>
		<updated>2019-04-30T11:13:21Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die gezeigten Anweisungen basieren noch auf einer alten Version (vor Februar 2016) des Moduls HTTPMOD. Das betrifft insbesondere die gewählten &#039;&#039;readings...&#039;&#039;-Namen. Dieses Namensschema wird u.U. in Zukunft nicht mehr unterstützt.&lt;br /&gt;
Zur Umstellung auf das aktuelle Namensschema (am Beispiel &#039;&#039;Shell&#039;&#039;) bitte folgende Aktionen (Eingabe in das Befehlsfenster!) ausführen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Shell enableControlSet 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Shell upgradeAttributes&amp;lt;/code&amp;gt;&lt;br /&gt;
Im FHEM-Log sollten dann Meldungen auftauchen nach dem Schema &lt;br /&gt;
:&#039;&#039;Shell: upgraded attribute ... to new syntax ...&#039;&#039;&lt;br /&gt;
:&#039;&#039;Shell: dropping readings... from userattr list&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading09Name Erdgas&lt;br /&gt;
attr Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading10Name Wasserstoff&lt;br /&gt;
attr Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30298</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30298"/>
		<updated>2019-04-29T13:40:05Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die gezeigten Anweisungen basieren noch auf einer alten Version (vor Februar 2016) des Moduls HTTPMOD. Das betrifft insbesondere die gewählten &#039;&#039;readings...&#039;&#039;-Namen. Dieses Namensschema wird u.U. in Zukunft nicht mehr unterstützt.&lt;br /&gt;
Zur Umstellung auf das aktuelle Namensschema (am Beispiel &#039;&#039;Shell&#039;&#039;) bitte folgende Aktionen (Eingabe in das Befehlsfenster!) ausführen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Shell enableControlSet 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Shell upgradeAttributes&amp;lt;/code&amp;gt;&lt;br /&gt;
Im FHEM-Log sollten dann Meldungen auftauchen nach dem Schema &lt;br /&gt;
:&#039;&#039;Shell: upgraded attribute ... to new syntax ...&#039;&#039;&lt;br /&gt;
:&#039;&#039;Shell: dropping readings... from userattr list&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading09Name Erdgas&lt;br /&gt;
attr Total reading10Name Wasserstoff&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30297</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30297"/>
		<updated>2019-04-29T12:59:59Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die gezeigten Anweisungen basieren noch auf einer alten Version (vor Februar 2016) des Moduls HTTPMOD. Das betrifft insbesondere die gewählten &#039;&#039;readings...&#039;&#039;-Namen. Dieses Namensschema wird u.U. in Zukunft nicht mehr unterstützt.&lt;br /&gt;
Zur Umstellung auf das aktuelle Namensschema (am Beispiel &#039;&#039;Shell&#039;&#039;) bitte folgende Aktionen (Eingabe in das Befehlsfenster!) ausführen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Shell enableControlSet 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Shell upgradeAttributes&amp;lt;/code&amp;gt;&lt;br /&gt;
Im FHEM-Log sollten dann Meldungen auftauchen nach dem Schema &lt;br /&gt;
:&#039;&#039;Shell: upgraded attribute ... to new syntax ...&#039;&#039;&lt;br /&gt;
:&#039;&#039;Shell: dropping readings... from userattr list&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading09Name Erdgas&lt;br /&gt;
attr Total reading10Name Wasserstoff&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL Ultimate Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
define Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30296</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30296"/>
		<updated>2019-04-29T12:59:02Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die gezeigten Anweisungen basieren noch auf einer alten Version (vor Februar 2016) des Moduls HTTPMOD. Das betrifft insbesondere die gewählten &#039;&#039;readings...&#039;&#039;-Namen. Dieses Namensschema wird u.U. in Zukunft nicht mehr unterstützt.&lt;br /&gt;
Zur Umstellung auf das aktuelle Namensschema (am Beispiel &#039;&#039;Shell&#039;&#039;) bitte folgende Aktionen (Eingabe in das Befehlsfenster!) ausführen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Shell enableControlSet 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Shell upgradeAttributes&amp;lt;/code&amp;gt;&lt;br /&gt;
Im FHEM-Log sollten dann Meldungen auftauchen nach dem Schema &lt;br /&gt;
:&#039;&#039;Shell: upgraded attribute ... to new syntax ...&#039;&#039;&lt;br /&gt;
:&#039;&#039;Shell: dropping readings... from userattr list&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading09Name Erdgas&lt;br /&gt;
attr Total reading10Name Wasserstoff&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading09Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Erdgas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading10Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Wasserstoff&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL Ultimate Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
defmod Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30295</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30295"/>
		<updated>2019-04-29T12:54:40Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die gezeigten Anweisungen basieren noch auf einer alten Version (vor Februar 2016) des Moduls HTTPMOD. Das betrifft insbesondere die gewählten &#039;&#039;readings...&#039;&#039;-Namen. Dieses Namensschema wird u.U. in Zukunft nicht mehr unterstützt.&lt;br /&gt;
Zur Umstellung auf das aktuelle Namensschema (am Beispiel &#039;&#039;Shell&#039;&#039;) bitte folgende Aktionen (Eingabe in das Befehlsfenster!) ausführen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Shell enableControlSet 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Shell upgradeAttributes&amp;lt;/code&amp;gt;&lt;br /&gt;
Im FHEM-Log sollten dann Meldungen auftauchen nach dem Schema &lt;br /&gt;
:&#039;&#039;Shell: upgraded attribute ... to new syntax ...&#039;&#039;&lt;br /&gt;
:&#039;&#039;Shell: dropping readings... from userattr list&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL Ultimate Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
defmod Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30294</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30294"/>
		<updated>2019-04-29T12:52:30Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die gezeigten Anweisungen basieren noch auf einer alten Version (vor Februar 2016) des Moduls HTTPMOD. Das betrifft insbesondere die gewählten &#039;&#039;readings...&#039;&#039;-Namen. Dieses Namensschema wird u.U. in Zukunft nicht mehr unterstützt.&lt;br /&gt;
Zur Umstellung auf das aktuelle Namensschema (am Beispiel &#039;&#039;Shell&#039;&#039;) bitte folgende Aktionen (Eingabe in das Befehlsfenster!) ausführen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Shell enableControlSet 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Shell upgradeAttributes&amp;lt;/code&amp;gt;&lt;br /&gt;
Im FHEM-Log sollten dann Meldungen auftauchen nach dem Schema &lt;br /&gt;
:&#039;&#039;Shell: upgraded attribute ... to new syntax ...&#039;&#039;&lt;br /&gt;
:&#039;&#039;Shell: dropping readings... from userattr list&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL Ultimate Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
defmod Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30293</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30293"/>
		<updated>2019-04-29T12:44:58Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: added Esso, added station specific gas and changed numbered regex&amp;#039; to named regex&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die gezeigten Anweisungen basieren noch auf einer alten Version (vor Februar 2016) des Moduls HTTPMOD. Das betrifft insbesondere die gewählten &#039;&#039;readings...&#039;&#039;-Namen. Dieses Namensschema wird u.U. in Zukunft nicht mehr unterstützt.&lt;br /&gt;
Zur Umstellung auf das aktuelle Namensschema (am Beispiel &#039;&#039;Shell&#039;&#039;) bitte folgende Aktionen (Eingabe in das Befehlsfenster!) ausführen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Shell enableControlSet 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Shell upgradeAttributes&amp;lt;/code&amp;gt;&lt;br /&gt;
Im FHEM-Log sollten dann Meldungen auftauchen nach dem Schema &lt;br /&gt;
:&#039;&#039;Shell: upgraded attribute ... to new syntax ...&#039;&#039;&lt;br /&gt;
:&#039;&#039;Shell: dropping readings... from userattr list&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading06Name AralUltimate102&lt;br /&gt;
attr Aral reading07Name ARALUltimateDiesel&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Ultimate.102&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL Ultimate Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: AralSuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&lt;br /&gt;
defmod Esso HTTPMOD http://www.clever-tanken.de/tankstelle_details/17413 600&lt;br /&gt;
attr Esso enableControlSet 1&lt;br /&gt;
attr Esso reading01Name Diesel&lt;br /&gt;
attr Esso reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading02Name SuperE5&lt;br /&gt;
attr Esso reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading03Name SuperE10&lt;br /&gt;
attr Esso reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading04Name EssoSuperPlus&lt;br /&gt;
attr Esso reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Esso.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso reading05Name Autogas&lt;br /&gt;
attr Esso reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Esso stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: EssoSuperPlus&lt;br /&gt;
attr Esso timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30292</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30292"/>
		<updated>2019-04-29T12:29:05Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die gezeigten Anweisungen basieren noch auf einer alten Version (vor Februar 2016) des Moduls HTTPMOD. Das betrifft insbesondere die gewählten &#039;&#039;readings...&#039;&#039;-Namen. Dieses Namensschema wird u.U. in Zukunft nicht mehr unterstützt.&lt;br /&gt;
Zur Umstellung auf das aktuelle Namensschema (am Beispiel &#039;&#039;Shell&#039;&#039;) bitte folgende Aktionen (Eingabe in das Befehlsfenster!) ausführen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Shell enableControlSet 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Shell upgradeAttributes&amp;lt;/code&amp;gt;&lt;br /&gt;
Im FHEM-Log sollten dann Meldungen auftauchen nach dem Schema &lt;br /&gt;
:&#039;&#039;Shell: upgraded attribute ... to new syntax ...&#039;&#039;&lt;br /&gt;
:&#039;&#039;Shell: dropping readings... from userattr list&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell group Spritpreise&lt;br /&gt;
attr Shell icon tanken&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading05Name ShellVPowerRacing&lt;br /&gt;
attr Shell reading06Name ShellVPowerDiesel&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Racing&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Shell.V-Power.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell room Spritpreise&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total group Spritpreise&lt;br /&gt;
attr Total icon tanken&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading05Name LKWDiesel&lt;br /&gt;
attr Total reading06Name TESuperPlus&lt;br /&gt;
attr Total reading07Name TEDiesel&lt;br /&gt;
attr Total reading08Name Autogas&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;LKW-Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading06Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Super.Plus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading07Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Total.Excellium.Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading08Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total room Spritpreise&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral group Spritpreise&lt;br /&gt;
attr Aral icon tanken&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading04Name AralSuperPlus&lt;br /&gt;
attr Aral reading05Name Autogas&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;ARAL.Superplus&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading05Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Autogas&amp;lt;[\d\D]{600,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral room Spritpreise&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30291</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30291"/>
		<updated>2019-04-29T12:01:35Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die gezeigten Anweisungen basieren noch auf einer alten Version (vor Februar 2016) des Moduls HTTPMOD. Das betrifft insbesondere die gewählten &#039;&#039;readings...&#039;&#039;-Namen. Dieses Namensschema wird u.U. in Zukunft nicht mehr unterstützt.&lt;br /&gt;
Zur Umstellung auf das aktuelle Namensschema (am Beispiel &#039;&#039;Shell&#039;&#039;) bitte folgende Aktionen (Eingabe in das Befehlsfenster!) ausführen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Shell enableControlSet 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Shell upgradeAttributes&amp;lt;/code&amp;gt;&lt;br /&gt;
Im FHEM-Log sollten dann Meldungen auftauchen nach dem Schema &lt;br /&gt;
:&#039;&#039;Shell: upgraded attribute ... to new syntax ...&#039;&#039;&lt;br /&gt;
:&#039;&#039;Shell: dropping readings... from userattr list&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell group Spritpreise&lt;br /&gt;
attr Shell icon tanken&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell room Spritpreise&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total group Spritpreise&lt;br /&gt;
attr Total icon tanken&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total room Spritpreise&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral group Spritpreise&lt;br /&gt;
attr Aral icon tanken&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading04Name SuperPlus&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral room Spritpreise&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30290</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30290"/>
		<updated>2019-04-29T12:00:59Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die gezeigten Anweisungen basieren noch auf einer alten Version (vor Februar 2016) des Moduls HTTPMOD. Das betrifft insbesondere die gewählten &#039;&#039;readings...&#039;&#039;-Namen. Dieses Namensschema wird u.U. in Zukunft nicht mehr unterstützt.&lt;br /&gt;
Zur Umstellung auf das aktuelle Namensschema (am Beispiel &#039;&#039;Shell&#039;&#039;) bitte folgende Aktionen (Eingabe in das Befehlsfenster!) ausführen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Shell enableControlSet 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Shell upgradeAttributes&amp;lt;/code&amp;gt;&lt;br /&gt;
Im FHEM-Log sollten dann Meldungen auftauchen nach dem Schema &lt;br /&gt;
:&#039;&#039;Shell: upgraded attribute ... to new syntax ...&#039;&#039;&lt;br /&gt;
:&#039;&#039;Shell: dropping readings... from userattr list&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell group Spritpreise&lt;br /&gt;
attr Shell icon tanken&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Shell room Spritpreise&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total group Spritpreise&lt;br /&gt;
attr Total icon tanken&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Total room Spritpreise&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral group Spritpreise&lt;br /&gt;
attr Aral icon tanken&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading04Name SuperPlus&lt;br /&gt;
attr Aral reading01Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Diesel&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading02Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E5&amp;lt;[\d\D]{200,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading03Regex &amp;quot;price-type-name&amp;quot;&amp;gt;Super.E10&amp;lt;[\d\D]{700,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral reading04Regex &amp;quot;price-type-name&amp;quot;&amp;gt;SuperPlus&amp;lt;[\d\D]{200,900}&amp;quot;current-price-.&amp;quot;&amp;gt;(\d.\d\d)&lt;br /&gt;
attr Aral room Spritpreise&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Import_von_Code_Snippets&amp;diff=30264</id>
		<title>Import von Code Snippets</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Import_von_Code_Snippets&amp;diff=30264"/>
		<updated>2019-04-25T11:43:27Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* Vorgehensweise beim Import */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sorgfältig vorbereitete Code Snippets, mit exportdevice erzeugter Code oder mit &#039;&#039;&#039;Raw definition&#039;&#039;&#039; ausgegebene Gerätedefinitionen können im FHEMWEB-Frontend über &#039;&#039;&#039;Raw definition&#039;&#039;&#039; importiert werden.&lt;br /&gt;
{{Hinweis|Wie das [[Konfiguration#Befehl-Eingabefeld|Befehl-Eingabefeld]] unterstützt auch das Dialogfeld zur RAW-Definition Syntax highlighting und die geänderten bzw. importierten Anweisungen werden bei der Ausführung einer Syntaxprüfung unterzogen. So lassen sich eventuelle Fehler häufig schnell erkennen.}} &lt;br /&gt;
&lt;br /&gt;
{{Randnotiz|RNTyp=r|RNText=Der Weg über den RAW-Import macht insbesondere das direkte Editieren der &#039;&#039;&#039;fhem.cfg&#039;&#039;&#039; überflüssig. Neben dem bereits genannten Syntax-Check hat der Weg über den RAW-Import v.a. auch den Vorteil, dass die Änderungen direkt &#039;&#039;on the fly&#039;&#039; ausgeführt werden, was insbesondere auch das Testen der Änderungen vor dem Speichern in die [[Konfiguration]] im laufenden System ermöglicht.}}&lt;br /&gt;
==Wie finde ich Raw definition?==&lt;br /&gt;
Es gibt zwei Wege, Dialogfelder zur Eingabe von RAW-Code aufzurufen, wobei der erste Weg {{Link2Forum|Topic=82351|LinkText=f18}} als [[FHEMWEB]]-Style voraussetzt&amp;lt;ref&amp;gt;{{Link2Forum|Topic=96921|Message=927192|LinkText=Stand Apr 2019}}&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Button ===&lt;br /&gt;
Um schnell zu einem Eingabefeld für &#039;&#039;&#039;Raw definition&#039;&#039;&#039; zu gelangen, klicken Sie einfach auf das &#039;&#039;&#039;&#039;&#039;+&#039;&#039;&#039;&#039;&#039; neben dem Kommandofeld. Es öffnet sich ein leeres Dialogfeld, in den man RAW-Code direkt eingeben bzw. am Stück eingeben kann.  &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
datei:RAW-Button.png|Ausschnitt mit dem Button&lt;br /&gt;
datei:RAW-Editor-via-Button.png|Geöffnetes Dialogfeld&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Über die Geräte-Detailansicht===&lt;br /&gt;
Zur &#039;&#039;&#039;Raw definition&#039;&#039;&#039; kommt man auch über die Gerätedetailansicht eines beliebigen Gerätes. Der Link &#039;&#039;&#039;Raw definition&#039;&#039;&#039; steht in der letzten Zeile der Seite.&lt;br /&gt;
[[Datei:Raw_definition.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Diesen Weg sollten Sie wählen, wenn Sie Code für andere bereit stellen wollen.&lt;br /&gt;
&lt;br /&gt;
In dem erscheinenden Dialogfeld erscheint auf diesem Weg die RAW-Definition des Geräts, von dem aus Sie den RAW-Editor aufgerufen haben. Diese Anweisungen können Sie entweder ändern oder auch ganz löschen und durch eigene Anweisungen - auch zu ganz anderen Geräten - überschreiben.&lt;br /&gt;
==Erstellen eines Importgerätes==&lt;br /&gt;
Zur Übung kann man dieses Importgerät importieren.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Import dummy&lt;br /&gt;
attr Import group Entwicklung&lt;br /&gt;
attr Import room Entwicklung&lt;br /&gt;
save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Direktzugriff über das FHEM-Menü==&lt;br /&gt;
Der angelegte Import-Dummy kann direkt aufgerufen werden, wenn man einen Meüeintrag anlegt.&lt;br /&gt;
Im entsprechenden FHEMWEB-Gerät das Attribut &#039;&#039;&#039;menuEntries&#039;&#039;&#039; erzeugen mit&lt;br /&gt;
&amp;lt;pre&amp;gt;attr WEB menuEntries CodeImport,/fhem?detail=Import#&amp;lt;/pre&amp;gt;&lt;br /&gt;
oder ergänzen mit&lt;br /&gt;
&amp;lt;pre&amp;gt;CodeImport,/fhem?detail=Import#&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vorgehensweise beim Import==&lt;br /&gt;
Als erstes die Geräteansicht eines beliebigen Gerätes aufrufen, dann den Link &#039;&#039;&#039;Raw definition&#039;&#039;&#039; anklicken.&amp;lt;br&amp;gt;&lt;br /&gt;
Jetzt den angezeigten Inhalt des sich öffnenden Eingabefeldes mit der oben stehenden Definition überschreiben und danach den erschienenen Button &#039;&#039;&#039;Execute commands&#039;&#039;&#039; drücken.&amp;lt;br&amp;gt; Wenn die Meldung &amp;quot;Executed everything, no errors found.&amp;quot; erscheint, war der Import erfolgreich, andernfalls gibt es eine Fehlermeldung und der Import wird an dieser Stelle abgebrochen.&amp;lt;br&amp;gt;Das Gerät müsste jetzt im Raum Entwicklung zu finden sein.&amp;lt;br&amp;gt;&lt;br /&gt;
Jetzt noch auf &amp;quot;Save config&amp;quot; klicken, oder ein &amp;quot;save&amp;quot; in der Eingabezeile ausführen damit das neue importierte Device in die fhem.cfg übernommen wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Zukünftig kann dieses Gerät zum Importieren genutzt werden, damit sinkt die Wahrscheinlichkeit eine bestehende Definition zu beeinträchtigen.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Zum Erstellen eigener Definitionen ist der [[DEF-Editor]] das empfohlene Werkzeug.&lt;br /&gt;
&lt;br /&gt;
==Sonstiges==&lt;br /&gt;
&lt;br /&gt;
=== Geräte zwischen Installationen verschieben ===&lt;br /&gt;
Möchte man eigene Geräte zwischen unterschiedlichen Installationen verschieben, z.B. aus einem Test- in das Produktivsystem, kann man sich mit den erweiterten Optionen von [[List|list]] die Informationen aus dem Ausgangssystem so anzeigen lassen, dass diese direkt samt derzeitiger Zustände ins Zielsystem übernommen werden können.  &lt;br /&gt;
&lt;br /&gt;
=== attrTemplate ===&lt;br /&gt;
[[MQTT2_DEVICE#attrTemplate|attrTemplate]] ist für Geräte-Typen, die dies unterstützen, eine weitere Option, Geräte schnell mit einer typischen Konfiguration einzurichten. &lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [[Konfiguration]]&lt;br /&gt;
* [[MQTT2_DEVICE#attrTemplate|attrTemplate]]&lt;br /&gt;
* [[DOIF]]&lt;br /&gt;
* [[DOIF/Ein- und Ausgabe in FHEMWEB und Tablet-UI am Beispiel einer Schaltuhr]]&lt;br /&gt;
* [[Notify|notify]]&lt;br /&gt;
* [[List|list]]&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:FHEM]]&lt;br /&gt;
[[Kategorie:FHEM-Verwendung]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30261</id>
		<title>Spritpreismonitor</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Spritpreismonitor&amp;diff=30261"/>
		<updated>2019-04-25T09:16:15Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: added readings for SuperE10 and SuperPlus&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die hier vorgestellten Fragmente ermöglichen es, mit Hilfe von [[HTTPMOD]] bei [http://www.clever-tanken.de clever-tanken.de] von Wunschtankstellen die Spritpreise zu protokollieren. Die Credits dafür gehen an Forum-Benutzer {{Link2FU|1774|Phil__}}. Die Original Diskussion im Forum ist {{Link2Forum|Topic=22554|Message=210795|LinkText=hier}}.&lt;br /&gt;
&lt;br /&gt;
Alternativ können die Kraftstoffpreise auch über die Webseite tankerkönig.de bezogen werden. Die Vorgehensweise dafür ist im Detail in [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ diesem Blog] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die gezeigten Anweisungen basieren noch auf einer alten Version (vor Februar 2016) des Moduls HTTPMOD. Das betrifft insbesondere die gewählten &#039;&#039;readings...&#039;&#039;-Namen. Dieses Namensschema wird u.U. in Zukunft nicht mehr unterstützt.&lt;br /&gt;
Zur Umstellung auf das aktuelle Namensschema (am Beispiel &#039;&#039;Shell&#039;&#039;) bitte folgende Aktionen (Eingabe in das Befehlsfenster!) ausführen:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Shell enableControlSet 1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;set Shell upgradeAttributes&amp;lt;/code&amp;gt;&lt;br /&gt;
Im FHEM-Log sollten dann Meldungen auftauchen nach dem Schema &lt;br /&gt;
:&#039;&#039;Shell: upgraded attribute ... to new syntax ...&#039;&#039;&lt;br /&gt;
:&#039;&#039;Shell: dropping readings... from userattr list&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird mit Hilfe des Moduls HTTPMOD der Spritpreis von ausgewählten Tankstellen abgerufen. Die Daten werden [[Regulärer Ausdruck|gefiltert]], gespeichert und als Diagramm aufbereitet.&lt;br /&gt;
&lt;br /&gt;
Zum Nachbau ist es erforderlich, &amp;quot;seine&amp;quot; Wunschtankstellen bei Clever-Tanken zu suchen. Jede Tankstelle hat eine eigene Nummer:&lt;br /&gt;
:&amp;lt;code&amp;gt;/tankstelle_details/0815&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;600&#039;&#039; in den Beispielen gibt das Abrufintervall in Sekunden an.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die erforderlichen Definitionen in der FHEM [[Konfiguration]] bestehen aus mehreren Teilen. Zunächst die erforderlichen Einstellungen, um die Daten der gewünschten Tankstellen abzuholen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Shell HTTPMOD http://www.clever-tanken.de/tankstelle_details/4871 600&lt;br /&gt;
attr Shell group Spritpreise&lt;br /&gt;
attr Shell icon tanken&lt;br /&gt;
attr Shell reading01Name Diesel&lt;br /&gt;
attr Shell reading02Name SuperE5&lt;br /&gt;
attr Shell reading03Name SuperE10&lt;br /&gt;
attr Shell reading04Name SuperPlus&lt;br /&gt;
attr Shell reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Shell reading02Regex &amp;quot;current-price-3&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Shell reading03Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Shell reading04Regex &amp;quot;current-price-4&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Shell room Spritpreise&lt;br /&gt;
attr Shell stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Shell timeout 5&lt;br /&gt;
&lt;br /&gt;
define Total HTTPMOD http://www.clever-tanken.de/tankstelle_details/4870 600&lt;br /&gt;
attr Total group Spritpreise&lt;br /&gt;
attr Total icon tanken&lt;br /&gt;
attr Total reading01Name Diesel&lt;br /&gt;
attr Total reading02Name SuperE5&lt;br /&gt;
attr Total reading03Name SuperE10&lt;br /&gt;
attr Total reading04Name SuperPlus&lt;br /&gt;
attr Total reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Total reading02Regex &amp;quot;current-price-3&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Total reading03Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Total reading04Regex &amp;quot;current-price-4&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Total room Spritpreise&lt;br /&gt;
attr Total stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Total timeout 5&lt;br /&gt;
&lt;br /&gt;
define Aral HTTPMOD http://www.clever-tanken.de/tankstelle_details/4869 600&lt;br /&gt;
attr Aral group Spritpreise&lt;br /&gt;
attr Aral icon tanken&lt;br /&gt;
attr Aral reading01Name Diesel&lt;br /&gt;
attr Aral reading02Name SuperE5&lt;br /&gt;
attr Aral reading03Name SuperE10&lt;br /&gt;
attr Aral reading04Name SuperPlus&lt;br /&gt;
attr Aral reading01Regex &amp;quot;current-price-1&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Aral reading02Regex &amp;quot;current-price-3&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Aral reading03Regex &amp;quot;current-price-2&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Aral reading04Regex &amp;quot;current-price-4&amp;quot;&amp;gt;(\d.\d{2})&lt;br /&gt;
attr Aral room Spritpreise&lt;br /&gt;
attr Aral stateFormat E5: SuperE5, E10: SuperE10, D: Diesel, SP: SuperPlus&lt;br /&gt;
attr Aral timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer die Anzeige der Benzinpreise inklusive der obligatorisch abschließenden &amp;quot;9&amp;quot; möchte, muss zu jedem readingsName einen entsprechenden Zusatzzeile hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Addiert zum Wert ($val) des Readings (readingsName_Diesel) den Wert 0.009&lt;br /&gt;
attr Shell reading01OExpr $val + 0.009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Zeile fügt dem Dieselpreis der Shell-Tankstelle bei einem Literpreis von 1.29 die Ziffer &amp;quot;9&amp;quot; hinzu und ergibt 1.299.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dazu kommen noch die Definitionen für das [[FileLog]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_Spritpreise FileLog /media/usblog/fhem/log/spritpreise-langen-%Y-%m.log (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr FileLog_Spritpreise alias Log Spritpreise&lt;br /&gt;
attr FileLog_Spritpreise group Logfile&lt;br /&gt;
attr FileLog_Spritpreise logtype text&lt;br /&gt;
attr FileLog_Spritpreise room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sowie eine passende [[readingsGroup]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Spritpreise readingsGroup (Shell|Total|Aral):(SuperE5|Diesel).*&lt;br /&gt;
attr Spritpreise group Spritpreisuebersicht&lt;br /&gt;
attr Spritpreise notime 1&lt;br /&gt;
attr Spritpreise room Spritpreise&lt;br /&gt;
#attr Spritpreise style style=&amp;quot;font-size:16px&amp;quot;     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
attr Spritpreise valueFormat {&#039;%.2f €&#039;}&lt;br /&gt;
#attr Spritpreise valueStyle {Werte($READING,$VALUE)}     # führt ggf. zu einem PERL WARNING&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und eine [[SVG|Plotdefinition]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_FileLog_Spritpreise_1 SVG FileLog_Spritpreise:SVG_FileLog_Spritpreise_1:CURRENT&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 group Spritpreisverlauf&lt;br /&gt;
attr SVG_FileLog_Spritpreise_1 room Spritpreise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Farbliche Hervorhebung ==&lt;br /&gt;
Folgender Code gehört in [[99 myUtils anlegen|99_myUtils.pm]]; die Werte können natürlich entsprechend eigener Wünsche und Vorlieben angepasst werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###################################################&lt;br /&gt;
###     Spritpreisübersicht - Farbsortierung    ###&lt;br /&gt;
###################################################&lt;br /&gt;
&lt;br /&gt;
sub Werte($$) {&lt;br /&gt;
  my ($name, $wert) = @_;&lt;br /&gt;
# Log(3,&amp;quot;$name $wert&amp;quot;);&lt;br /&gt;
  if ($name eq &amp;quot;Diesel&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.39); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.33) &amp;amp;&amp;amp; ($wert &amp;lt; 1.39));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.32);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE10&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:crimson&amp;quot;&#039; if($wert &amp;gt;= 1.70); &lt;br /&gt;
    return &#039;style=&amp;quot;color:yellow&amp;quot;&#039; if(($wert &amp;gt;= 1.55) &amp;amp;&amp;amp; ($wert &amp;lt; 1.70));&lt;br /&gt;
    return &#039;style=&amp;quot;color:lightgreen;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt; 1.55);&lt;br /&gt;
  }elsif ($name eq &amp;quot;SuperE5&amp;quot;) {&lt;br /&gt;
    return &#039;style=&amp;quot;color:red&amp;quot;&#039; if($wert &amp;gt;= 1.59); &lt;br /&gt;
    return &#039;style=&amp;quot;color:blue&amp;quot;&#039; if(($wert &amp;gt;= 1.49) &amp;amp;&amp;amp; ($wert &amp;lt; 1.59));&lt;br /&gt;
    return &#039;style=&amp;quot;color:green;;font-weight:bold&amp;quot;&#039; if($wert &amp;lt;= 1.48);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die zugehörige .gplot Datei ===&lt;br /&gt;
SVG_FileLog_Spritpreise_1.gplot&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Created by FHEM/98_SVG.pm, 2014-10-22 12:57:34&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Spritpreise&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid&lt;br /&gt;
set ylabel &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Preise (€/Liter)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:Aral.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Total.Diesel\x3a:1:&lt;br /&gt;
#FileLog 4:Aral.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Shell.SuperE5\x3a:1:&lt;br /&gt;
#FileLog 4:Total.SuperE5\x3a:1:&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Diesel&#039; ls l2 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Diesel&#039; ls l1 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Diesel&#039; ls l0 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Aral Super&#039; ls l3 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Shell Super&#039; ls l4 lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Total Super&#039; ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tricks für HTTPMOD ==&lt;br /&gt;
Je nach Internetverbindung und Geschwindigkeit des FHEM Rechners kann das Modul manchmal Probleme haben, die Daten schnell genug zu verarbeiten.&lt;br /&gt;
&lt;br /&gt;
Eine Lösung dazu wäre, die Daten vorher mit wget auf einem eigenen Webserver zu speichern (z.B. ein lokaler Apache) und HTTPMOD auf diesen zugreifen zu lassen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Vorstellung und Diskussion im {{Link2Forum|Topic=22554|LinkText=FHEM Forum}}&lt;br /&gt;
* Der &amp;quot;Datenlieferant&amp;quot;: [http://www.clever-tanken.de/ Clever Tanken]&lt;br /&gt;
* Eine Anleitung, wie man das mit wget macht, gibt es {{Link2Forum|Topic=28123|Message=216228|LinkText=hier}} (ist aber noch nicht ganz fertig)&lt;br /&gt;
* Umsetzung für [http://www.cyberwulf.de/2016/fhem-spritpreise-von-tankerkoenig-de/ Tankerkönig API]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=29966</id>
		<title>HOMEMODE</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=29966"/>
		<updated>2019-03-22T07:49:04Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* HomeCMDfhemDEFINED */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Das Modul wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden und viele grundlegende Automationen durch Hinzufügen weiterer Geräte bereitzustellen.&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=HOMEMODE&lt;br /&gt;
|ModFTopic=64317&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=22_HOMEMODE.pm&lt;br /&gt;
|ModOwner=DeeSPe&lt;br /&gt;
}}&lt;br /&gt;
Diese Seite beschreibt die Konfiguration und Verwendung des Moduls &#039;&#039;22_HOMEMODE.pm&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Das Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier aufgeführte Anleitung entspricht dem Modul in Version 1.4.2.&lt;br /&gt;
&lt;br /&gt;
Viele allgemein typische Automationen sind bereits fertig integriert.&lt;br /&gt;
&lt;br /&gt;
Die jeweils per Event auszuführenden Befehle können in den entsprechenden &#039;&#039;HomeCMD...&#039;&#039; Atributen hinterlegt werden und so in der Detail Ansicht des HOMEMODE Geräts übersichtlich angezeigt und bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen vieler notify/DOIF ist durch den Einsatz von &#039;&#039;HOMEMODE&#039;&#039; unnötig.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wurde das Modul für die Verwendung mit HomeKit als GUI optimiert. Alle möglichen Mappings für Homebridge sind bereits enthalten und können über einen set Befehl aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:HOMEMODE_Device.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Um Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; benutzen zu können benötigt man als Mindestvoraussetzung ein bereits angelegtes RESIDENTS Gerät mit entsprechenden ROOMMATE/GUEST Geräten.&lt;br /&gt;
&lt;br /&gt;
==Mögliche Automationen==&lt;br /&gt;
Alle Automationen sind optional.&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Beispiele:&lt;br /&gt;
*Änderung des Zustands von ROOMMATE/GUEST Geräten anhand von PRESENCE Geräten&lt;br /&gt;
*Bereistellung von CMD Attributen für mögliche Events rund um den Heim-/Hausstatus&lt;br /&gt;
*Bereistellung von Platzhaltern innerhalb der CMD Attribute, z.B. %MODE%, %SEASON% oder %PREVMODE% für die Werte der Readings mode, season und prevMode&lt;br /&gt;
*Einbindung von Kontakt Sensoren, für z.B. Offen-Warnungen nach bestimmten Zeitraum oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Kontakt Sensor konfiguriert werden&lt;br /&gt;
*Einbindung von Bewegungs Sensoren, für z.B. automatische Licht Schaltungen oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Bewegungs Sensor konfiguriert werden&lt;br /&gt;
*Darstellungen und Auslösen von Sabotage Alarmen der eingebundenen Kontakt- und Bewegungssensoren&lt;br /&gt;
*Einbindung von jeweils einem Temperatur und Luftfeuchtigkeitssensor&lt;br /&gt;
*Einbindung eines lokalen Yahoo Wetter Devices zur Ermittlung und Ausgabe der lokalen Wetterdaten und Erzeugung der Wettervorhersage&lt;br /&gt;
*Einbindung von Power und Energy Sensoren zur Ermittlung der Gesamtmengen&lt;br /&gt;
*Einbindung von Calendar/holiday Devices für spezielle im HOMEMODE Device verfügbar zu machende Events&lt;br /&gt;
*von Uhrzeit abhängiger Anwesend-Modus&lt;br /&gt;
*Bewohner unabhängige Tageszeit-Modus&lt;br /&gt;
*Alarm-Modus&lt;br /&gt;
*DND-Modus&lt;br /&gt;
*Überwachung von Batteriewerten&lt;br /&gt;
&lt;br /&gt;
=HOMEMODE-Gerät=&lt;br /&gt;
==Definition==&lt;br /&gt;
Das HOMEMODE Gerät - hier mit dem Namen &#039;&#039;Home&#039;&#039; versehen - selbst wird über&lt;br /&gt;
 define Home HOMEMODE&lt;br /&gt;
bei Vorhandensein nur eines RESIDENTS Geräts definiert.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung mehrerer RESIDENTS Geräte muss das Master RESIDENTS Gerät beim Definieren mit angegeben werden&lt;br /&gt;
 define Home HOMEMODE rgr_Residents&lt;br /&gt;
Dieses Modul verwendet das globale Attribut &#039;&#039;language&#039;&#039; zur Bestimmung der Anzeigedaten (Standard: EN=english). Für deutsche Ausgabedaten kann das Attribut&lt;br /&gt;
 attr global language DE&lt;br /&gt;
gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Alternativ kann auch nur das HOMEMODE Gerät auf deutsch geändert werden&lt;br /&gt;
 attr Home HomeLanguage DE&lt;br /&gt;
&lt;br /&gt;
==Set-Befehle==&lt;br /&gt;
&#039;&#039;set &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 set Home anyoneElseAtHome &amp;lt;on/off&amp;gt;&lt;br /&gt;
einschalten wenn jemand anderes zu Hause ist der kein registrierter ROOMMATE/GUEST ist, z.B. Hund/Katze oder unregistrierte Gäste&amp;lt;br&amp;gt;&lt;br /&gt;
wenn eingeschaltet, dann wird der Alarm Mode beim Verlassen statt auf armaway nur auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
schaltet man ein und hat schon Haus/Wohnung verlassen, so wird der Alarm Mode von armaway auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AEAH%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd &amp;lt;on/off&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. um Benachrichtigungen zu deaktivieren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DND%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd-for-minutes &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus für die angegebenen Minuten ein&amp;lt;br&amp;gt;&lt;br /&gt;
kehrt danach zum vorherigen (tageszeitabhängigen) Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home deviceDisable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
deaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home deviceEnable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
reaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home location &amp;lt;arrival/home/bed/underway/wayhome&amp;gt;&lt;br /&gt;
manueller Ortswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%LOCATION%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home mode &amp;lt;morning/day/afternoon/evening/night/gotosleep/asleep/absent/gone/home&amp;gt;&lt;br /&gt;
manueller Moduswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm &amp;lt;armaway/armhome/armnight/disarm&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVAMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm-for-minutes &amp;lt;armaway/armhome/armnight/disarm&amp;gt; &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus für die angegebenen Minuten ein&lt;br /&gt;
kehrt danach zum vorherigen Alarm Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home updateHomebridgeMapping&lt;br /&gt;
aktualisiert das Attribut homebridgeMapping des HOMEMODDE Device abhängig von den verfügbaren Informationen&lt;br /&gt;
&lt;br /&gt;
 set Home updateInternalForce&lt;br /&gt;
führt eine Aktualisierung der Internals des HOMEMODE Device aus&amp;lt;br&amp;gt;&lt;br /&gt;
das sollte manuell benutzt werden nachdem das Modul aktualisiert und nur ein reload statt restart gemacht wurde&amp;lt;br&amp;gt;&lt;br /&gt;
auch wenn man überwachte/kontrollierte Geräte ändert sollte man diesen Befehl manuell ausführen, z.B. neue ROOMMATE/GUEST im RESIDENTS Device hinzufügt, oder Geräte in FHEM hinzufügt die dem selben Devspec wie bisher entsprechen (Steckdosen, Sensoren)&lt;br /&gt;
&lt;br /&gt;
==Get-Befehle==&lt;br /&gt;
&#039;&#039;get &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 get Home contactsOpen &amp;lt;all/doorsinside/doorsoutside/doorsmain/outside/windows&amp;gt;&lt;br /&gt;
Liste von all/doorsinside/doorsoutside/doorsmain/outside/windows offenen Kontakten&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%OPEN%&#039;&#039;&#039;, &#039;&#039;&#039;%OPENCT%&#039;&#039;&#039; und &#039;&#039;&#039;%OPENHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home devicesDisabled&lt;br /&gt;
Anzeige der für HOMEMODE deaktivierten Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home mode&lt;br /&gt;
Anzeige von mode&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home modeAlarm&lt;br /&gt;
Anzeige von modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%MODEALARM%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home publicIP&lt;br /&gt;
holen der öffentlichen IP Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%IP%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home sensorsTampered&lt;br /&gt;
Liste aller sabotierten Sensoren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%TAMPERED%&#039;&#039;&#039;, &#039;&#039;&#039;%TAMPEREDCT%&#039;&#039;&#039; und &#039;&#039;&#039;%TAMPEREDHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weather &amp;lt;long/short&amp;gt;&lt;br /&gt;
Wetterinfo im angegebenen Format anzeigen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%WEATHER%&#039;&#039;&#039; und &#039;&#039;&#039;%WEATHERLONG%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weatherForecast [TAG]&lt;br /&gt;
Wettervorhersage für angegebenen Tag&amp;lt;br&amp;gt;&lt;br /&gt;
wenn kein Tag angegeben wird, so wird die Vorhersage für morgen (2) ausgegeben&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%FORECAST%&#039;&#039;&#039; (morgen) und &#039;&#039;&#039;%FORECASTTODAY%&#039;&#039;&#039; (heute) sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
==webCmd==&lt;br /&gt;
Die Schaltmöglichkeiten sind absichtlich gering gehalten, denn im normalen Betrieb sollte nicht mehr benötigt werden als die hier gebotenen.&amp;lt;br&amp;gt;&lt;br /&gt;
Es lässt sich der Alarm Mode manuell umschalten und beim Klick auf das devStateIcon wird der DND Mode an- und ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
==Grundkonfiguration==&lt;br /&gt;
&lt;br /&gt;
Diese Grundkonfiguration sollte immer als erstes erfolgen um entsprechend darauf weiter aufzubauen. Als zweiter Schritt ist dann die erweiterte Konfiguration angedacht.&lt;br /&gt;
&lt;br /&gt;
Bei der Namensvergabe der Attribute vom HOMEMODE Device wurde nach einem möglichst kurzem Prefix gesucht und nach vielen Tests wurde sich für das Prefix &amp;quot;Home&amp;quot; entschieden. Das hat den Vorteil, dass alle Attribute beisammen stehen und diese auch (durch den Großbuchstaben am Anfang) ziemlich weit oben in der Liste der Attribute stehen. Ebenso wurde bei der Namensvergabe versucht, selbsterklärende Namen zu wählen. Das hat den Vorteil, dass man relativ einfach genau erkennen kann wofür das Attribut steht, allerdings auch den Nachteil, dass einige Attributnamen ganz schön lang werden.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedUserAttr====&lt;br /&gt;
Als Erstes wird empfohlen, gerade für Anfänger, das Attribut &amp;quot;HomeAdvancedUserAttr&amp;quot; auf 1 zu setzen. Dadurch werden viel mehr HomeCMD Attribute freigeschaltet. Diese werden im Attribut userattr des HOMEMODE Device hinzugefügt.&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAlarmModes====&lt;br /&gt;
Als Nächstes sollte man sich entscheiden, ob die Alarm Modus evtl. nicht automatisch zum jeweiligen Modus des HOMEMODE Device geschaltet werden sollen. Standardmäßig werden die Alarm Modus automatisch gesteuert. Ist das nicht erwünscht, so ist der Wert dieses Attributs auf 0 zu setzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;absent&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armaway&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;home&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;disarm&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;asleep&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armnight&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Alarm Modus &amp;quot;armhome&amp;quot; kann nur manuell gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeAutoArrival====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird bei Ankunft jedes ROOMMATE/GUEST die location des jeweiligen ROOMMATE/GUEST für die hier angegeben Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt. Beim ersten nach Hause kommenden ROOMMATE/GUEST wird zusätzlich die location des HOMEMODE Device für die hier eingestellte Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Ablauf der hier eingestellten Minuten wechselt das jeweilige Device von &amp;quot;arrival&amp;quot; auf &amp;quot;home&amp;quot;, sofern es noch die location &amp;quot;arrival&amp;quot; hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAsleep====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Schlafengehen (gotosleep) jedes ROOMMATE/GUEST ein Timer gestartet, der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;asleep&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAwoken====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Erwachen (&amp;quot;awoken&amp;quot; oder &amp;quot;home nach asleep&amp;quot;) jedes ROOMMATE/GUEST dieser auf &amp;quot;awoken&amp;quot; gesetzt und ein Timer gestartet, der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;home&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoDaytime====&lt;br /&gt;
Standardmäßig wird mode anhand der Tageszeit automatisch gesetzt. Ist das nicht gewünscht, kann das über den Wert 0 deaktiviert werden. Dann stehen allerdings tageszeitabhängigen mode(s) nicht mehr zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeResidentCmdDelay====&lt;br /&gt;
Normalerweise werden die Events der ROOMMATE/GUEST vor denen des HOMEMODE Device ausgeführt. Um das zu ändern wird die Ausführung der ROOMMATE/GUEST HomeCMD Attribute um die hier eingestellte Zeit in Sekunden verzögert.&amp;lt;br&amp;gt;&lt;br /&gt;
Je genauer der Name des jeweiligen HomeCMD Attributs beschrieben wird, desto später wird dieser ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Das heißt z.B. dass HomeCMDmode vor HomeCMDmode-absent und dieser wiederrum vor HomeCMDmode-absent-ROOMMATE/GUEST-NAME ausgeführt wird usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Um das normale Verhalten wiederherzustellen ist der Wert dieses Attributs auf 0 zu setzen. Dann wird HomeCMDmode-absent-ROOMMATE/GUEST-NAME vor HomeCMDmode-absent und vor HomeCMDmode ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis unendlich in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
==Konfiguration Presence Devices (automatische anwesend/abwesend Umschaltung von ROOMMATE/GUEST)==&lt;br /&gt;
Damit die automatische Zuordnung der Presence Devices zu ihren ROOMMATE/GUEST Devices zuverlässig funktioniert, ist es nötig dass der Hauptteil des Namens des ROOMMATE/GUEST innerhalb des Namens des zugehörigen PRESENCE Device(s) vorkommt.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Attribut HomePresenceDeviceType kann man den zu suchenden TYPE von Presence Device vorgeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Per Default werden nur Devices vom TYPE PRESENCE gesucht und versucht den ROOMMATE/GUEST zuzuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls man z.B. auch Devices vom TYPE dummy zur Anwesenheitssteuerung benutzt, kann man diese im Attribut HomePresenceDeviceType mit hinzunehmen. Es sind alles Device TYPEn möglich die ein &amp;quot;presence&amp;quot; Reading mit den Werten &amp;quot;present/appeared&amp;quot; und &amp;quot;absent/disappeared&amp;quot; bereitstellen. Mehrere TYPEn sind möglich da in diesem Attribut ein Regex erwartet wird. z.B.: dummy oder PRESENCE|dummy oder PRESENCE|dummy|ONKYO_AVR.&lt;br /&gt;
&lt;br /&gt;
===Beispiel===&lt;br /&gt;
Der Device Name meines ROOMMATE ist &amp;quot;rr_Dan&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf der Suche nach dem zugehörigen Presence Device wird der erste Teil (rr_ oder rg_) weggeschnitten und der Rest in Kleinbuchstaben umgewandelt.&amp;lt;br&amp;gt;&lt;br /&gt;
Mit dem was übrig bleibt, bei mir also nur dan, werden die möglichen Presence Devices versucht zu erkennen.&amp;lt;br&amp;gt;&lt;br /&gt;
Mein zugehöriges Presence Device heißt, historisch gewachsen, PRESENCE_rr_Dan und würde somit problemlos zugeordnet werden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen der zugehörigen Presence Devives könnten in ihrer kürzesten Form auch wie folgt sein um meinen ROOMMATE/GUEST Device zugeordnet zu werden:&amp;lt;br&amp;gt;&lt;br /&gt;
 pdan&lt;br /&gt;
 danp&lt;br /&gt;
 ZDan&lt;br /&gt;
 DANZ&lt;br /&gt;
 wenndannsonst&lt;br /&gt;
Aber Achtung, es funktioniert nicht mehr wenn die Namen nicht eindeutig sind. Wenn es z.B. eine rr_Dana geben würde mit Presence Device Name &amp;quot;pdani&amp;quot;, dann würde dieser Name auch bei mir (dan) passen. Das könnte man aber auch bewußt nutzen um mit einem Presence Device 2 ROOMMATE/GUEST Devices gleichzeitig zu steuern.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn die Namen wirklich absolut eindeutig sind, dann könnte man den Regex im Attribut HomePresenceDeviceType sogar auf &amp;quot;.*&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Werden pro ROOMMATE/GUEST mehrere Presence Devices gefunden und zugeordnet, so wird automatisch dass Attribut HomePresenceDeviceAbsentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt; auf die Anzahl der gefundenen Presence Devices gesetzt, so dass der/die jeweilige ROOMMATE/GUEST immer erst als abwesend gewertet wird sobald alle zugehörigen Presence Devices abwesend sind. Analog dazu gibt es noch das Attribut HomePresenceDevicePresentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresence====&lt;br /&gt;
Ist dieses Attribut auf 1 gesetzt, so werden die ROOMMATE/GUEST Devices automatisch zum Status ihrer zugehörigen PRESENCE Devices geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device present - ROOMMATE/GUEST home&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device absent - ROOMMATE/GUEST absent&amp;lt;br&amp;gt;&lt;br /&gt;
Falls es sich bei den von Euch benutzen PRESENCE Devices nicht um Devices vom TYPE PRESENCE handeln sollte, sondern z.B. um PRESENCE und dummy, so kann dieses im Attribut HomePresenceDeviceType als Regex konfiguriert werden! z.B.: PRESENCE|dummy&amp;lt;br&amp;gt;&lt;br /&gt;
Damit ein Device als Presence Device erkannt werden kann, muss dieses über ein presence Reading verfügen.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresenceSuppressState====&lt;br /&gt;
unterdrücke Anwesenheitsänderung in angegebenen State(s) der RESIDENTS&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. für &amp;quot;mysteriös&amp;quot; verschwindende Anwesenheitsgeräte in der Nacht&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: asleep|awoken|gotosleep&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceType====&lt;br /&gt;
Regex des TYPEs/der TYPEn von Presence Devices&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Regex der Device TYPEn&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: PRESENCE&lt;br /&gt;
&lt;br /&gt;
==Erweiterte Konfiguration==&lt;br /&gt;
Um das HOMEMODE Device vollumfänglich zu benutzen ist es sinnvoll weitere Devices (zur Überwachung) hinzuzufügen.&lt;br /&gt;
&lt;br /&gt;
Die bereits möglichen hinzuzufügenden Devices werden hier folgend nach Attributnamen erklärt.&lt;br /&gt;
&lt;br /&gt;
===Attribute zum Hinzufügen weiterer Geräte===&lt;br /&gt;
&lt;br /&gt;
====HomeEventsCalendarDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeEventsHolidayDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorAirpressure====&lt;br /&gt;
Luftdrucksensor aussen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorHumidityOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussensensors für Luftfeuchtigkeit anzugeben. Dieser muss ein Reading humidity besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für (Aussen)Luftfeuchtigkeit und Aussentemperatur ein und der selbe ist, so muss dieser nur einmalig im Attribut HomeSensorTemperatureOutside hinterlegt werden. Dieser muss dann die beiden Readings humidity und temperature haben. Im Bedarfsfall können diese Readings auch vorher entsprechend durch eigene userReadings erstellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%HUMIDITY%&#039;&#039;&#039; für den Wert des Readings humidity zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorTemperatureOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussentemperatursensors anzugeben. Dieser muss mindestens ein Reading temperature besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für Aussentemperatur auch ein Reading humidity besitzen sollte und dieses auch der Sensor für die Aussenlufteuchtigkeit ist, so muss dieser nur einmalig hier in diesem Attribut hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%TEMPERATURE%&#039;&#039;&#039; für den Wert des Readings temperature zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading temperature und optional humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContact====&lt;br /&gt;
Hier können alle Kontakt Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDcontact Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das optische und magnetische Kontaktsensoren vom HomeMatic. HM-SEC-SCo und HM-SEC-SC-2.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;model=HM-SEC-SC(o|-2)&#039;&#039;&#039; eingetragen um alle diese Kontaktsensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Kontaktsensoren mit ihren Namen im Internal SENSORSCONTACT des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Kontaktsensor folgende Attribute im Attribut userattr hinzugefügt:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====HomeContactType=====&lt;br /&gt;
Typ des Kontakts - wird versucht anhand des Namen/Alias beim Hinzufügen zum HOMEMODE Device zu ermitteln, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: doorinside,dooroutside,doormain,window&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: window&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Kontaktsensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModes=====&lt;br /&gt;
Regex der Mode(s) des HOMEMODE Device in denen keine Offen Warnungen erfolgen sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist ein Kontakt geöffnet während die hier eingestellten Mode(s) eintreten, so wird der noch bestehende Timer abgebrochen. Entgegengesetzt startet er wieder sobal die hier eingestellten Mode(s) verlassen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist hier z.B. &amp;quot;gotosleep|asleep&amp;quot; eingestellt, so kann man z.B. das Fenster schon vor dem Auslösen von gotosleep oder asleep öffnen und der bestehende Offenwarnung-Timer wird dann abgebrochen. Sobald man am Morgen z.B. awoken oder home auslöst, so wird ein neuer Timer gestartet der einen dann an das noch offene Fenster erinnert.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle Modes des HOMEMODE Device&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModesResidents=====&lt;br /&gt;
Devspec der ROOMMATE/GUEST Devices deren Status statt der Modes des HOMEMODE Device für Attribut HomeOpenDontTriggerModes benutzt werden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle überwachten ROOMMATE/GUEST&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenMaxTrigger=====&lt;br /&gt;
Maximale Anzahl an Warnmeldungen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ganze Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimes=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimesDividers=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactOpenTimeDividers des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2 1 2 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsContactReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactReadings====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeDividers====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeOpenTimesDividers in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 2 1 2 2.5 (für 4 Jahreszeiten)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeMin====&lt;br /&gt;
Minimale Zeit in Minuten die mindestens für eine Offenwarnung gewartet werden soll - im Falle dass sich durch den Teiler evtl. zu kleine Werte ergeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: eine Zahle mit max. einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimes====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 7.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminance====&lt;br /&gt;
Devspec von (Innen-)Lichtsensoren deren Durchschnittswert berechnet werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotion====&lt;br /&gt;
Hier können alle Bewegungs Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDmotion Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Motion Sensor Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0801-1001|010f-0800-1001&#039;&#039;&#039; eingetragen um alle diese Bewegungssensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Damit bei den Gen5 Sensoren auch das open im reading state steht, habe ich mir bei diesen Sensoren ein userReading angelegt.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Bewegungssensoren mit ihren Namen im Internal SENSORSMOTION des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Bewegungssensor folgende Attribute im Attribut userattr hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Bewegungssensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsMotionReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeSensorLocation=====&lt;br /&gt;
Standort des Bewegungssensors (außen oder innen) - wird standardmäßig beim Hinzufügen zum HOMEMODE Device auf &amp;quot;inside&amp;quot; gesetzt, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: inside,outside&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: inside&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsMotionValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionReadings====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergy====&lt;br /&gt;
Hier können alle Energie Sensoren als Devspec hinterlegt werden. Diese müssen die beiden Readings power und energy besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Anhand dieser Readings wird dann der Gesamtverbrauch und die derzeitige gesamte Leistungsaufnahme berechnet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Wall Plugs Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0600-1000|010f-0602-1001&#039;&#039;&#039; eingetragen um alle diese Energie Sensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec mit vorhandenen energy und power Readings&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmoke====&lt;br /&gt;
Devspec mit Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorWindspeed====&lt;br /&gt;
Sensor für Windgeschwindigkeit&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors und Reading der Windgeschwindigkeit separiert mit : (z.B. ga_Windsensor:wind)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBattery====&lt;br /&gt;
Devspec von Batteriesensoren mit einem Reading &amp;quot;battery&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerAnyoneElseAtHome====&lt;br /&gt;
auslösendes Gerät für anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn:valueOff&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerPanic====&lt;br /&gt;
auslösendes Gerät für Panikalarm&amp;lt;br&amp;gt;&lt;br /&gt;
valueOff ist optional, wird es weggelassen, so fungiert valueOn als toggle&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn[:valueOff]&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTwilightDevice====&lt;br /&gt;
Hier ist der Name des lokalen Twilight Device anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich die Platzhalter &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039;, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; in den HomeCMD Attributen zur Verfügung. &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039; wird dann durch das Reading light, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; durch das Reading twilight und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; durch das aktuelle Twilight Event ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeUWZ====&lt;br /&gt;
Hier ist der Name des lokalen UWZ Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%UWZ%&#039;&#039;&#039;, &#039;&#039;&#039;%UWZSHORT%&#039;&#039;&#039; und &#039;&#039;&#039;%UWZLONG%&#039;&#039;&#039; sind verfügbar in allen HomeCMD Attributen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des UWZ Geräts&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeYahooWeatherDevice====&lt;br /&gt;
Hier ist der Name des lokalen Yahoo Weather Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich einige Platzhalter zur Verfügung. Für die genaue Beschreibung derer siehe &amp;quot;Platzhalter&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
===HomeText Attribute===&lt;br /&gt;
Die HomeText Attribute sind größtenteils zur Übersetzung einiger benötigter Begriffe gedacht.&amp;lt;br&amp;gt;&lt;br /&gt;
In den speziellen Attributen die mit HomeTextWeather anfangen, sind ganze Texte mit entsprechenden Platzhaltern einzufügen.&lt;br /&gt;
&lt;br /&gt;
====HomeTextAndAreIs====&lt;br /&gt;
Übersetzung für &amp;quot;and&amp;quot;, &amp;quot;are&amp;quot; und &amp;quot;is&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort/Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: and|are|is&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 und|sind|ist&lt;br /&gt;
&lt;br /&gt;
====HomeTextClosedOpen====&lt;br /&gt;
Übersetzung für &amp;quot;closed&amp;quot; und &amp;quot;open&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: closed|open&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 geschlossen|geöffnet&lt;br /&gt;
&lt;br /&gt;
====HomeTextNosmokeSmoke====&lt;br /&gt;
Übersetzung für &amp;quot;no smoke&amp;quot; und &amp;quot;smoke&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: no smoke|smoke&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 kein Rauch|Rauch&lt;br /&gt;
&lt;br /&gt;
====HomeTextRisingConstantFalling====&lt;br /&gt;
Übersetzung für &amp;quot;rising&amp;quot;, &amp;quot;constant&amp;quot; und &amp;quot;falling&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: rising|constant|falling&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 steigend|gleichbleibend|fallend&lt;br /&gt;
&lt;br /&gt;
====HomeTextTodayTomorrowAfterTomorrow====&lt;br /&gt;
Übersetzung für &amp;quot;today&amp;quot;, &amp;quot;tomorrow&amp;quot; und &amp;quot;day after tomorrow&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: today|tomorrow|day after tomorrow&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Heute|Morgen|Übermorgen&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherNoForecast====&lt;br /&gt;
Übersetzung für &amp;quot;No forecast available&amp;quot; - Text wenn keine Wettervorhersage verfügbar ist&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: No forecast available&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es ist leider keine Wettervorhersage für den angegebenen Tag verfügbar!&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastInSpecDays====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage in 4-10 Tagen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 In %DAY% Tagen %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastToday====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für heute&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C. Aktuelle Temperatur %TEMPERATURE%°C bei einer Luftfeuchtigkeit von %HUMIDITY%%. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastTomorrow====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für morgen/übermorgen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherLong====&lt;br /&gt;
Langer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es %TOBE% %CONDITION% bei %TEMPERATURE%°C und %HUMIDITY%% Luftfeuchtigkeit. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h. Der Luftdruck ist %PRESSURETREND% bei %PRESSURE%hPa.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherShort====&lt;br /&gt;
Kurzer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %CONDITION%, %TEMPERATURE%°C, %HUMIDITY%% Luftfeuchtigkeit, Luftdruck %PRESSURE%hPa&lt;br /&gt;
&lt;br /&gt;
===weitere Attribute===&lt;br /&gt;
Viele weitere Dinge lassen sich anpassen.&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedDetails====&lt;br /&gt;
mehr Details anzeigen, abhängig von den zu HOMEMODE hinzugefügten Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: none, detail, both, room&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Auswahlliste&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: none&lt;br /&gt;
&lt;br /&gt;
====HomeDaytimes====&lt;br /&gt;
Eigene Tageszeiten als Paare aus Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Zeit|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 00:00|Mitternacht&lt;br /&gt;
 00:05|Nacht&lt;br /&gt;
 06:30|Morgen&lt;br /&gt;
 10:00|Vormittag&lt;br /&gt;
 13:00|Mittag&lt;br /&gt;
 14:30|Nachmittag&lt;br /&gt;
 17:30|Vorabend&lt;br /&gt;
 19:00|Abend&lt;br /&gt;
 23:00|Spätabend&lt;br /&gt;
&lt;br /&gt;
====HomeIcewarningOnOffTemps====&lt;br /&gt;
2 leerzeichenseparierte Temperaturen für das Ein- und Ausschalten der Eiswarnung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei leerzeichenseparierte Temperaturen mit maximal einer Kommastelle&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 2 3&lt;br /&gt;
&lt;br /&gt;
====HomeModeAlarmArmDelay====&lt;br /&gt;
Zeit in Sekunden um das aktivieren der Alarmschaltung zu verzögern.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl (gleiche Verzögerung für alle modeAlarm) oder 3 leerzeichenseparierte Zahlen für jeden modeAlarm (Reihenfolge: armaway armnight armhome)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAtTmpRoom====&lt;br /&gt;
Diesen Raum zu temporäre at(s) hinzufügen die von HOMEMODE generiert werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceAbsentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;absent&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: maximale Anzahl von verfügbaren Presence Geräten für jeden ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDevicePresentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;present&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomePublicIpCheckInterval====&lt;br /&gt;
Interval in Minuten für die Überprüfung der öffentlichen IP-Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0 (deaktiviert)&lt;br /&gt;
&lt;br /&gt;
====HomeSeasons====&lt;br /&gt;
Eigene Jahreszeiten als Paare aus Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Datum|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 03.01|spring 06.01|summer 09.01|autumn 12.01|winter&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 03.01|Frühling&lt;br /&gt;
 06.01|Sommer&lt;br /&gt;
 09.01|Herbst&lt;br /&gt;
 12.01|Winter&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryLowPercentage====&lt;br /&gt;
Prozentsatz um einen Batteriesensor mit geringer Batterie anzuzeigen (nur bei Sensoren die ihren Batteriewert prozentual angeben)&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 50&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryReading====&lt;br /&gt;
Reading der Batteriesensoren welches statt &amp;quot;battery&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: battery&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminanceReading====&lt;br /&gt;
Reading der Lichtsensoren welches statt &amp;quot;luminance&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: luminance&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergyReadings====&lt;br /&gt;
Readings der Power/Energy Sensoren welche statt &amp;quot;power&amp;quot; und &amp;quot;energy&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: 2 leerzeichenseparierte Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: power energy&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeReading====&lt;br /&gt;
Readings der Rauchmelder welche statt &amp;quot;state&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ein Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeValue====&lt;br /&gt;
Regex der Auslösewerte von Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: RegEx&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: on&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialLocation====&lt;br /&gt;
Hier können eigene zusätzliche location(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; location &amp;lt;LOCATION&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialModes====&lt;br /&gt;
Hier können eigene zusätzliche mode(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; mode &amp;lt;MODE&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTrendCalcAge====&lt;br /&gt;
Zeit in Sekunden für das Maximalalter des vorherigen Wertes für die Trendberechnung&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 900&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Teil der Konfiguration ist das Befüllen der HomeCMD Attribute. Da dieses durch die Vermischung von FHEM Code, Perl Code und zusätzlichen Platzhaltern erst einmal sehr befremdlich sein kann, habe ich bei der Beschreibung der HomeCMD Attribute teilweise Beispiele hinzugefügt um den Einstieg weiter zu erleichtern.&lt;br /&gt;
&lt;br /&gt;
==HomeCMD Attribute (mit Beispielen)==&lt;br /&gt;
Die HomeCMD Attribute sind zum Festlegen der jeweiligen Schaltaktionen gedacht und können damit evtl. vorhandene notify/DOIF ablösen. Sie können mit FHEM-Code, Perl-Code oder aber auch mit beidem vermischt befüllt werden (wovon ich allerdings abrate). Zusätzlich sind noch diverse Platzhalter (siehe Platzhalter) verfügbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Perl-Code innerhalb der HomeCMD Attribute gibt es hier Besonderheiten.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
*Im Gegensatz zur FHEM-Eingabezeile müssen hier keine Semikolon verdoppelt werden&lt;br /&gt;
*Kommetarzeilen sind zulässig&lt;br /&gt;
*Kommentare am Ende einer Perl-Zeile sind nicht zulässig&lt;br /&gt;
&lt;br /&gt;
Typischer Weise werden in den HomeCMD Attributen weitere Module angesprochen.&amp;lt;br&amp;gt;&lt;br /&gt;
Z.B. benutze ich für jegliche Form der Benachrichtigung den msg Befehl.&lt;br /&gt;
&lt;br /&gt;
Keines der HomeCMD Attribute hat einen Standardwert. Es müssen alle Befehle selbst programmiert werden.&lt;br /&gt;
&lt;br /&gt;
Platzhalter die Text(e) (string) beinhalten, müssen im Perl-Code in Anführungszeichen gesetzt werden (Beispiel %SENSOR%).&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter die Zahlen beinhalten (int,float) sollten nicht in Anführungszeichen gesetzt werden damit Zahlenvergleiche (mittels ==, &amp;lt;=, &amp;gt;=, &amp;gt;, &amp;lt;) funktionieren (Beispiel %LIGHT%, %ICE% oder %TEMPERATURE%).&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-off====&lt;br /&gt;
Befehle die beim Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Rauchalarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-on====&lt;br /&gt;
Befehle die bei einem Rauchalarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;meldet&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;melden&amp;quot; if (%SMOKECT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %SMOKEHR% $is Rauchalarm!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Sabotage Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-off====&lt;br /&gt;
Befehle die beim Ende eines Sabotage Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Manipulationen wurden beseitigt!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-on====&lt;br /&gt;
Befehle die bei einem Sabotage Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%TAMPEREDCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %TAMPEREDHR% $is sabotiert!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-off====&lt;br /&gt;
Befehle die beim Ende eines Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg ENTWARNUNG: Alle Alarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-on====&lt;br /&gt;
Befehle die bei einem Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%ALARMCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg audio,push,light 3 !!! ALARM !!! %ALARMHR% $is ausgelöst!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome====&lt;br /&gt;
Befehle die beim on/off von anyoneElseAtHome ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-off====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armaway&amp;quot; auf &amp;quot;armhome&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome on&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun niemand anderes mehr zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-on====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armhome&amp;quot; auf &amp;quot;armaway&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder wieder Alarme melden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird anyoneElseAtHome bei Anwesenheit und nicht deaktiviertem HomeAutoAlarmModes aktiviert, so passiert erst einmal nichts, ausser dass die hier angegebenen Befehle ausgeführt werden. Wird dann später die Abwesenheit erkannt, schaltet der Alarm Mode auf &amp;quot;armhome&amp;quot; statt auf &amp;quot;armaway&amp;quot; damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome off&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun noch jemand anderes zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDbatteryLow====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Sensor einen niedrigen Batteriewert meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg;&lt;br /&gt;
   $msg = &amp;quot;Die Batterien von %BATTERYLOW% gehen zur Neige und sollten ausgetauscht werden!&amp;quot; if (%BATTERYLOWCT% == 1);&lt;br /&gt;
   $msg = &amp;quot;Die Batterien bei folgenden Geräten sollten ausgetauscht werden: %BATTERYLOWALL%&amp;quot; if (%BATTERYLOWCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push $msg&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontact====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor geschlossen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geschlossen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor offen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun offen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormain====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor Type doormain open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain wird geschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 { &lt;br /&gt;
   # Wenn es Ankommende gibt&lt;br /&gt;
   if (&amp;quot;%ARRIVERS%&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Zusammenstellen der Begrüßung&lt;br /&gt;
     my $msg = &amp;quot;Gute&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # &amp;quot;n&amp;quot; anhängen wenn Tageszeit nicht Nacht ist&lt;br /&gt;
     $msg .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Leerzeichen einfügen&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # den Feiertag der Tageszeit voranstellen wenn ein Feiertag im Kalender FEIERTAG ist&lt;br /&gt;
     $msg .= &amp;quot;%FEIERTAG%-&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Tageszeit einfügen&lt;br /&gt;
     $msg .= &amp;quot;%DAYTIME% &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # bei ROOMMATE &amp;quot;zu Hause&amp;quot; in Begrüßung einfügen&lt;br /&gt;
     $msg .= &amp;quot;zu Hause &amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; =~ /^rr_/);&lt;br /&gt;
 &lt;br /&gt;
     # Ankommende einfügen&lt;br /&gt;
     $msg .= &amp;quot;%ARRIVERS%&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Begrüßung am Sonos im Flur ausgeben bei Abwesenheit über 60 min&lt;br /&gt;
     fhem &amp;quot;msg audio \@fl_Sonos $msg!&amp;quot; if (%DURABSENCELAST% &amp;gt; 60);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain geöffnet&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geöffnet!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning1====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die erste Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: erste Offenwarnzeit des Kontakts erreicht&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning2====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die zweite Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: ab Erreichen der zweiten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht immer noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarningLast====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die letzte Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Erreichen der letzten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das ist der letzte Hinweis %ALIAS% endlich zu schliessen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald sich die Tageszeit (daytime) auf einen beliebigen Wert ändert.&amp;lt;br&amp;gt;&lt;br /&gt;
Um die jeweilige eingetretene Tageszeit zu ermitteln ist der Platzhalter &#039;&#039;&#039;%DAYTIME%&#039;&#039;&#039; vorgesehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime)&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime-&amp;amp;lt;DAYTIME&amp;amp;gt;====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald die jeweilige Tageszeit (daytime) erreicht ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime) auf bestimmten Wert&amp;lt;br&amp;gt;&lt;br /&gt;
Bei &amp;quot;night&amp;quot; könnte man z.B. die Heizung bewohnerunabhängig ausschalten, bei &amp;quot;morning&amp;quot; wieder ein.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceDisable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceDisable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun deaktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional wirklich attr disable für Device setzen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;attr %DEVICE%:FILTER=disable!=1 disable 1; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf gone/none setzen wenn Presence Devices deaktiviert werden&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     my $resident = $1;&lt;br /&gt;
     my $gone = $resident =~ /^rr_/ ? &amp;quot;gone&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set $resident:FILTER=state!=$gone state $gone&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceEnable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceEnable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun aktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional attr disable für Device entfernen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;deleteattr %DEVICE%:FILTER=disable=1 disable; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf home setzen wenn Presence Devices aktiviert werden und anwesend sind&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $1:FILTER=state!=home state home&amp;quot; if (ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;present&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd====&lt;br /&gt;
Befehle die beim Anfang/Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%DND%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun eingeschaltet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun beendet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-off====&lt;br /&gt;
Befehle die beim Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-on====&lt;br /&gt;
Befehle die beim Beginn des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun eingeschaltet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent====&lt;br /&gt;
Befehle die beim Beginn eines beliebigen (holiday)Kalender Events ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten on&amp;quot; if (&amp;quot;%EVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-each====&lt;br /&gt;
Befehle die beim Beginn/Ende eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-URLAUBDAN-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Dan hat jetzt Urlaub!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Der Urlaub von Dan ist nun zu Ende!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-WOHNUNG-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Heizung an/aus schalten&lt;br /&gt;
   my $heiz = &amp;quot;([bksw]z|ku)_Thermostat&amp;quot;;&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /^heizung(..+)?$/i)&lt;br /&gt;
   {&lt;br /&gt;
     my $zeit = $1;&lt;br /&gt;
     if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
 &lt;br /&gt;
       # morgens nicht alle Thermostaten schalten&lt;br /&gt;
       $heiz = &amp;quot;([bks]z|ku)_Thermostat&amp;quot; if ($zeit &amp;amp;&amp;amp; $zeit =~ /morgens?$/i);&lt;br /&gt;
       fhem &amp;quot;set $heiz:FILTER=controlMode!=day controlMode day&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^heizung/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $heiz:FILTER=controlMode!=night controlMode night&amp;quot; if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # WLAN an/aus schalten&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi off&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi on&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Putzfrau (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Gast (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-begin====&lt;br /&gt;
Befehle die beim Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-Neujahr-begin&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set %SENSORSENERGY% meterReset&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-end====&lt;br /&gt;
Befehle die bei Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemDEFINED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn ein neues Gerät angelegt wird (define)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Jedem neu definierten Gerät den Geräte-TYPE auch als Raum im Menüpunkt Module zuweisen&lt;br /&gt;
   fhem &amp;quot;attr %DEFINED% room Module-&amp;gt;&amp;quot;.InternalVal(&amp;quot;%DEFINED%&amp;quot;,&amp;quot;TYPE&amp;quot;,&amp;quot;default&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemINITIALIZED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn FHEM gestartet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg FHEM Home wurde gestartet...&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemSAVE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn in FHEM die Konfigurationsdatei gespeichert wird&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel (Backup von fhem.cfg und fhem.state):&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Datum/Uhrzeit&lt;br /&gt;
   my $now = Timeow();&lt;br /&gt;
   # Leerzeichen durch Unterstriche ersetzen&lt;br /&gt;
   $now =~ s/ /_/g;&lt;br /&gt;
   # Backup der Datei fhem.cfg&lt;br /&gt;
   `cp $attr{global}{configfile} ./backup/fhem.cfg.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.cfg.$now&amp;quot;;&lt;br /&gt;
   # Backup der Datei fhem.state&lt;br /&gt;
   `cp $attr{global}{statefile} ./backup/fhem.state.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.state.$now&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemUPDATE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn das Update von FHEM ausgeführt wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das Update für FHEM ist beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning====&lt;br /&gt;
Befehle die bei Anfang/Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0/1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%ICE%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg push ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!.&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-off====&lt;br /&gt;
Befehle die bei Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-on====&lt;br /&gt;
Befehle die bei Beginn der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation====&lt;br /&gt;
Befehle die beim Ändern der location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation-&amp;amp;lt;LOCATION&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf eine bestimmte location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmte location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode====&lt;br /&gt;
Befehle die beim Ändern von mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-absent-belated====&lt;br /&gt;
Befehle die nachträglich zur Abwesenheit ausgeführt werden sollen, die Zeit kann im Atteribut &amp;quot;HomeModeAbsentBelatedTime&amp;quot; eingestellt werden&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Abwesenheit + XX min&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten mode&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-absent&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set HarmonyHub:FILTER=activity!=PowerOff activity PowerOff;&lt;br /&gt;
 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 set TYPE=SONOSPLAYER:FILTER=Volume&amp;gt;0 Volume 0;&lt;br /&gt;
 set Sonos stopAll;&lt;br /&gt;
 sleep 3;&lt;br /&gt;
 set Wohnung [FILTER=state!=off] off&amp;quot;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 define atTmp_wz_Media_aus_%SELF% at +01:00:00 set HarmonyHub:FILTER=currentActivity!=PowerOff activity PowerOff;&lt;br /&gt;
 define atTmp_wz_Venti_aus_%SELF% at +01:00:00 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 define atTmp_wzLS_aus_%SELF% at +00:30:00 set wz_LS scene aus;&lt;br /&gt;
 define atTmp_all_Sonos_vol_down_%SELF% at +00:02:00 set TYPE=SONOSPLAYER:FILTER=Volume!=0 Volume 0 1;&lt;br /&gt;
 define atTmp_all_Sonos_off_%SELF% at +00:02:30 set Sonos stopAll;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=off off;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=on on&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-gone&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlManu off&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen beliebigen Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von beliebigem Resident ausgelöst&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 msg audio @%AUDIO% Guten Nacht und schlaf&#039; gut %ALIAS%!&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg = &amp;quot;Guten&amp;quot;;&lt;br /&gt;
   $msg .= &amp;quot; %FEIERTAG%&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
   $msg .= &amp;quot; Morgen %ALIAS%&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;msg audio \@%AUDIO% $msg&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;defmod atTmp_wetter_%RESIDENT%_%SELF% at +00:07:00 msg audio Wettervorhersage für heute: %FORECASTTODAY%&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen bestimmten Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von bestimmten Resident ausgelöst&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm====&lt;br /&gt;
Befehle die beim Ändern von modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung modeAlarm&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm-&amp;amp;lt;armaway/armhome/armnight/disarm&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armaway&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%PREVAMODE%&amp;quot; eq &amp;quot;disarm&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Alarmanlage einschalten&lt;br /&gt;
     fhem &amp;quot;set AA_Arm:FILTER=level!=100 alarmLevel armAll&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht zusammensetzen&lt;br /&gt;
     my $msg;&lt;br /&gt;
     $msg .= &amp;quot;Die Alarmanlage ist nun scharf geschaltet!&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
     my $is = &amp;quot;%ALARMHR%&amp;quot; =~ /und/ ? &amp;quot;sind&amp;quot; : &amp;quot;ist&amp;quot;;&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot; if ($msg);&lt;br /&gt;
     $msg .= &amp;quot;ACHTUNG: %ALARMHR% $is noch offen!!!&amp;quot; if (%ALARMCT%);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an ROOMMATE/GUEST senden&lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 &lt;br /&gt;
     # Eingangstür abschließen falls noch nicht geschehen&lt;br /&gt;
     fhem &amp;quot;set fl_Tuerschloss:FILTER=state!=locked lock&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armhome&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armnight&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-disarm&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Alarmanlage ausschalten&lt;br /&gt;
   fhem &amp;quot;set AA_Arm:FILTER=level!=0 alarmLevel disarmed&amp;quot;;&lt;br /&gt;
   my $prio = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # Nachrichtenpriorität auf 1 setzen bei Ankunft (höhere Lautstärke beim Abspielen damit man das auch vor der Tür hört)&lt;br /&gt;
   $prio = &amp;quot; 1&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; eq &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht an ROOMMATE/GUEST senden wenn der vorherige alarmMode nicht &amp;quot;armnight&amp;quot; ist&lt;br /&gt;
   fhem &amp;quot;msg audio \@fl_Sonos$prio Die Alarmanlage ist nun ausgeschaltet %ALIAS%!&amp;quot; if (&amp;quot;%PREVAMODE%&amp;quot; ne &amp;quot;armnight&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion====&lt;br /&gt;
Befehle die bei Statusänderung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: öffnen/schließen eines beliebigen Bewegungsmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Raum aus Sensornamen ermitteln, z.B. bz_Sensor&lt;br /&gt;
   my $room = (split /_/,&amp;quot;%SENSOR%&amp;quot;)[0];&lt;br /&gt;
 &lt;br /&gt;
   # Status des structure aller Lichter dieses Raums&lt;br /&gt;
   my $lichter = Value($room.&amp;quot;_Lichter&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Status des dummy Tageslicht&lt;br /&gt;
   my $tl = Value(&amp;quot;Tageslicht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   if (&amp;quot;%STATE%&amp;quot; eq &amp;quot;geöffnet&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Lichtwert des Sensors&lt;br /&gt;
     my $lum = ReadingsNum(&amp;quot;%SENSOR%&amp;quot;,&amp;quot;luminance&amp;quot;,100);&lt;br /&gt;
 &lt;br /&gt;
     # Löschen des evtl. schon vorhandenen &amp;quot;at&amp;quot;&lt;br /&gt;
     fhem &amp;quot;delete atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot; if (IsDevice(&amp;quot;atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
     # Licht nur wenn kein Tageslicht oder Lichtwert des Sensors kleiner als 10 und AutoLight eingeschaltet und modeAlarm nicht armaway&lt;br /&gt;
     if (($tl eq &amp;quot;off&amp;quot; || $lum &amp;lt; 10) &amp;amp;&amp;amp; $lichter eq &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot; &amp;amp;&amp;amp; &amp;quot;%AMODE%&amp;quot; ne &amp;quot;armaway&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $scene;&lt;br /&gt;
 &lt;br /&gt;
       # verschiedene Szenen für verschiedene Modus bzw. Aussenlichtstärken&lt;br /&gt;
       if (&amp;quot;%MODE%&amp;quot; eq &amp;quot;gotosleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Abend&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (&amp;quot;%MODE%&amp;quot; eq &amp;quot;asleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Nacht&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;gt; 3)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;viel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;lt; 4)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;mittel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       # Schalten der entsprechenden Szene (Modul LightScene)&lt;br /&gt;
       fhem &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene $scene&amp;quot; if ($scene);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     # unterschiedliche Ausschaltzeiten für unterschiedliche Räume&lt;br /&gt;
     my $t = 3;&lt;br /&gt;
     $t = 15 if ($room eq &amp;quot;wz&amp;quot;);&lt;br /&gt;
     $t = 2 if ($room eq &amp;quot;bz&amp;quot; || ($room =~ /wz|ku/ &amp;amp;&amp;amp; &amp;quot;%MODE%&amp;quot; =~ /sleep/));&lt;br /&gt;
     $t = 1 if ($room eq &amp;quot;fl&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Zahl in Minuten umrechnen in einen Zeitpunkt für das &amp;quot;at&amp;quot;&lt;br /&gt;
     my $d = HOMEMODE_hourMaker($t);&lt;br /&gt;
 &lt;br /&gt;
     # Anlegen des &amp;quot;at&amp;quot; zum Ausschalten des Lichts wenn die Lichter angeschaltet sind und auch AutoLight eingeschaltet ist&lt;br /&gt;
     if ($lichter ne &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $cmd = &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene aus&amp;quot;;&lt;br /&gt;
       fhem &amp;quot;defmod atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF% at +$d $cmd&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-off====&lt;br /&gt;
Befehle die bei Ende der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-on====&lt;br /&gt;
Befehle die bei Beginn der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set w_Steckdosen [FILTER=state!=on] on;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode auto&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-device====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein beliebiges Presence Device, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebiges Presence Device&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present-device&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # mindestens 1x täglich den Batteriewert des PRESENCE Geräts bei erkannter Anwesenheit holen&lt;br /&gt;
   fhem &#039;&amp;quot;sudo /opt/fhem/scripts/GTag-bat.sh %DEVICE% %ADDRESS% &amp;amp;&amp;quot;&#039;&lt;br /&gt;
     if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE_/ &amp;amp;&amp;amp; (!defined ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,undef) || ReadingsAge(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,0) &amp;gt; 64800));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen beliebigen Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebigen Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-absent-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Mich benachrichtigen wenn ich nicht zu hause bin und jemand anderes die Wohnung verlässt&lt;br /&gt;
   fhem &amp;quot;msg push \@rr_Dan %ALIAS% hat gerade die Wohnung verlassen!&amp;quot;&lt;br /&gt;
     if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot; &amp;amp;&amp;amp; ReadingsVal(&amp;quot;rr_Dan&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) ne &amp;quot;present&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Verabschiedungsnachricht zusammensetzen&lt;br /&gt;
   my $msg;&lt;br /&gt;
 &lt;br /&gt;
   # Alle außer mich selbst verabschieden&lt;br /&gt;
   $msg .= &amp;quot;Bis bald und auf Wiedersehen %ALIAS%...&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Glättewarnung wenn nötig&lt;br /&gt;
   $msg .= &amp;quot; ACHTUNG!!! Es ist %TEMPERATURE%°C kalt! Somit könnte es glatt werden!&amp;quot; if (%ICE%);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht senden wenn vorhanden&lt;br /&gt;
   fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispielcode für &amp;quot;HomeCMDpresence-present-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # alle Ankommenden außer mir selbst&lt;br /&gt;
   if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Benachrichtigung wenn jemand kommt&lt;br /&gt;
     fhem &amp;quot;msg audio %ALIAS% kommt gerade!&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; ne &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) zusammensetzen&lt;br /&gt;
     my $g = &amp;quot;gute&amp;quot;;&lt;br /&gt;
     $g .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) senden &lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% Willkommen und $g %DAYTIME% %ALIAS%!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmten Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;-&amp;amp;lt;DEVICE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein bestimmtes Presence Device eines bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Dieses Attribut ist nur verfügbar wenn ein Resident mehr als ein Presence Device hat&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmtes Presence Device eines bestimmten Resident&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Jahreszeit&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $t = &amp;quot;%SEASON%&amp;quot;;&lt;br /&gt;
   $t .= &amp;quot;s&amp;quot; if ($t eq &amp;quot;Frühling&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;msg push Die Wohnung ist nun im $t-Modus!&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set Heizungen [FILTER=controlMode!=auto] controlMode auto&amp;quot; if ($t ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason-&amp;amp;lt;SEASON&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit in eine bestimmte Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung bestimmte Jahreszeit&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight====&lt;br /&gt;
Befehle die bei Änderung der Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight-&amp;amp;lt;sr/sr_astro/sr_civil/sr_indoor/sr_weather/ss/ss_astro/ss_civil/ss_indoor/ss_weather&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung zu bestimmter Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung zu bestimmter Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn====&lt;br /&gt;
Befehle die bei Beginn/Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn/Ende der UWZ Warnungen&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-begin====&lt;br /&gt;
Befehle die bei Beginn der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg %UWZLONG%&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-end====&lt;br /&gt;
Befehle die beim Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg Alle Unwetterwarnungen sind nun beendet!&lt;br /&gt;
&lt;br /&gt;
=Platzhalter=&lt;br /&gt;
==verfügbar in allen HomeCMD Attributen==&lt;br /&gt;
===%ADDRESS%===&lt;br /&gt;
MAC Adresse des zuletzt ausgelösten Presence Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALARM%===&lt;br /&gt;
Liste mit Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&lt;br /&gt;
&lt;br /&gt;
===%ALARMCT%===&lt;br /&gt;
Anzahl der ausgelösten Alarm Geräte&lt;br /&gt;
&lt;br /&gt;
===%ALARMHR%===&lt;br /&gt;
Liste mit (human readable) Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für msg benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
Alias des zuletzt ausgelösten Resident&lt;br /&gt;
&lt;br /&gt;
===%AMODE%===&lt;br /&gt;
aktueller Alarm Mode&lt;br /&gt;
&lt;br /&gt;
===%AEAH%===&lt;br /&gt;
Wert von anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 1 wenn on und 0 wenn off&lt;br /&gt;
&lt;br /&gt;
===%ARRIVERS%===&lt;br /&gt;
Alias-Liste der ROOMMATE/GUEST deren location auf arrival steht&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Residents zu begrüßen&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. Peter, Paul und Marry&lt;br /&gt;
&lt;br /&gt;
===%AUDIO%===&lt;br /&gt;
Audio Device des zuletzt ausgelösten ROOMMATE/GUEST (Attribut msgContactAudio)&amp;lt;br&amp;gt;&lt;br /&gt;
wenn das Attribut msgContactAudio des jeweiligen Resident keinen Wert hat, so wird versucht den Wert des Attributs aus dem globalMsg (sofern vorhanden) auszulesen&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Resident spezifische msg(s) vom Typ audio zu senden, z.B. Nacht/Morgen Grüße/Wünsche&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOW%===&lt;br /&gt;
Alias des zu letzt gemeldeten Geräts mit niedrigem Batteriestand&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWALL%===&lt;br /&gt;
Wert des Reading batteryLow_hr&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWCT%===&lt;br /&gt;
Wert des Reading batteryLow_ct&lt;br /&gt;
&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Reading condition des überwachten Yahoo weather Device&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für Wetter(vorhersage) benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%CONTACT%===&lt;br /&gt;
Wert des Reading lastContact (Name des zuletzt geöffneten Kontakt Sensor)&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um msg zu versenden&lt;br /&gt;
&lt;br /&gt;
===%DAYTIME%===&lt;br /&gt;
Wert des Reading daytime&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Tageszeit spezifische Aktionen zu schalten&lt;br /&gt;
&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
Name des zuletzt ausgelösten Presence Gerät&lt;br /&gt;
&lt;br /&gt;
===%DEVICEA%===&lt;br /&gt;
Wert des Reading lastAbsentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DEVICEP%===&lt;br /&gt;
Wert des Reading lastPresentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DISABLED%===&lt;br /&gt;
Wert des Reading devicesDisabled&lt;br /&gt;
&lt;br /&gt;
===%DND%===&lt;br /&gt;
DND Status&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn an, 0 wenn aus&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCE%===&lt;br /&gt;
Wert des Reading durTimerAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCELAST%===&lt;br /&gt;
Wert des Reading lastDurAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCE%===&lt;br /&gt;
Wert des Reading durTimerPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCELAST%===&lt;br /&gt;
Wert des Reading lastDurPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEP%===&lt;br /&gt;
Wert des Reading durTimerSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEPLAST%===&lt;br /&gt;
Wert des Reading lastDurSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME&amp;gt;%===&lt;br /&gt;
Event des benannten Kalenders&amp;lt;br&amp;gt;&lt;br /&gt;
0 wenn kein gerade kein Event ist&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME-EVENTNAME&amp;gt;%===&lt;br /&gt;
0 wenn das benannte Event nicht aktiv ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn das benannte Event aktiv ist&lt;br /&gt;
&lt;br /&gt;
===%FORECAST%===&lt;br /&gt;
Wettervorhersage für morgen&lt;br /&gt;
&lt;br /&gt;
===%FORECASTTODAY%===&lt;br /&gt;
Wettervorhersage für heute&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITY%===&lt;br /&gt;
Wert des Reading humidity von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITYTREND%===&lt;br /&gt;
Wert des Reading humidityTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%ICE%===&lt;br /&gt;
0 wenn keine Eiswarnung besteht&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn Eiswarnung besteht&lt;br /&gt;
&lt;br /&gt;
===%IP%===&lt;br /&gt;
Wert des Reading publicIP von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LIGHT%===&lt;br /&gt;
Wert des Reading light von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATION%===&lt;br /&gt;
Wert des Reading location von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATIONR%===&lt;br /&gt;
Wert des Reading location des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCE%===&lt;br /&gt;
Wert des Reading luminance von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCETREND%===&lt;br /&gt;
Wert des Reading luminanceTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%MODE%===&lt;br /&gt;
gerade aktiver Modus von HOMEMODE (Reading mode)&lt;br /&gt;
&lt;br /&gt;
===%MODEALARM%===&lt;br /&gt;
aktueller Alarm Mode (wie %AMODE%)&lt;br /&gt;
&lt;br /&gt;
===%MOTION%===&lt;br /&gt;
Wert des Reading lastMotion von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%NAME%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %SELF%)&lt;br /&gt;
&lt;br /&gt;
===%OPEN%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENCT%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENHR%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PANIC%===&lt;br /&gt;
0 wenn panic ausgeschaltet ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn panic eingeschaltet ist&lt;br /&gt;
&lt;br /&gt;
===%RESIDENT%===&lt;br /&gt;
Name des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PRESENT%===&lt;br /&gt;
presence von HOMEMODE&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESENTR%===&lt;br /&gt;
presence des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESSURE%===&lt;br /&gt;
Wert des Reading pressure von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PRESSURETREND%===&lt;br /&gt;
Wert des Reading pressureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVAMODE%===&lt;br /&gt;
vorheriger modeAlarm von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVCONTACT%===&lt;br /&gt;
vorheriger geöffneter Kontaktsensor&lt;br /&gt;
&lt;br /&gt;
===%PREVMODE%===&lt;br /&gt;
vorheriger mode von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVMODER%===&lt;br /&gt;
vorheriger state des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PREVMOTION%===&lt;br /&gt;
vorheriger geöffneter Bewegungsmelder&lt;br /&gt;
&lt;br /&gt;
===%SEASON%===&lt;br /&gt;
Wert des Reading season von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SELF%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %NAME%)&lt;br /&gt;
&lt;br /&gt;
===%SENSORSBATTERY%===&lt;br /&gt;
Liste aus Internal SENSORSBATTERY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSCONTACT%===&lt;br /&gt;
Liste aus Internal SENSORSCONTACT&lt;br /&gt;
&lt;br /&gt;
===%SENSORSENERGY%===&lt;br /&gt;
Liste aus Internal SENSORSENERGY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSMOTION%===&lt;br /&gt;
Liste aus Internal SENSORSMOTION&lt;br /&gt;
&lt;br /&gt;
===%SENSORSSMOKE%===&lt;br /&gt;
Liste aus Internal SENSORSSMOKE&lt;br /&gt;
&lt;br /&gt;
===%SMOKE%===&lt;br /&gt;
Wert des Reading alarmSmoke von HOMEMODE&lt;br /&gt;
0 wenn kein Alarm&lt;br /&gt;
&lt;br /&gt;
===%SMOKECT%===&lt;br /&gt;
Wert des Reading alarmSmoke_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SMOKEHR%===&lt;br /&gt;
Wert des Reading alarmSmoke_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPERED%===&lt;br /&gt;
Wert des Reading sensorsTampered von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDCT%===&lt;br /&gt;
Wert des Reading sensorsTampered_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDHR%===&lt;br /&gt;
Wert des Reading sensorsTampered_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURE%===&lt;br /&gt;
Wert des Reading temperature von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURETREND%===&lt;br /&gt;
Wert des Reading temperatureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TOBE%===&lt;br /&gt;
are/sind oder is/ist der Wetterkondition&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHT%===&lt;br /&gt;
Wert des Reading twilight von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHTEVENT%===&lt;br /&gt;
aktuelles twilight Event&lt;br /&gt;
&lt;br /&gt;
===%UWZ%===&lt;br /&gt;
UWZ Warnlevel&lt;br /&gt;
&lt;br /&gt;
===%UWZLONG%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (lange Version)&lt;br /&gt;
&lt;br /&gt;
===%UWZSHORT%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (kurze Version)&lt;br /&gt;
&lt;br /&gt;
===%WEATHER%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather short&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WEATHERLONG%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather long&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WIND%===&lt;br /&gt;
Wert des Reading wind von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%WINDCHILL%===&lt;br /&gt;
Wert des Reading wind_chill vom eingebundenen Yahoo Wetter Gerät&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDcontact, HomeCMDmotion und HomeCMDalarm Attributen==&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%SENSOR%===&lt;br /&gt;
name des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%STATE%===&lt;br /&gt;
state des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeTextWeatherForecast Attributen==&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Readings condition des Yahoo Weather Geräts&lt;br /&gt;
&lt;br /&gt;
===%DAY%===&lt;br /&gt;
Tag der Wettervorhersage (1 - heute, 2 - morgen)&lt;br /&gt;
&lt;br /&gt;
===%HIGH%===&lt;br /&gt;
maximale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
===%LOW%===&lt;br /&gt;
minimale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDevent Attributen==&lt;br /&gt;
===%CALENDAR%===&lt;br /&gt;
Name der Kalenders&lt;br /&gt;
&lt;br /&gt;
===%DESCRIPTION%===&lt;br /&gt;
Beschreibung des aktuellen Event des Kalenders (nicht verfügbar bei holiday Geräten)&lt;br /&gt;
&lt;br /&gt;
===%EVENT%===&lt;br /&gt;
Name/Titel des aktuellen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
===%PREVEVENT%===&lt;br /&gt;
Name/Titel des vorherigen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDdevice Attributen==&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
name der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
=Benötigte Events=&lt;br /&gt;
Folgende Events werden von HOMEMODE ausgewertet bzw. werden benötigt damit HOMEMODE vollumfänglich funktionieren kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;DEVICE-TYPE&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;EVENT&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;RESIDENTS&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;ROOMMATE,GUEST&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wayhome&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSCONTACT}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsContactReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSMOTION}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsMotionReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSLUMINANCE}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;luminance&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsLuminanceReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSENERGY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;power&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;energy&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsPowerEnergyReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSBATTERY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;battery&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsBatteryReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomePresenceDeviceType&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeYahooWeatherDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wind&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeTwilightDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;light&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;twilight&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;aktEvent&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorTemperatureOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorHumidityOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeEventsHolidayDevices&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeUWZ&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;WarnCount&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=24570</id>
		<title>HOMEMODE</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=24570"/>
		<updated>2018-01-16T22:35:23Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* Allgemeines */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Das Modul wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden und viele grundlegende Automationen durch Hinzufügen weiterer Geräte bereitzustellen.&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=HOMEMODE&lt;br /&gt;
|ModFTopic=64317&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=22_HOMEMODE.pm&lt;br /&gt;
|ModOwner=DeeSPe&lt;br /&gt;
}}&lt;br /&gt;
Diese Seite beschreibt die Konfiguration und Verwendung des Moduls &#039;&#039;22_HOMEMODE.pm&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Das Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier aufgeführte Anleitung entspricht dem Modul in Version 1.4.2.&lt;br /&gt;
&lt;br /&gt;
Viele allgemein typische Automationen sind bereits fertig integriert.&lt;br /&gt;
&lt;br /&gt;
Die jeweils per Event auszuführenden Befehle können in den entsprechenden &#039;&#039;HomeCMD...&#039;&#039; Atributen hinterlegt werden und so in der Detail Ansicht des HOMEMODE Geräts übersichtlich angezeigt und bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen vieler notify/DOIF ist durch den Einsatz von &#039;&#039;HOMEMODE&#039;&#039; unnötig.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wurde das Modul für die Verwendung mit HomeKit als GUI optimiert. Alle möglichen Mappings für Homebridge sind bereits enthalten und können über einen set Befehl aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:HOMEMODE_Device.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Um Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; benutzen zu können benötigt man als Mindestvoraussetzung ein bereits angelegtes RESIDENTS Gerät mit entsprechenden ROOMMATE/GUEST Geräten.&lt;br /&gt;
&lt;br /&gt;
==Mögliche Automationen==&lt;br /&gt;
Alle Automationen sind optional.&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Beispiele:&lt;br /&gt;
*Änderung des Zustands von ROOMMATE/GUEST Geräten anhand von PRESENCE Geräten&lt;br /&gt;
*Bereistellung von CMD Attributen für mögliche Events rund um den Heim-/Hausstatus&lt;br /&gt;
*Bereistellung von Platzhaltern innerhalb der CMD Attribute, z.B. %MODE%, %SEASON% oder %PREVMODE% für die Werte der Readings mode, season und prevMode&lt;br /&gt;
*Einbindung von Kontakt Sensoren, für z.B. Offen-Warnungen nach bestimmten Zeitraum oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Kontakt Sensor konfiguriert werden&lt;br /&gt;
*Einbindung von Bewegungs Sensoren, für z.B. automatische Licht Schaltungen oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Bewegungs Sensor konfiguriert werden&lt;br /&gt;
*Darstellungen und Auslösen von Sabotage Alarmen der eingebundenen Kontakt- und Bewegungssensoren&lt;br /&gt;
*Einbindung von jeweils einem Temperatur und Luftfeuchtigkeitssensor&lt;br /&gt;
*Einbindung eines lokalen Yahoo Wetter Devices zur Ermittlung und Ausgabe der lokalen Wetterdaten und Erzeugung der Wettervorhersage&lt;br /&gt;
*Einbindung von Power und Energy Sensoren zur Ermittlung der Gesamtmengen&lt;br /&gt;
*Einbindung von Calendar/holiday Devices für spezielle im HOMEMODE Device verfügbar zu machende Events&lt;br /&gt;
*von Uhrzeit abhängiger Anwesend-Modus&lt;br /&gt;
*Bewohner unabhängige Tageszeit-Modus&lt;br /&gt;
*Alarm-Modus&lt;br /&gt;
*DND-Modus&lt;br /&gt;
*Überwachung von Batteriewerten&lt;br /&gt;
&lt;br /&gt;
=HOMEMODE-Gerät=&lt;br /&gt;
==Definition==&lt;br /&gt;
Das HOMEMODE Gerät - hier mit dem Namen &#039;&#039;Home&#039;&#039; versehen - selbst wird über&lt;br /&gt;
 define Home HOMEMODE&lt;br /&gt;
bei Vorhandensein nur eines RESIDENTS Geräts definiert.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung mehrerer RESIDENTS Geräte muss das Master RESIDENTS Gerät beim Definieren mit angegeben werden&lt;br /&gt;
 define Home HOMEMODE rgr_Residents&lt;br /&gt;
Dieses Modul verwendet das globale Attribut &#039;&#039;language&#039;&#039; zur Bestimmung der Anzeigedaten (Standard: EN=english). Für deutsche Ausgabedaten kann das Attribut&lt;br /&gt;
 attr global language DE&lt;br /&gt;
gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Alternativ kann auch nur das HOMEMODE Gerät auf deutsch geändert werden&lt;br /&gt;
 attr Home HomeLanguage DE&lt;br /&gt;
&lt;br /&gt;
==Set-Befehle==&lt;br /&gt;
&#039;&#039;set &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 set Home anyoneElseAtHome &amp;lt;on/off&amp;gt;&lt;br /&gt;
einschalten wenn jemand anderes zu Hause ist der kein registrierter ROOMMATE/GUEST ist, z.B. Hund/Katze oder unregistrierte Gäste&amp;lt;br&amp;gt;&lt;br /&gt;
wenn eingeschaltet, dann wird der Alarm Mode beim Verlassen statt auf armaway nur auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
schaltet man ein und hat schon Haus/Wohnung verlassen, so wird der Alarm Mode von armaway auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AEAH%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd &amp;lt;on/off&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. um Benachrichtigungen zu deaktivieren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DND%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd-for-minutes &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus für die angegebenen Minuten ein&amp;lt;br&amp;gt;&lt;br /&gt;
kehrt danach zum vorherigen (tageszeitabhängigen) Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home deviceDisable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
deaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home deviceEnable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
reaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home location &amp;lt;arrival/home/bed/underway/wayhome&amp;gt;&lt;br /&gt;
manueller Ortswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%LOCATION%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home mode &amp;lt;morning/day/afternoon/evening/night/gotosleep/asleep/absent/gone/home&amp;gt;&lt;br /&gt;
manueller Moduswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm &amp;lt;armaway/armhome/armnight/disarm&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVAMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm-for-minutes &amp;lt;armaway/armhome/armnight/disarm&amp;gt; &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus für die angegebenen Minuten ein&lt;br /&gt;
kehrt danach zum vorherigen Alarm Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home updateHomebridgeMapping&lt;br /&gt;
aktualisiert das Attribut homebridgeMapping des HOMEMODDE Device abhängig von den verfügbaren Informationen&lt;br /&gt;
&lt;br /&gt;
 set Home updateInternalForce&lt;br /&gt;
führt eine Aktualisierung der Internals des HOMEMODE Device aus&amp;lt;br&amp;gt;&lt;br /&gt;
das sollte manuell benutzt werden nachdem das Modul aktualisiert und nur ein reload statt restart gemacht wurde&amp;lt;br&amp;gt;&lt;br /&gt;
auch wenn man überwachte/kontrollierte Geräte ändert sollte man diesen Befehl manuell ausführen, z.B. neue ROOMMATE/GUEST im RESIDENTS Device hinzufügt, oder Geräte in FHEM hinzufügt die dem selben Devspec wie bisher entsprechen (Steckdosen, Sensoren)&lt;br /&gt;
&lt;br /&gt;
==Get-Befehle==&lt;br /&gt;
&#039;&#039;get &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 get Home contactsOpen &amp;lt;all/doorsinside/doorsoutside/doorsmain/outside/windows&amp;gt;&lt;br /&gt;
Liste von all/doorsinside/doorsoutside/doorsmain/outside/windows offenen Kontakten&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%OPEN%&#039;&#039;&#039;, &#039;&#039;&#039;%OPENCT%&#039;&#039;&#039; und &#039;&#039;&#039;%OPENHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home devicesDisabled&lt;br /&gt;
Anzeige der für HOMEMODE deaktivierten Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home mode&lt;br /&gt;
Anzeige von mode&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home modeAlarm&lt;br /&gt;
Anzeige von modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%MODEALARM%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home publicIP&lt;br /&gt;
holen der öffentlichen IP Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%IP%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home sensorsTampered&lt;br /&gt;
Liste aller sabotierten Sensoren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%TAMPERED%&#039;&#039;&#039;, &#039;&#039;&#039;%TAMPEREDCT%&#039;&#039;&#039; und &#039;&#039;&#039;%TAMPEREDHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weather &amp;lt;long/short&amp;gt;&lt;br /&gt;
Wetterinfo im angegebenen Format anzeigen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%WEATHER%&#039;&#039;&#039; und &#039;&#039;&#039;%WEATHERLONG%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weatherForecast [TAG]&lt;br /&gt;
Wettervorhersage für angegebenen Tag&amp;lt;br&amp;gt;&lt;br /&gt;
wenn kein Tag angegeben wird, so wird die Vorhersage für morgen (2) asugegeben&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%FORECAST%&#039;&#039;&#039; (morgen) und &#039;&#039;&#039;%FORECASTTODAY%&#039;&#039;&#039; (heute) sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
==webCmd==&lt;br /&gt;
Die Schaltmöglichkeiten sind absichtlich gering gehalten, denn im normalen Betrieb sollte nicht mehr benötigt werden als die hier gebotenen.&amp;lt;br&amp;gt;&lt;br /&gt;
Es lässt sich der Alarm Mode manuell umschalten und beim Klick auf das devStateIcon wird der DND Mode an- und ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
==Grundkonfiguration==&lt;br /&gt;
&lt;br /&gt;
Diese Grundkonfiguration sollte immer als erstes erfolgen um entsprechend darauf weiter aufzubauen. Als zweiter Schritt ist dann die erweiterte Konfiguration angedacht.&lt;br /&gt;
&lt;br /&gt;
Bei der Namensvergabe der Attribute vom HOMEMODE Device wurde nach einem möglichst kurzem Prefix gesucht und nach vielen Tests wurde sich für das Prefix &amp;quot;Home&amp;quot; entschieden. Das hat den Vorteil dass alle Attribute beisammen stehen und diese auch (durch den Großbuchstaben am Anfang) ziemlich weit oben in der Liste der Attribute stehen. Ebenso wurde bei der Namensvergabe versucht selbsterklärende Namen zu wählen, das hat den Vorteil dass man relativ einfach genau erkennen kann wofür das Attribut steht, allerdings auch den Nachteil dass einige Attributnamen ganz schön lang werden.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedUserAttr====&lt;br /&gt;
Als Erstes wird empfohlen, gerade für Anfänger, das Attribut &amp;quot;HomeAdvancedUserAttr&amp;quot; auf 1 zu setzen. Dadurch werden viel mehr HomeCMD Attribute freigeschaltet. Diese werden im Attribut userattr des HOMEMODE Device hinzugefügt.&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAlarmModes====&lt;br /&gt;
Als nächstes sollte man sich entscheiden ob die Alarm Modus evtl. nicht automatisch zum jeweiligen Modus des HOMEMODE Device geschaltet werden sollen. Standardmäßig werden die Alarm Modus automatisch gesteuert. Ist das nicht erwünscht, so ist der Wert dieses Attributs auf 0 zu setzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;absent&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armaway&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;home&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;disarm&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;asleep&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armnight&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Alarm Modus &amp;quot;armhome&amp;quot; kann nur manuell gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeAutoArrival====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird bei Ankunft jedes ROOMMATE/GUEST die location des jeweiligen ROOMMATE/GUEST für die hier angegeben Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt. Beim ersten nach Hause kommenden ROOMMATE/GUEST wird zusätzlich die location des HOMEMODE Device für die hier eingestellte Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Ablauf der hier eingestellten Minuten wechelt das jeweilige Device von &amp;quot;arrival&amp;quot; auf &amp;quot;home&amp;quot; sofern es noch die location &amp;quot;arrival&amp;quot; hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAsleep====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Schlafengehen (gotosleep) jedes ROOMMATE/GUEST ein Timer gestartet der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;asleep&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAwoken====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Erwachen (&amp;quot;awoken&amp;quot; oder &amp;quot;home nach asleep&amp;quot;) jedes ROOMMATE/GUEST dieser auf &amp;quot;awoken&amp;quot; gesetzt und ein Timer gestartet der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;home&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoDaytime====&lt;br /&gt;
Standardmäßig wird mode anhand der Tageszeit automatisch gesetzt. Ist das nicht gewünscht kann das über den Wert 0 deaktiviert werden. Dann stehen allerdings tageszeitabhängigen mode(s) nicht mehr zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeResidentCmdDelay====&lt;br /&gt;
Normalerweise werden die Events der ROOMMATE/GUEST vor denen des HOMEMODE Device ausgeführt, um das zu ändern wird die Ausführung der ROOMMATE/GUEST HomeCMD Attribute um die hier eingestellte Zeit in Sekunden verzögert.&amp;lt;br&amp;gt;&lt;br /&gt;
Je genauer der Name des jeweiligen HomeCMD Attributs beschrieben wird, desto später wird dieser ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Das heißt z.B. dass HomeCMDmode vor HomeCMDmode-absent und dieser wiederrum vor HomeCMDmode-absent-ROOMMATE/GUEST-NAME ausgeführt wird usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Um das normale Verhalten wiederherzustellen ist der Wert dieses Attributs auf 0 zu setzen. Dann wird HomeCMDmode-absent-ROOMMATE/GUEST-NAME vor HomeCMDmode-absent und vor HomeCMDmode ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis unendlich in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
==Konfiguration Presence Devices (automatische anwesend/abwesend Umschaltung von ROOMMATE/GUEST)==&lt;br /&gt;
Damit die automatische Zuordnung der Presence Devices zu ihren ROOMMATE/GUEST Devices zuverlässig funktioniert, ist es nötig dass der Hauptteil des Namens des ROOMMATE/GUEST innerhalb des Namens des zugehörigen PRESENCE Device(s) vorkommt.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Attribut HomePresenceDeviceType kann man den zu suchenden TYPE von Presence Device vorgeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Per Default werden nur Devices vom TYPE PRESENCE gesucht und versucht den ROOMMATE/GUEST zuzuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls man z.B. auch Devices vom TYPE dummy zur Anwesenheitssteuerung benutzt, kann man diese im Attribut HomePresenceDeviceType mit hinzunehmen. Es sind alles Device TYPEn möglich die ein &amp;quot;presence&amp;quot; Reading mit den Werten &amp;quot;present/appeared&amp;quot; und &amp;quot;absent/disappeared&amp;quot; bereitstellen. Mehrere TYPEn sind möglich da in diesem Attribut ein Regex erwartet wird. z.B.: dummy oder PRESENCE|dummy oder PRESENCE|dummy|ONKYO_AVR.&lt;br /&gt;
&lt;br /&gt;
===Beispiel===&lt;br /&gt;
Der Device Name meines ROOMMATE ist &amp;quot;rr_Dan&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf der Suche nach dem zugehörigen Presence Device wird der erste Teil (rr_ oder rg_) weggeschnitten und der Rest in Kleinbuchstaben umgewandelt.&amp;lt;br&amp;gt;&lt;br /&gt;
Mit dem was übrig bleibt, bei mir also nur dan, werden die möglichen Presence Devices versucht zu erkennen.&amp;lt;br&amp;gt;&lt;br /&gt;
Mein zugehöriges Presence Device heißt, historisch gewachsen, PRESENCE_rr_Dan und würde somit problemlos zugeordnet werden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen der zugehörigen Presence Devives könnten in ihrer kürzesten Form auch wie folgt sein um meinen ROOMMATE/GUEST Device zugeordnet zu werden:&amp;lt;br&amp;gt;&lt;br /&gt;
 pdan&lt;br /&gt;
 danp&lt;br /&gt;
 ZDan&lt;br /&gt;
 DANZ&lt;br /&gt;
 wenndannsonst&lt;br /&gt;
Aber Achtung, es funktioniert nicht mehr wenn die Namen nicht eindeutig sind. Wenn es z.B. eine rr_Dana geben würde mit Presence Device Name &amp;quot;pdani&amp;quot;, dann würde dieser Name auch bei mir (dan) passen. Das könnte man aber auch bewußt nutzen um mit einem Presence Device 2 ROOMMATE/GUEST Devices gleichzeitig zu steuern.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn die Namen wirklich absolut eindeutig sind, dann könnte man den Regex im Attribut HomePresenceDeviceType sogar auf &amp;quot;.*&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Werden pro ROOMMATE/GUEST mehrere Presence Devices gefunden und zugeordnet, so wird automatisch dass Attribut HomePresenceDeviceAbsentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt; auf die Anzahl der gefundenen Presence Devices gesetzt, so dass der/die jeweilige ROOMMATE/GUEST immer erst als abwesend gewertet wird sobald alle zugehörigen Presence Devices abwesend sind. Analog dazu gibt es noch das Attribut HomePresenceDevicePresentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresence====&lt;br /&gt;
Ist dieses Attribut auf 1 gesetzt, so werden die ROOMMATE/GUEST Devices automatisch zum Status ihrer zugehörigen PRESENCE Devices geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device present - ROOMMATE/GUEST home&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device absent - ROOMMATE/GUEST absent&amp;lt;br&amp;gt;&lt;br /&gt;
Falls es sich bei den von Euch benutzen PRESENCE Devices nicht um Devices vom TYPE PRESENCE handeln sollte, sondern z.B. um PRESENCE und dummy, so kann dieses im Attribut HomePresenceDeviceType als Regex konfiguriert werden! z.B.: PRESENCE|dummy&amp;lt;br&amp;gt;&lt;br /&gt;
Damit ein Device als Presence Device erkannt werden kann, muss dieses über ein presence Reading verfügen.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresenceSuppressState====&lt;br /&gt;
unterdrücke Anwesenheitsänderung in angegebenen State(s) der RESIDENTS&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. für &amp;quot;mysteriös&amp;quot; verschwindende Anwesenheitsgeräte in der Nacht&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: asleep|awoken|gotosleep&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceType====&lt;br /&gt;
Regex des TYPEs/der TYPEn von Presence Devices&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Regex der Device TYPEn&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: PRESENCE&lt;br /&gt;
&lt;br /&gt;
==Erweiterte Konfiguration==&lt;br /&gt;
Um das HOMEMODE Device vollumfänglich zu benutzen ist es sinnvoll weitere Devices (zur Überwachung) hinzuzufügen.&lt;br /&gt;
&lt;br /&gt;
Die bereits möglichen hinzuzufügenden Devices werden hier folgend nach Attributnamen erklärt.&lt;br /&gt;
&lt;br /&gt;
===Attribute zum Hinzufügen weiterer Geräte===&lt;br /&gt;
&lt;br /&gt;
====HomeEventsCalendarDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeEventsHolidayDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorAirpressure====&lt;br /&gt;
Luftdrucksensor aussen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorHumidityOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussensensors für Luftfeuchtigkeit anzugeben. Dieser muss ein Reading humidity besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für (Aussen)Luftfeuchtigkeit und Aussentemperatur ein und der selbe ist, so muss dieser nur einmalig im Attribut HomeSensorTemperatureOutside hinterlegt werden. Dieser muss dann die beiden Readings humidity und temperature haben. Im Bedarfsfall können diese Readings auch vorher entsprechend durch eigene userReadings erstellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%HUMIDITY%&#039;&#039;&#039; für den Wert des Readings humidity zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorTemperatureOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussentemperatursensors anzugeben. Dieser muss mindestens ein Reading temperature besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für Aussentemperatur auch ein Reading humidity besitzen sollte und dieses auch der Sensor für die Aussenlufteuchtigkeit ist, so muss dieser nur einmalig hier in diesem Attribut hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%TEMPERATURE%&#039;&#039;&#039; für den Wert des Readings temperature zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading temperature und optional humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContact====&lt;br /&gt;
Hier können alle Kontakt Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDcontact Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das optische und magnetische Kontaktsensoren vom HomeMatic. HM-SEC-SCo und HM-SEC-SC-2.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;model=HM-SEC-SC(o|-2)&#039;&#039;&#039; eingetragen um alle diese Kontaktsensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Kontaktsensoren mit ihren Namen im Internal SENSORSCONTACT des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Kontaktsensor folgende Attribute im Attribut userattr hinzugefügt:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====HomeContactType=====&lt;br /&gt;
Typ des Kontakts - wird versucht anhand des Namen/Alias beim Hinzufügen zum HOMEMODE Device zu ermitteln, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: doorinside,dooroutside,doormain,window&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: window&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Kontaktsensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModes=====&lt;br /&gt;
Regex der Mode(s) des HOMEMODE Device in denen keine Offen Warnungen erfolgen sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist ein Kontakt geöffnet während die hier eingestellten Mode(s) eintreten, so wird der noch bestehende Timer abgebrochen. Entgegengesetzt startet er wieder sobal die hier eingestellten Mode(s) verlassen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist hier z.B. &amp;quot;gotosleep|asleep&amp;quot; eingestellt, so kann man z.B. das Fenster schon vor dem Auslösen von gotosleep oder asleep öffnen und der bestehende Offenwarnung-Timer wird dann abgebrochen. Sobald man am Morgen z.B. awoken oder home auslöst, so wird ein neuer Timer gestartet der einen dann an das noch offene Fenster erinnert.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle Modes des HOMEMODE Device&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModesResidents=====&lt;br /&gt;
Devspec der ROOMMATE/GUEST Devices deren Status statt der Modes des HOMEMODE Device für Attribut HomeOpenDontTriggerModes benutzt werden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle überwachten ROOMMATE/GUEST&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenMaxTrigger=====&lt;br /&gt;
Maximale Anzahl an Warnmeldungen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ganze Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimes=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimesDividers=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactOpenTimeDividers des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2 1 2 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsContactReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactReadings====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeDividers====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeOpenTimesDividers in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 2 1 2 2.5 (für 4 Jahreszeiten)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeMin====&lt;br /&gt;
Minimale Zeit in Minuten die mindestens für eine Offenwarnung gewartet werden soll - im Falle dass sich durch den Teiler evtl. zu kleine Werte ergeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: eine Zahle mit max. einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimes====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 7.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminance====&lt;br /&gt;
Devspec von (Innen-)Lichtsensoren deren Durchschnittswert berechnet werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotion====&lt;br /&gt;
Hier können alle Bewegungs Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDmotion Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Motion Sensor Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0801-1001|010f-0800-1001&#039;&#039;&#039; eingetragen um alle diese Bewegungssensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Damit bei den Gen5 Sensoren auch das open im reading state steht, habe ich mir bei diesen Sensoren ein userReading angelegt.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Bewegungssensoren mit ihren Namen im Internal SENSORSMOTION des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Bewegungssensor folgende Attribute im Attribut userattr hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Bewegungssensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsMotionReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeSensorLocation=====&lt;br /&gt;
Standort des Bewegungssensors (außen oder innen) - wird standardmäßig beim Hinzufügen zum HOMEMODE Device auf &amp;quot;inside&amp;quot; gesetzt, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: inside,outside&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: inside&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsMotionValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionReadings====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergy====&lt;br /&gt;
Hier können alle Energie Sensoren als Devspec hinterlegt werden. Diese müssen die beiden Readings power und energy besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Anhand dieser Readings wird dann der Gesamtverbrauch und die derzeitige gesamte Leistungsaufnahme berechnet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Wall Plugs Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0600-1000|010f-0602-1001&#039;&#039;&#039; eingetragen um alle diese Energie Sensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec mit vorhandenen energy und power Readings&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmoke====&lt;br /&gt;
Devspec mit Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorWindspeed====&lt;br /&gt;
Sensor für Windgeschwindigkeit&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors und Reading der Windgeschwindigkeit separiert mit : (z.B. ga_Windsensor:wind)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBattery====&lt;br /&gt;
Devspec von Batteriesensoren mit einem Reading &amp;quot;battery&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerAnyoneElseAtHome====&lt;br /&gt;
auslösendes Gerät für anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn:valueOff&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerPanic====&lt;br /&gt;
auslösendes Gerät für Panikalarm&amp;lt;br&amp;gt;&lt;br /&gt;
valueOff ist optional, wird es weggelassen, so fungiert valueOn als toggle&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn[:valueOff]&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTwilightDevice====&lt;br /&gt;
Hier ist der Name des lokalen Twilight Device anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich die Platzhalter &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039;, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; in den HomeCMD Attributen zur Verfügung. &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039; wird dann durch das Reading light, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; durch das Reading twilight und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; durch das aktuelle Twilight Event ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeUWZ====&lt;br /&gt;
Hier ist der Name des lokalen UWZ Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%UWZ%&#039;&#039;&#039;, &#039;&#039;&#039;%UWZSHORT%&#039;&#039;&#039; und &#039;&#039;&#039;%UWZLONG%&#039;&#039;&#039; sind verfügbar in allen HomeCMD Attributen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des UWZ Geräts&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeYahooWeatherDevice====&lt;br /&gt;
Hier ist der Name des lokalen Yahoo Weather Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich einige Platzhalter zur Verfügung. Für die genaue Beschreibung derer siehe &amp;quot;Platzhalter&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
===HomeText Attribute===&lt;br /&gt;
Die HomeText Attribute sind größtenteils zur Übersetzung einiger benötigter Begriffe gedacht.&amp;lt;br&amp;gt;&lt;br /&gt;
In den speziellen Attributen die mit HomeTextWeather anfangen, sind ganze Texte mit entsprechenden Platzhaltern einzufügen.&lt;br /&gt;
&lt;br /&gt;
====HomeTextAndAreIs====&lt;br /&gt;
Übersetzung für &amp;quot;and&amp;quot;, &amp;quot;are&amp;quot; und &amp;quot;is&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort/Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: and|are|is&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 und|sind|ist&lt;br /&gt;
&lt;br /&gt;
====HomeTextClosedOpen====&lt;br /&gt;
Übersetzung für &amp;quot;closed&amp;quot; und &amp;quot;open&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: closed|open&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 geschlossen|geöffnet&lt;br /&gt;
&lt;br /&gt;
====HomeTextNosmokeSmoke====&lt;br /&gt;
Übersetzung für &amp;quot;no smoke&amp;quot; und &amp;quot;smoke&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: no smoke|smoke&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 kein Rauch|Rauch&lt;br /&gt;
&lt;br /&gt;
====HomeTextRisingConstantFalling====&lt;br /&gt;
Übersetzung für &amp;quot;rising&amp;quot;, &amp;quot;constant&amp;quot; und &amp;quot;falling&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: rising|constant|falling&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 steigend|gleichbleibend|fallend&lt;br /&gt;
&lt;br /&gt;
====HomeTextTodayTomorrowAfterTomorrow====&lt;br /&gt;
Übersetzung für &amp;quot;today&amp;quot;, &amp;quot;tomorrow&amp;quot; und &amp;quot;day after tomorrow&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: today|tomorrow|day after tomorrow&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Heute|Morgen|Übermorgen&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherNoForecast====&lt;br /&gt;
Übersetzung für &amp;quot;No forecast available&amp;quot; - Text wenn keine Wettervorhersage verfügbar ist&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: No forecast available&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es ist leider keine Wettervorhersage für den angegebenen Tag verfügbar!&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastInSpecDays====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage in 4-10 Tagen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 In %DAY% Tagen %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastToday====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für heute&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C. Aktuelle Temperatur %TEMPERATURE%°C bei einer Luftfeuchtigkeit von %HUMIDITY%%. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastTomorrow====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für morgen/übermorgen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherLong====&lt;br /&gt;
Langer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es %TOBE% %CONDITION% bei %TEMPERATURE%°C und %HUMIDITY%% Luftfeuchtigkeit. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h. Der Luftdruck ist %PRESSURETREND% bei %PRESSURE%hPa.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherShort====&lt;br /&gt;
Kurzer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %CONDITION%, %TEMPERATURE%°C, %HUMIDITY%% Luftfeuchtigkeit, Luftdruck %PRESSURE%hPa&lt;br /&gt;
&lt;br /&gt;
===weitere Attribute===&lt;br /&gt;
Viele weitere Dinge lassen sich anpassen.&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedDetails====&lt;br /&gt;
mehr Details anzeigen, abhängig von den zu HOMEMODE hinzugefügten Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: none, detail, both, room&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Auswahlliste&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: none&lt;br /&gt;
&lt;br /&gt;
====HomeDaytimes====&lt;br /&gt;
Eigene Tageszeiten als Paare aus Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Zeit|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 00:00|Mitternacht&lt;br /&gt;
 00:05|Nacht&lt;br /&gt;
 06:30|Morgen&lt;br /&gt;
 10:00|Vormittag&lt;br /&gt;
 13:00|Mittag&lt;br /&gt;
 14:30|Nachmittag&lt;br /&gt;
 17:30|Vorabend&lt;br /&gt;
 19:00|Abend&lt;br /&gt;
 23:00|Spätabend&lt;br /&gt;
&lt;br /&gt;
====HomeIcewarningOnOffTemps====&lt;br /&gt;
2 leerzeichenseparierte Temperaturen für das Ein- und Ausschalten der Eiswarnung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei leerzeichenseparierte Temperaturen mit maximal einer Kommastelle&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 2 3&lt;br /&gt;
&lt;br /&gt;
====HomeModeAlarmArmDelay====&lt;br /&gt;
Zeit in Sekunden um das aktivieren der Alarmschaltung zu verzögern.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl (gleiche Verzögerung für alle modeAlarm) oder 3 leerzeichenseparierte Zahlen für jeden modeAlarm (Reihenfolge: armaway armnight armhome)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAtTmpRoom====&lt;br /&gt;
Diesen Raum zu temporäre at(s) hinzufügen die von HOMEMODE generiert werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceAbsentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;absent&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: maximale Anzahl von verfügbaren Presence Geräten für jeden ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDevicePresentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;present&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomePublicIpCheckInterval====&lt;br /&gt;
Interval in Minuten für die Überprüfung der öffentlichen IP-Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0 (deaktiviert)&lt;br /&gt;
&lt;br /&gt;
====HomeSeasons====&lt;br /&gt;
Eigene Jahreszeiten als Paare aus Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Datum|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 03.01|spring 06.01|summer 09.01|autumn 12.01|winter&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 03.01|Frühling&lt;br /&gt;
 06.01|Sommer&lt;br /&gt;
 09.01|Herbst&lt;br /&gt;
 12.01|Winter&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryLowPercentage====&lt;br /&gt;
Prozentsatz um einen Batteriesensor mit geringer Batterie anzuzeigen (nur bei Sensoren die ihren Batteriewert prozentual angeben)&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 50&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryReading====&lt;br /&gt;
Reading der Batteriesensoren welches statt &amp;quot;battery&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: battery&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminanceReading====&lt;br /&gt;
Reading der Lichtsensoren welches statt &amp;quot;luminance&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: luminance&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergyReadings====&lt;br /&gt;
Readings der Power/Energy Sensoren welche statt &amp;quot;power&amp;quot; und &amp;quot;energy&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: 2 leerzeichenseparierte Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: power energy&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeReading====&lt;br /&gt;
Readings der Rauchmelder welche statt &amp;quot;state&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ein Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeValue====&lt;br /&gt;
Regex der Auslösewerte von Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: RegEx&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: on&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialLocation====&lt;br /&gt;
Hier können eigene zusätzliche location(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; location &amp;lt;LOCATION&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialModes====&lt;br /&gt;
Hier können eigene zusätzliche mode(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; mode &amp;lt;MODE&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTrendCalcAge====&lt;br /&gt;
Zeit in Sekunden für das Maximalalter des vorherigen Wertes für die Trendberechnung&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 900&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Teil der Konfiguration ist das Befüllen der HomeCMD Attribute. Da dieses durch die Vermischung von FHEM Code, Perl Code und zusätzlichen Platzhaltern erst einmal sehr befremdlich sein kann, habe ich bei der Beschreibung der HomeCMD Attribute teilweise Beispiele hinzugefügt um den Einstieg weiter zu erleichtern.&lt;br /&gt;
&lt;br /&gt;
==HomeCMD Attribute (mit Beispielen)==&lt;br /&gt;
Die HomeCMD Attribute sind zum Festlegen der jeweiligen Schaltaktionen gedacht und können damit evtl. vorhandene notify/DOIF ablösen. Sie können mit FHEM-Code, Perl-Code oder aber auch mit beidem vermischt befüllt werden (wovon ich allerdings abrate). Zusätzlich sind noch diverse Platzhalter (siehe Platzhalter) verfügbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Perl-Code innerhalb der HomeCMD Attribute gibt es hier Besonderheiten.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
*Im Gegensatz zur FHEM-Eingabezeile müssen hier keine Semikolon verdoppelt werden&lt;br /&gt;
*Kommetarzeilen sind zulässig&lt;br /&gt;
*Kommentare am Ende einer Perl-Zeile sind nicht zulässig&lt;br /&gt;
&lt;br /&gt;
Typischer Weise werden in den HomeCMD Attributen weitere Module angesprochen.&amp;lt;br&amp;gt;&lt;br /&gt;
Z.B. benutze ich für jegliche Form der Benachrichtigung den msg Befehl.&lt;br /&gt;
&lt;br /&gt;
Keines der HomeCMD Attribute hat einen Standardwert. Es müssen alle Befehle selbst programmiert werden.&lt;br /&gt;
&lt;br /&gt;
Platzhalter die Text(e) (string) beinhalten, müssen im Perl-Code in Anführungszeichen gesetzt werden (Beispiel %SENSOR%).&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter die Zahlen beinhalten (int,float) sollten nicht in Anführungszeichen gesetzt werden damit Zahlenvergleiche (mittels ==, &amp;lt;=, &amp;gt;=, &amp;gt;, &amp;lt;) funktionieren (Beispiel %LIGHT%, %ICE% oder %TEMPERATURE%).&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-off====&lt;br /&gt;
Befehle die beim Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Rauchalarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-on====&lt;br /&gt;
Befehle die bei einem Rauchalarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;meldet&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;melden&amp;quot; if (%SMOKECT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %SMOKEHR% $is Rauchalarm!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Sabotage Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-off====&lt;br /&gt;
Befehle die beim Ende eines Sabotage Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Manipulationen wurden beseitigt!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-on====&lt;br /&gt;
Befehle die bei einem Sabotage Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%TAMPEREDCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %TAMPEREDHR% $is sabotiert!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-off====&lt;br /&gt;
Befehle die beim Ende eines Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg ENTWARNUNG: Alle Alarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-on====&lt;br /&gt;
Befehle die bei einem Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%ALARMCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg audio,push,light 3 !!! ALARM !!! %ALARMHR% $is ausgelöst!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome====&lt;br /&gt;
Befehle die beim on/off von anyoneElseAtHome ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-off====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armaway&amp;quot; auf &amp;quot;armhome&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome on&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun niemand anderes mehr zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-on====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armhome&amp;quot; auf &amp;quot;armaway&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder wieder Alarme melden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird anyoneElseAtHome bei Anwesenheit und nicht deaktiviertem HomeAutoAlarmModes aktiviert, so passiert erst einmal nichts, ausser dass die hier angegebenen Befehle ausgeführt werden. Wird dann später die Abwesenheit erkannt, schaltet der Alarm Mode auf &amp;quot;armhome&amp;quot; statt auf &amp;quot;armaway&amp;quot; damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome off&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun noch jemand anderes zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDbatteryLow====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Sensor einen niedrigen Batteriewert meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg;&lt;br /&gt;
   $msg = &amp;quot;Die Batterien von %BATTERYLOW% gehen zur Neige und sollten ausgetauscht werden!&amp;quot; if (%BATTERYLOWCT% == 1);&lt;br /&gt;
   $msg = &amp;quot;Die Batterien bei folgenden Geräten sollten ausgetauscht werden: %BATTERYLOWALL%&amp;quot; if (%BATTERYLOWCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push $msg&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontact====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor geschlossen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geschlossen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor offen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun offen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormain====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor Type doormain open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain wird geschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 { &lt;br /&gt;
   # Wenn es Ankommende gibt&lt;br /&gt;
   if (&amp;quot;%ARRIVERS%&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Zusammenstellen der Begrüßung&lt;br /&gt;
     my $msg = &amp;quot;Gute&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # &amp;quot;n&amp;quot; anhängen wenn Tageszeit nicht Nacht ist&lt;br /&gt;
     $msg .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Leerzeichen einfügen&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # den Feiertag der Tageszeit voranstellen wenn ein Feiertag im Kalender FEIERTAG ist&lt;br /&gt;
     $msg .= &amp;quot;%FEIERTAG%-&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Tageszeit einfügen&lt;br /&gt;
     $msg .= &amp;quot;%DAYTIME% &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # bei ROOMMATE &amp;quot;zu Hause&amp;quot; in Begrüßung einfügen&lt;br /&gt;
     $msg .= &amp;quot;zu Hause &amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; =~ /^rr_/);&lt;br /&gt;
 &lt;br /&gt;
     # Ankommende einfügen&lt;br /&gt;
     $msg .= &amp;quot;%ARRIVERS%&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Begrüßung am Sonos im Flur ausgeben bei Abwesenheit über 60 min&lt;br /&gt;
     fhem &amp;quot;msg audio \@fl_Sonos $msg!&amp;quot; if (%DURABSENCELAST% &amp;gt; 60);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain geöffnet&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geöffnet!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning1====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die erste Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: erste Offenwarnzeit des Kontakts erreicht&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning2====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die zweite Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: ab Erreichen der zweiten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht immer noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarningLast====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die letzte Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Erreichen der letzten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das ist der letzte Hinweis %ALIAS% endlich zu schliessen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald sich die Tageszeit (daytime) auf einen beliebigen Wert ändert.&amp;lt;br&amp;gt;&lt;br /&gt;
Um die jeweilige eingetretene Tageszeit zu ermitteln ist der Platzhalter &#039;&#039;&#039;%DAYTIME%&#039;&#039;&#039; vorgesehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime)&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime-&amp;amp;lt;DAYTIME&amp;amp;gt;====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald die jeweilige Tageszeit (daytime) erreicht ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime) auf bestimmten Wert&amp;lt;br&amp;gt;&lt;br /&gt;
Bei &amp;quot;night&amp;quot; könnte man z.B. die Heizung bewohnerunabhängig ausschalten, bei &amp;quot;morning&amp;quot; wieder ein.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceDisable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceDisable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun deaktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional wirklich attr disable für Device setzen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;attr %DEVICE%:FILTER=disable!=1 disable 1; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf gone/none setzen wenn Presence Devices deaktiviert werden&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     my $resident = $1;&lt;br /&gt;
     my $gone = $resident =~ /^rr_/ ? &amp;quot;gone&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set $resident:FILTER=state!=$gone state $gone&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceEnable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceEnable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun aktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional attr disable für Device entfernen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;deleteattr %DEVICE%:FILTER=disable=1 disable; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf home setzen wenn Presence Devices aktiviert werden und anwesend sind&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $1:FILTER=state!=home state home&amp;quot; if (ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;present&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd====&lt;br /&gt;
Befehle die beim Anfang/Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%DND%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun eingeschaltet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun beendet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-off====&lt;br /&gt;
Befehle die beim Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-on====&lt;br /&gt;
Befehle die beim Beginn des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun eingeschaltet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent====&lt;br /&gt;
Befehle die beim Beginn eines beliebigen (holiday)Kalender Events ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten on&amp;quot; if (&amp;quot;%EVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-each====&lt;br /&gt;
Befehle die beim Beginn/Ende eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-URLAUBDAN-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Dan hat jetzt Urlaub!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Der Urlaub von Dan ist nun zu Ende!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-WOHNUNG-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Heizung an/aus schalten&lt;br /&gt;
   my $heiz = &amp;quot;([bksw]z|ku)_Thermostat&amp;quot;;&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /^heizung(..+)?$/i)&lt;br /&gt;
   {&lt;br /&gt;
     my $zeit = $1;&lt;br /&gt;
     if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
 &lt;br /&gt;
       # morgens nicht alle Thermostaten schalten&lt;br /&gt;
       $heiz = &amp;quot;([bks]z|ku)_Thermostat&amp;quot; if ($zeit &amp;amp;&amp;amp; $zeit =~ /morgens?$/i);&lt;br /&gt;
       fhem &amp;quot;set $heiz:FILTER=controlMode!=day controlMode day&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^heizung/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $heiz:FILTER=controlMode!=night controlMode night&amp;quot; if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # WLAN an/aus schalten&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi off&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi on&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Putzfrau (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Gast (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-begin====&lt;br /&gt;
Befehle die beim Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-Neujahr-begin&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set %SENSORSENERGY% meterReset&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-end====&lt;br /&gt;
Befehle die bei Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemDEFINED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn ein neues Gerät angelegt wird (define)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Jedem neu definierten Gerät den Geräte-TYPE auch als Raum im Menüpunkt Module zuweisen&lt;br /&gt;
   fhem &amp;quot;attr %DEFINED% room Module-&amp;gt;&amp;quot;.$defs{&amp;quot;%DEFINED%&amp;quot;}-&amp;gt;{TYPE};&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemINITIALIZED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn FHEM gestartet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg FHEM Home wurde gestartet...&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemSAVE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn in FHEM die Konfigurationsdatei gespeichert wird&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel (Backup von fhem.cfg und fhem.state):&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Datum/Uhrzeit&lt;br /&gt;
   my $now = Timeow();&lt;br /&gt;
   # Leerzeichen durch Unterstriche ersetzen&lt;br /&gt;
   $now =~ s/ /_/g;&lt;br /&gt;
   # Backup der Datei fhem.cfg&lt;br /&gt;
   `cp $attr{global}{configfile} ./backup/fhem.cfg.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.cfg.$now&amp;quot;;&lt;br /&gt;
   # Backup der Datei fhem.state&lt;br /&gt;
   `cp $attr{global}{statefile} ./backup/fhem.state.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.state.$now&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemUPDATE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn das Update von FHEM ausgeführt wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das Update für FHEM ist beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning====&lt;br /&gt;
Befehle die bei Anfang/Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0/1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%ICE%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg push ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!.&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-off====&lt;br /&gt;
Befehle die bei Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-on====&lt;br /&gt;
Befehle die bei Beginn der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation====&lt;br /&gt;
Befehle die beim Ändern der location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation-&amp;amp;lt;LOCATION&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf eine bestimmte location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmte location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode====&lt;br /&gt;
Befehle die beim Ändern von mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-absent-belated====&lt;br /&gt;
Befehle die nachträglich zur Abwesenheit ausgeführt werden sollen, die Zeit kann im Atteribut &amp;quot;HomeModeAbsentBelatedTime&amp;quot; eingestellt werden&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Abwesenheit + XX min&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten mode&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-absent&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set HarmonyHub:FILTER=activity!=PowerOff activity PowerOff;&lt;br /&gt;
 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 set TYPE=SONOSPLAYER:FILTER=Volume&amp;gt;0 Volume 0;&lt;br /&gt;
 set Sonos stopAll;&lt;br /&gt;
 sleep 3;&lt;br /&gt;
 set Wohnung [FILTER=state!=off] off&amp;quot;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 define atTmp_wz_Media_aus_%SELF% at +01:00:00 set HarmonyHub:FILTER=currentActivity!=PowerOff activity PowerOff;&lt;br /&gt;
 define atTmp_wz_Venti_aus_%SELF% at +01:00:00 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 define atTmp_wzLS_aus_%SELF% at +00:30:00 set wz_LS scene aus;&lt;br /&gt;
 define atTmp_all_Sonos_vol_down_%SELF% at +00:02:00 set TYPE=SONOSPLAYER:FILTER=Volume!=0 Volume 0 1;&lt;br /&gt;
 define atTmp_all_Sonos_off_%SELF% at +00:02:30 set Sonos stopAll;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=off off;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=on on&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-gone&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlManu off&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen beliebigen Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von beliebigem Resident ausgelöst&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 msg audio @%AUDIO% Guten Nacht und schlaf&#039; gut %ALIAS%!&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg = &amp;quot;Guten&amp;quot;;&lt;br /&gt;
   $msg .= &amp;quot; %FEIERTAG%&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
   $msg .= &amp;quot; Morgen %ALIAS%&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;msg audio \@%AUDIO% $msg&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;defmod atTmp_wetter_%RESIDENT%_%SELF% at +00:07:00 msg audio Wettervorhersage für heute: %FORECASTTODAY%&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen bestimmten Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von bestimmten Resident ausgelöst&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm====&lt;br /&gt;
Befehle die beim Ändern von modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung modeAlarm&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm-&amp;amp;lt;armaway/armhome/armnight/disarm&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armaway&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%PREVAMODE%&amp;quot; eq &amp;quot;disarm&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Alarmanlage einschalten&lt;br /&gt;
     fhem &amp;quot;set AA_Arm:FILTER=level!=100 alarmLevel armAll&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht zusammensetzen&lt;br /&gt;
     my $msg;&lt;br /&gt;
     $msg .= &amp;quot;Die Alarmanlage ist nun scharf geschaltet!&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
     my $is = &amp;quot;%ALARMHR%&amp;quot; =~ /und/ ? &amp;quot;sind&amp;quot; : &amp;quot;ist&amp;quot;;&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot; if ($msg);&lt;br /&gt;
     $msg .= &amp;quot;ACHTUNG: %ALARMHR% $is noch offen!!!&amp;quot; if (%ALARMCT%);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an ROOMMATE/GUEST senden&lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 &lt;br /&gt;
     # Eingangstür abschließen falls noch nicht geschehen&lt;br /&gt;
     fhem &amp;quot;set fl_Tuerschloss:FILTER=state!=locked lock&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armhome&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armnight&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-disarm&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Alarmanlage ausschalten&lt;br /&gt;
   fhem &amp;quot;set AA_Arm:FILTER=level!=0 alarmLevel disarmed&amp;quot;;&lt;br /&gt;
   my $prio = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # Nachrichtenpriorität auf 1 setzen bei Ankunft (höhere Lautstärke beim Abspielen damit man das auch vor der Tür hört)&lt;br /&gt;
   $prio = &amp;quot; 1&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; eq &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht an ROOMMATE/GUEST senden wenn der vorherige alarmMode nicht &amp;quot;armnight&amp;quot; ist&lt;br /&gt;
   fhem &amp;quot;msg audio \@fl_Sonos$prio Die Alarmanlage ist nun ausgeschaltet %ALIAS%!&amp;quot; if (&amp;quot;%PREVAMODE%&amp;quot; ne &amp;quot;armnight&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion====&lt;br /&gt;
Befehle die bei Statusänderung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: öffnen/schließen eines beliebigen Bewegungsmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Raum aus Sensornamen ermitteln, z.B. bz_Sensor&lt;br /&gt;
   my $room = (split /_/,&amp;quot;%SENSOR%&amp;quot;)[0];&lt;br /&gt;
 &lt;br /&gt;
   # Status des structure aller Lichter dieses Raums&lt;br /&gt;
   my $lichter = Value($room.&amp;quot;_Lichter&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Status des dummy Tageslicht&lt;br /&gt;
   my $tl = Value(&amp;quot;Tageslicht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   if (&amp;quot;%STATE%&amp;quot; eq &amp;quot;geöffnet&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Lichtwert des Sensors&lt;br /&gt;
     my $lum = ReadingsNum(&amp;quot;%SENSOR%&amp;quot;,&amp;quot;luminance&amp;quot;,100);&lt;br /&gt;
 &lt;br /&gt;
     # Löschen des evtl. schon vorhandenen &amp;quot;at&amp;quot;&lt;br /&gt;
     fhem &amp;quot;delete atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot; if (IsDevice(&amp;quot;atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
     # Licht nur wenn kein Tageslicht oder Lichtwert des Sensors kleiner als 10 und AutoLight eingeschaltet und modeAlarm nicht armaway&lt;br /&gt;
     if (($tl eq &amp;quot;off&amp;quot; || $lum &amp;lt; 10) &amp;amp;&amp;amp; $lichter eq &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot; &amp;amp;&amp;amp; &amp;quot;%AMODE%&amp;quot; ne &amp;quot;armaway&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $scene;&lt;br /&gt;
 &lt;br /&gt;
       # verschiedene Szenen für verschiedene Modus bzw. Aussenlichtstärken&lt;br /&gt;
       if (&amp;quot;%MODE%&amp;quot; eq &amp;quot;gotosleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Abend&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (&amp;quot;%MODE%&amp;quot; eq &amp;quot;asleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Nacht&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;gt; 3)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;viel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;lt; 4)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;mittel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       # Schalten der entsprechenden Szene (Modul LightScene)&lt;br /&gt;
       fhem &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene $scene&amp;quot; if ($scene);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     # unterschiedliche Ausschaltzeiten für unterschiedliche Räume&lt;br /&gt;
     my $t = 3;&lt;br /&gt;
     $t = 15 if ($room eq &amp;quot;wz&amp;quot;);&lt;br /&gt;
     $t = 2 if ($room eq &amp;quot;bz&amp;quot; || ($room =~ /wz|ku/ &amp;amp;&amp;amp; &amp;quot;%MODE%&amp;quot; =~ /sleep/));&lt;br /&gt;
     $t = 1 if ($room eq &amp;quot;fl&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Zahl in Minuten umrechnen in einen Zeitpunkt für das &amp;quot;at&amp;quot;&lt;br /&gt;
     my $d = HOMEMODE_hourMaker($t);&lt;br /&gt;
 &lt;br /&gt;
     # Anlegen des &amp;quot;at&amp;quot; zum Ausschalten des Lichts wenn die Lichter angeschaltet sind und auch AutoLight eingeschaltet ist&lt;br /&gt;
     if ($lichter ne &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $cmd = &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene aus&amp;quot;;&lt;br /&gt;
       fhem &amp;quot;defmod atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF% at +$d $cmd&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-off====&lt;br /&gt;
Befehle die bei Ende der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-on====&lt;br /&gt;
Befehle die bei Beginn der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set w_Steckdosen [FILTER=state!=on] on;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode auto&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-device====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein beliebiges Presence Device, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebiges Presence Device&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present-device&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # mindestens 1x täglich den Batteriewert des PRESENCE Geräts bei erkannter Anwesenheit holen&lt;br /&gt;
   fhem &#039;&amp;quot;sudo /opt/fhem/scripts/GTag-bat.sh %DEVICE% %ADDRESS% &amp;amp;&amp;quot;&#039;&lt;br /&gt;
     if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE_/ &amp;amp;&amp;amp; (!defined ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,undef) || ReadingsAge(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,0) &amp;gt; 64800));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen beliebigen Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebigen Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-absent-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Mich benachrichtigen wenn ich nicht zu hause bin und jemand anderes die Wohnung verlässt&lt;br /&gt;
   fhem &amp;quot;msg push \@rr_Dan %ALIAS% hat gerade die Wohnung verlassen!&amp;quot;&lt;br /&gt;
     if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot; &amp;amp;&amp;amp; ReadingsVal(&amp;quot;rr_Dan&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) ne &amp;quot;present&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Verabschiedungsnachricht zusammensetzen&lt;br /&gt;
   my $msg;&lt;br /&gt;
 &lt;br /&gt;
   # Alle außer mich selbst verabschieden&lt;br /&gt;
   $msg .= &amp;quot;Bis bald und auf Wiedersehen %ALIAS%...&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Glättewarnung wenn nötig&lt;br /&gt;
   $msg .= &amp;quot; ACHTUNG!!! Es ist %TEMPERATURE%°C kalt! Somit könnte es glatt werden!&amp;quot; if (%ICE%);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht senden wenn vorhanden&lt;br /&gt;
   fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispielcode für &amp;quot;HomeCMDpresence-present-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # alle Ankommenden außer mir selbst&lt;br /&gt;
   if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Benachrichtigung wenn jemand kommt&lt;br /&gt;
     fhem &amp;quot;msg audio %ALIAS% kommt gerade!&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; ne &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) zusammensetzen&lt;br /&gt;
     my $g = &amp;quot;gute&amp;quot;;&lt;br /&gt;
     $g .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) senden &lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% Willkommen und $g %DAYTIME% %ALIAS%!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmten Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;-&amp;amp;lt;DEVICE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein bestimmtes Presence Device eines bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Dieses Attribut ist nur verfügbar wenn ein Resident mehr als ein Presence Device hat&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmtes Presence Device eines bestimmten Resident&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Jahreszeit&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $t = &amp;quot;%SEASON%&amp;quot;;&lt;br /&gt;
   $t .= &amp;quot;s&amp;quot; if ($t eq &amp;quot;Frühling&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;msg push Die Wohnung ist nun im $t-Modus!&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set Heizungen [FILTER=controlMode!=auto] controlMode auto&amp;quot; if ($t ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason-&amp;amp;lt;SEASON&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit in eine bestimmte Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung bestimmte Jahreszeit&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight====&lt;br /&gt;
Befehle die bei Änderung der Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight-&amp;amp;lt;sr/sr_astro/sr_civil/sr_indoor/sr_weather/ss/ss_astro/ss_civil/ss_indoor/ss_weather&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung zu bestimmter Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung zu bestimmter Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn====&lt;br /&gt;
Befehle die bei Beginn/Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn/Ende der UWZ Warnungen&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-begin====&lt;br /&gt;
Befehle die bei Beginn der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg %UWZLONG%&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-end====&lt;br /&gt;
Befehle die beim Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg Alle Unwetterwarnungen sind nun beendet!&lt;br /&gt;
&lt;br /&gt;
=Platzhalter=&lt;br /&gt;
==verfügbar in allen HomeCMD Attributen==&lt;br /&gt;
===%ADDRESS%===&lt;br /&gt;
MAC Adresse des zuletzt ausgelösten Presence Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALARM%===&lt;br /&gt;
Liste mit Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&lt;br /&gt;
&lt;br /&gt;
===%ALARMCT%===&lt;br /&gt;
Anzahl der ausgelösten Alarm Geräte&lt;br /&gt;
&lt;br /&gt;
===%ALARMHR%===&lt;br /&gt;
Liste mit (human readable) Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für msg benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
Alias des zuletzt ausgelösten Resident&lt;br /&gt;
&lt;br /&gt;
===%AMODE%===&lt;br /&gt;
aktueller Alarm Mode&lt;br /&gt;
&lt;br /&gt;
===%AEAH%===&lt;br /&gt;
Wert von anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 1 wenn on und 0 wenn off&lt;br /&gt;
&lt;br /&gt;
===%ARRIVERS%===&lt;br /&gt;
Alias-Liste der ROOMMATE/GUEST deren location auf arrival steht&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Residents zu begrüßen&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. Peter, Paul und Marry&lt;br /&gt;
&lt;br /&gt;
===%AUDIO%===&lt;br /&gt;
Audio Device des zuletzt ausgelösten ROOMMATE/GUEST (Attribut msgContactAudio)&amp;lt;br&amp;gt;&lt;br /&gt;
wenn das Attribut msgContactAudio des jeweiligen Resident keinen Wert hat, so wird versucht den Wert des Attributs aus dem globalMsg (sofern vorhanden) auszulesen&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Resident spezifische msg(s) vom Typ audio zu senden, z.B. Nacht/Morgen Grüße/Wünsche&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOW%===&lt;br /&gt;
Alias des zu letzt gemeldeten Geräts mit niedrigem Batteriestand&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWALL%===&lt;br /&gt;
Wert des Reading batteryLow_hr&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWCT%===&lt;br /&gt;
Wert des Reading batteryLow_ct&lt;br /&gt;
&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Reading condition des überwachten Yahoo weather Device&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für Wetter(vorhersage) benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%CONTACT%===&lt;br /&gt;
Wert des Reading lastContact (Name des zuletzt geöffneten Kontakt Sensor)&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um msg zu versenden&lt;br /&gt;
&lt;br /&gt;
===%DAYTIME%===&lt;br /&gt;
Wert des Reading daytime&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Tageszeit spezifische Aktionen zu schalten&lt;br /&gt;
&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
Name des zuletzt ausgelösten Presence Gerät&lt;br /&gt;
&lt;br /&gt;
===%DEVICEA%===&lt;br /&gt;
Wert des Reading lastAbsentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DEVICEP%===&lt;br /&gt;
Wert des Reading lastPresentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DISABLED%===&lt;br /&gt;
Wert des Reading devicesDisabled&lt;br /&gt;
&lt;br /&gt;
===%DND%===&lt;br /&gt;
DND Status&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn an, 0 wenn aus&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCE%===&lt;br /&gt;
Wert des Reading durTimerAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCELAST%===&lt;br /&gt;
Wert des Reading lastDurAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCE%===&lt;br /&gt;
Wert des Reading durTimerPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCELAST%===&lt;br /&gt;
Wert des Reading lastDurPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEP%===&lt;br /&gt;
Wert des Reading durTimerSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEPLAST%===&lt;br /&gt;
Wert des Reading lastDurSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME&amp;gt;%===&lt;br /&gt;
Event des benannten Kalenders&amp;lt;br&amp;gt;&lt;br /&gt;
0 wenn kein gerade kein Event ist&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME-EVENTNAME&amp;gt;%===&lt;br /&gt;
0 wenn das benannte Event nicht aktiv ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn das benannte Event aktiv ist&lt;br /&gt;
&lt;br /&gt;
===%FORECAST%===&lt;br /&gt;
Wettervorhersage für morgen&lt;br /&gt;
&lt;br /&gt;
===%FORECASTTODAY%===&lt;br /&gt;
Wettervorhersage für heute&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITY%===&lt;br /&gt;
Wert des Reading humidity von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITYTREND%===&lt;br /&gt;
Wert des Reading humidityTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%ICE%===&lt;br /&gt;
0 wenn keine Eiswarnung besteht&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn Eiswarnung besteht&lt;br /&gt;
&lt;br /&gt;
===%IP%===&lt;br /&gt;
Wert des Reading publicIP von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LIGHT%===&lt;br /&gt;
Wert des Reading light von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATION%===&lt;br /&gt;
Wert des Reading location von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATIONR%===&lt;br /&gt;
Wert des Reading location des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCE%===&lt;br /&gt;
Wert des Reading luminance von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCETREND%===&lt;br /&gt;
Wert des Reading luminanceTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%MODE%===&lt;br /&gt;
gerade aktiver Modus von HOMEMODE (Reading mode)&lt;br /&gt;
&lt;br /&gt;
===%MODEALARM%===&lt;br /&gt;
aktueller Alarm Mode (wie %AMODE%)&lt;br /&gt;
&lt;br /&gt;
===%MOTION%===&lt;br /&gt;
Wert des Reading lastMotion von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%NAME%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %SELF%)&lt;br /&gt;
&lt;br /&gt;
===%OPEN%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENCT%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENHR%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PANIC%===&lt;br /&gt;
0 wenn panic ausgeschaltet ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn panic eingeschaltet ist&lt;br /&gt;
&lt;br /&gt;
===%RESIDENT%===&lt;br /&gt;
Name des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PRESENT%===&lt;br /&gt;
presence von HOMEMODE&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESENTR%===&lt;br /&gt;
presence des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESSURE%===&lt;br /&gt;
Wert des Reading pressure von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PRESSURETREND%===&lt;br /&gt;
Wert des Reading pressureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVAMODE%===&lt;br /&gt;
vorheriger modeAlarm von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVCONTACT%===&lt;br /&gt;
vorheriger geöffneter Kontaktsensor&lt;br /&gt;
&lt;br /&gt;
===%PREVMODE%===&lt;br /&gt;
vorheriger mode von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVMODER%===&lt;br /&gt;
vorheriger state des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PREVMOTION%===&lt;br /&gt;
vorheriger geöffneter Bewegungsmelder&lt;br /&gt;
&lt;br /&gt;
===%SEASON%===&lt;br /&gt;
Wert des Reading season von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SELF%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %NAME%)&lt;br /&gt;
&lt;br /&gt;
===%SENSORSBATTERY%===&lt;br /&gt;
Liste aus Internal SENSORSBATTERY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSCONTACT%===&lt;br /&gt;
Liste aus Internal SENSORSCONTACT&lt;br /&gt;
&lt;br /&gt;
===%SENSORSENERGY%===&lt;br /&gt;
Liste aus Internal SENSORSENERGY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSMOTION%===&lt;br /&gt;
Liste aus Internal SENSORSMOTION&lt;br /&gt;
&lt;br /&gt;
===%SENSORSSMOKE%===&lt;br /&gt;
Liste aus Internal SENSORSSMOKE&lt;br /&gt;
&lt;br /&gt;
===%SMOKE%===&lt;br /&gt;
Wert des Reading alarmSmoke von HOMEMODE&lt;br /&gt;
0 wenn kein Alarm&lt;br /&gt;
&lt;br /&gt;
===%SMOKECT%===&lt;br /&gt;
Wert des Reading alarmSmoke_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SMOKEHR%===&lt;br /&gt;
Wert des Reading alarmSmoke_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPERED%===&lt;br /&gt;
Wert des Reading sensorsTampered von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDCT%===&lt;br /&gt;
Wert des Reading sensorsTampered_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDHR%===&lt;br /&gt;
Wert des Reading sensorsTampered_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURE%===&lt;br /&gt;
Wert des Reading temperature von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURETREND%===&lt;br /&gt;
Wert des Reading temperatureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TOBE%===&lt;br /&gt;
are/sind oder is/ist der Wetterkondition&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHT%===&lt;br /&gt;
Wert des Reading twilight von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHTEVENT%===&lt;br /&gt;
aktuelles twilight Event&lt;br /&gt;
&lt;br /&gt;
===%UWZ%===&lt;br /&gt;
UWZ Warnlevel&lt;br /&gt;
&lt;br /&gt;
===%UWZLONG%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (lange Version)&lt;br /&gt;
&lt;br /&gt;
===%UWZSHORT%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (kurze Version)&lt;br /&gt;
&lt;br /&gt;
===%WEATHER%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather short&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WEATHERLONG%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather long&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WIND%===&lt;br /&gt;
Wert des Reading wind von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%WINDCHILL%===&lt;br /&gt;
Wert des Reading wind_chill vom eingebundenen Yahoo Wetter Gerät&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDcontact, HomeCMDmotion und HomeCMDalarm Attributen==&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%SENSOR%===&lt;br /&gt;
name des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%STATE%===&lt;br /&gt;
state des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeTextWeatherForecast Attributen==&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Readings condition des Yahoo Weather Geräts&lt;br /&gt;
&lt;br /&gt;
===%DAY%===&lt;br /&gt;
Tag der Wettervorhersage (1 - heute, 2 - morgen)&lt;br /&gt;
&lt;br /&gt;
===%HIGH%===&lt;br /&gt;
maximale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
===%LOW%===&lt;br /&gt;
minimale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDevent Attributen==&lt;br /&gt;
===%CALENDAR%===&lt;br /&gt;
Name der Kalenders&lt;br /&gt;
&lt;br /&gt;
===%DESCRIPTION%===&lt;br /&gt;
Beschreibung des aktuellen Event des Kalenders (nicht verfügbar bei holiday Geräten)&lt;br /&gt;
&lt;br /&gt;
===%EVENT%===&lt;br /&gt;
Name/Titel des aktuellen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
===%PREVEVENT%===&lt;br /&gt;
Name/Titel des vorherigen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDdevice Attributen==&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
name der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
=Benötigte Events=&lt;br /&gt;
Folgende Events werden von HOMEMODE ausgewertet bzw. werden benötigt damit HOMEMODE vollumfänglich funktionieren kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;DEVICE-TYPE&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;EVENT&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;RESIDENTS&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;ROOMMATE,GUEST&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wayhome&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSCONTACT}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsContactReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSMOTION}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsMotionReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSLUMINANCE}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;luminance&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsLuminanceReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSENERGY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;power&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;energy&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsPowerEnergyReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSBATTERY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;battery&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsBatteryReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomePresenceDeviceType&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeYahooWeatherDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wind&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeTwilightDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;light&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;twilight&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;aktEvent&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorTemperatureOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorHumidityOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeEventsHolidayDevices&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeUWZ&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;WarnCount&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=24569</id>
		<title>HOMEMODE</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=24569"/>
		<updated>2018-01-16T22:24:35Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* Attribute */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Das Modul wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden und viele grundlegende Automationen durch Hinzufügen weiterer Geräte bereitzustellen.&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=HOMEMODE&lt;br /&gt;
|ModFTopic=64317&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=22_HOMEMODE.pm&lt;br /&gt;
|ModOwner=DeeSPe&lt;br /&gt;
}}&lt;br /&gt;
Diese Seite beschreibt die Konfiguration und Verwendung des Moduls &#039;&#039;22_HOMEMODE.pm&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Das Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier aufgeführte Anleitung entspricht dem Modul in Version 1.4.0.&lt;br /&gt;
&lt;br /&gt;
Viele allgemein typische Automationen sind bereits fertig integriert.&lt;br /&gt;
&lt;br /&gt;
Die jeweils per Event auszuführenden Befehle können in den entsprechenden &#039;&#039;HomeCMD...&#039;&#039; Atributen hinterlegt werden und so in der Detail Ansicht des HOMEMODE Geräts übersichtlich angezeigt und bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen vieler notify/DOIF ist durch den Einsatz von &#039;&#039;HOMEMODE&#039;&#039; unnötig.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wurde das Modul für die Verwendung mit HomeKit als GUI optimiert. Alle möglichen Mappings für Homebridge sind bereits enthalten und können über einen set Befehl aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:HOMEMODE_Device.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Um Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; benutzen zu können benötigt man als Mindestvoraussetzung ein bereits angelegtes RESIDENTS Gerät mit entsprechenden ROOMMATE/GUEST Geräten.&lt;br /&gt;
&lt;br /&gt;
==Mögliche Automationen==&lt;br /&gt;
Alle Automationen sind optional.&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Beispiele:&lt;br /&gt;
*Änderung des Zustands von ROOMMATE/GUEST Geräten anhand von PRESENCE Geräten&lt;br /&gt;
*Bereistellung von CMD Attributen für mögliche Events rund um den Heim-/Hausstatus&lt;br /&gt;
*Bereistellung von Platzhaltern innerhalb der CMD Attribute, z.B. %MODE%, %SEASON% oder %PREVMODE% für die Werte der Readings mode, season und prevMode&lt;br /&gt;
*Einbindung von Kontakt Sensoren, für z.B. Offen-Warnungen nach bestimmten Zeitraum oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Kontakt Sensor konfiguriert werden&lt;br /&gt;
*Einbindung von Bewegungs Sensoren, für z.B. automatische Licht Schaltungen oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Bewegungs Sensor konfiguriert werden&lt;br /&gt;
*Darstellungen und Auslösen von Sabotage Alarmen der eingebundenen Kontakt- und Bewegungssensoren&lt;br /&gt;
*Einbindung von jeweils einem Temperatur und Luftfeuchtigkeitssensor&lt;br /&gt;
*Einbindung eines lokalen Yahoo Wetter Devices zur Ermittlung und Ausgabe der lokalen Wetterdaten und Erzeugung der Wettervorhersage&lt;br /&gt;
*Einbindung von Power und Energy Sensoren zur Ermittlung der Gesamtmengen&lt;br /&gt;
*Einbindung von Calendar/holiday Devices für spezielle im HOMEMODE Device verfügbar zu machende Events&lt;br /&gt;
*von Uhrzeit abhängiger Anwesend-Modus&lt;br /&gt;
*Bewohner unabhängige Tageszeit-Modus&lt;br /&gt;
*Alarm-Modus&lt;br /&gt;
*DND-Modus&lt;br /&gt;
*Überwachung von Batteriewerten&lt;br /&gt;
&lt;br /&gt;
=HOMEMODE-Gerät=&lt;br /&gt;
==Definition==&lt;br /&gt;
Das HOMEMODE Gerät - hier mit dem Namen &#039;&#039;Home&#039;&#039; versehen - selbst wird über&lt;br /&gt;
 define Home HOMEMODE&lt;br /&gt;
bei Vorhandensein nur eines RESIDENTS Geräts definiert.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung mehrerer RESIDENTS Geräte muss das Master RESIDENTS Gerät beim Definieren mit angegeben werden&lt;br /&gt;
 define Home HOMEMODE rgr_Residents&lt;br /&gt;
Dieses Modul verwendet das globale Attribut &#039;&#039;language&#039;&#039; zur Bestimmung der Anzeigedaten (Standard: EN=english). Für deutsche Ausgabedaten kann das Attribut&lt;br /&gt;
 attr global language DE&lt;br /&gt;
gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Alternativ kann auch nur das HOMEMODE Gerät auf deutsch geändert werden&lt;br /&gt;
 attr Home HomeLanguage DE&lt;br /&gt;
&lt;br /&gt;
==Set-Befehle==&lt;br /&gt;
&#039;&#039;set &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 set Home anyoneElseAtHome &amp;lt;on/off&amp;gt;&lt;br /&gt;
einschalten wenn jemand anderes zu Hause ist der kein registrierter ROOMMATE/GUEST ist, z.B. Hund/Katze oder unregistrierte Gäste&amp;lt;br&amp;gt;&lt;br /&gt;
wenn eingeschaltet, dann wird der Alarm Mode beim Verlassen statt auf armaway nur auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
schaltet man ein und hat schon Haus/Wohnung verlassen, so wird der Alarm Mode von armaway auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AEAH%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd &amp;lt;on/off&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. um Benachrichtigungen zu deaktivieren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DND%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd-for-minutes &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus für die angegebenen Minuten ein&amp;lt;br&amp;gt;&lt;br /&gt;
kehrt danach zum vorherigen (tageszeitabhängigen) Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home deviceDisable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
deaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home deviceEnable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
reaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home location &amp;lt;arrival/home/bed/underway/wayhome&amp;gt;&lt;br /&gt;
manueller Ortswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%LOCATION%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home mode &amp;lt;morning/day/afternoon/evening/night/gotosleep/asleep/absent/gone/home&amp;gt;&lt;br /&gt;
manueller Moduswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm &amp;lt;armaway/armhome/armnight/disarm&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVAMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm-for-minutes &amp;lt;armaway/armhome/armnight/disarm&amp;gt; &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus für die angegebenen Minuten ein&lt;br /&gt;
kehrt danach zum vorherigen Alarm Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home updateHomebridgeMapping&lt;br /&gt;
aktualisiert das Attribut homebridgeMapping des HOMEMODDE Device abhängig von den verfügbaren Informationen&lt;br /&gt;
&lt;br /&gt;
 set Home updateInternalForce&lt;br /&gt;
führt eine Aktualisierung der Internals des HOMEMODE Device aus&amp;lt;br&amp;gt;&lt;br /&gt;
das sollte manuell benutzt werden nachdem das Modul aktualisiert und nur ein reload statt restart gemacht wurde&amp;lt;br&amp;gt;&lt;br /&gt;
auch wenn man überwachte/kontrollierte Geräte ändert sollte man diesen Befehl manuell ausführen, z.B. neue ROOMMATE/GUEST im RESIDENTS Device hinzufügt, oder Geräte in FHEM hinzufügt die dem selben Devspec wie bisher entsprechen (Steckdosen, Sensoren)&lt;br /&gt;
&lt;br /&gt;
==Get-Befehle==&lt;br /&gt;
&#039;&#039;get &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 get Home contactsOpen &amp;lt;all/doorsinside/doorsoutside/doorsmain/outside/windows&amp;gt;&lt;br /&gt;
Liste von all/doorsinside/doorsoutside/doorsmain/outside/windows offenen Kontakten&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%OPEN%&#039;&#039;&#039;, &#039;&#039;&#039;%OPENCT%&#039;&#039;&#039; und &#039;&#039;&#039;%OPENHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home devicesDisabled&lt;br /&gt;
Anzeige der für HOMEMODE deaktivierten Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home mode&lt;br /&gt;
Anzeige von mode&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home modeAlarm&lt;br /&gt;
Anzeige von modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%MODEALARM%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home publicIP&lt;br /&gt;
holen der öffentlichen IP Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%IP%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home sensorsTampered&lt;br /&gt;
Liste aller sabotierten Sensoren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%TAMPERED%&#039;&#039;&#039;, &#039;&#039;&#039;%TAMPEREDCT%&#039;&#039;&#039; und &#039;&#039;&#039;%TAMPEREDHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weather &amp;lt;long/short&amp;gt;&lt;br /&gt;
Wetterinfo im angegebenen Format anzeigen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%WEATHER%&#039;&#039;&#039; und &#039;&#039;&#039;%WEATHERLONG%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weatherForecast [TAG]&lt;br /&gt;
Wettervorhersage für angegebenen Tag&amp;lt;br&amp;gt;&lt;br /&gt;
wenn kein Tag angegeben wird, so wird die Vorhersage für morgen (2) asugegeben&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%FORECAST%&#039;&#039;&#039; (morgen) und &#039;&#039;&#039;%FORECASTTODAY%&#039;&#039;&#039; (heute) sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
==webCmd==&lt;br /&gt;
Die Schaltmöglichkeiten sind absichtlich gering gehalten, denn im normalen Betrieb sollte nicht mehr benötigt werden als die hier gebotenen.&amp;lt;br&amp;gt;&lt;br /&gt;
Es lässt sich der Alarm Mode manuell umschalten und beim Klick auf das devStateIcon wird der DND Mode an- und ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
==Grundkonfiguration==&lt;br /&gt;
&lt;br /&gt;
Diese Grundkonfiguration sollte immer als erstes erfolgen um entsprechend darauf weiter aufzubauen. Als zweiter Schritt ist dann die erweiterte Konfiguration angedacht.&lt;br /&gt;
&lt;br /&gt;
Bei der Namensvergabe der Attribute vom HOMEMODE Device wurde nach einem möglichst kurzem Prefix gesucht und nach vielen Tests wurde sich für das Prefix &amp;quot;Home&amp;quot; entschieden. Das hat den Vorteil dass alle Attribute beisammen stehen und diese auch (durch den Großbuchstaben am Anfang) ziemlich weit oben in der Liste der Attribute stehen. Ebenso wurde bei der Namensvergabe versucht selbsterklärende Namen zu wählen, das hat den Vorteil dass man relativ einfach genau erkennen kann wofür das Attribut steht, allerdings auch den Nachteil dass einige Attributnamen ganz schön lang werden.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedUserAttr====&lt;br /&gt;
Als Erstes wird empfohlen, gerade für Anfänger, das Attribut &amp;quot;HomeAdvancedUserAttr&amp;quot; auf 1 zu setzen. Dadurch werden viel mehr HomeCMD Attribute freigeschaltet. Diese werden im Attribut userattr des HOMEMODE Device hinzugefügt.&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAlarmModes====&lt;br /&gt;
Als nächstes sollte man sich entscheiden ob die Alarm Modus evtl. nicht automatisch zum jeweiligen Modus des HOMEMODE Device geschaltet werden sollen. Standardmäßig werden die Alarm Modus automatisch gesteuert. Ist das nicht erwünscht, so ist der Wert dieses Attributs auf 0 zu setzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;absent&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armaway&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;home&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;disarm&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;asleep&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armnight&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Alarm Modus &amp;quot;armhome&amp;quot; kann nur manuell gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeAutoArrival====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird bei Ankunft jedes ROOMMATE/GUEST die location des jeweiligen ROOMMATE/GUEST für die hier angegeben Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt. Beim ersten nach Hause kommenden ROOMMATE/GUEST wird zusätzlich die location des HOMEMODE Device für die hier eingestellte Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Ablauf der hier eingestellten Minuten wechelt das jeweilige Device von &amp;quot;arrival&amp;quot; auf &amp;quot;home&amp;quot; sofern es noch die location &amp;quot;arrival&amp;quot; hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAsleep====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Schlafengehen (gotosleep) jedes ROOMMATE/GUEST ein Timer gestartet der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;asleep&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAwoken====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Erwachen (&amp;quot;awoken&amp;quot; oder &amp;quot;home nach asleep&amp;quot;) jedes ROOMMATE/GUEST dieser auf &amp;quot;awoken&amp;quot; gesetzt und ein Timer gestartet der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;home&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoDaytime====&lt;br /&gt;
Standardmäßig wird mode anhand der Tageszeit automatisch gesetzt. Ist das nicht gewünscht kann das über den Wert 0 deaktiviert werden. Dann stehen allerdings tageszeitabhängigen mode(s) nicht mehr zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeResidentCmdDelay====&lt;br /&gt;
Normalerweise werden die Events der ROOMMATE/GUEST vor denen des HOMEMODE Device ausgeführt, um das zu ändern wird die Ausführung der ROOMMATE/GUEST HomeCMD Attribute um die hier eingestellte Zeit in Sekunden verzögert.&amp;lt;br&amp;gt;&lt;br /&gt;
Je genauer der Name des jeweiligen HomeCMD Attributs beschrieben wird, desto später wird dieser ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Das heißt z.B. dass HomeCMDmode vor HomeCMDmode-absent und dieser wiederrum vor HomeCMDmode-absent-ROOMMATE/GUEST-NAME ausgeführt wird usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Um das normale Verhalten wiederherzustellen ist der Wert dieses Attributs auf 0 zu setzen. Dann wird HomeCMDmode-absent-ROOMMATE/GUEST-NAME vor HomeCMDmode-absent und vor HomeCMDmode ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis unendlich in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
==Konfiguration Presence Devices (automatische anwesend/abwesend Umschaltung von ROOMMATE/GUEST)==&lt;br /&gt;
Damit die automatische Zuordnung der Presence Devices zu ihren ROOMMATE/GUEST Devices zuverlässig funktioniert, ist es nötig dass der Hauptteil des Namens des ROOMMATE/GUEST innerhalb des Namens des zugehörigen PRESENCE Device(s) vorkommt.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Attribut HomePresenceDeviceType kann man den zu suchenden TYPE von Presence Device vorgeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Per Default werden nur Devices vom TYPE PRESENCE gesucht und versucht den ROOMMATE/GUEST zuzuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls man z.B. auch Devices vom TYPE dummy zur Anwesenheitssteuerung benutzt, kann man diese im Attribut HomePresenceDeviceType mit hinzunehmen. Es sind alles Device TYPEn möglich die ein &amp;quot;presence&amp;quot; Reading mit den Werten &amp;quot;present/appeared&amp;quot; und &amp;quot;absent/disappeared&amp;quot; bereitstellen. Mehrere TYPEn sind möglich da in diesem Attribut ein Regex erwartet wird. z.B.: dummy oder PRESENCE|dummy oder PRESENCE|dummy|ONKYO_AVR.&lt;br /&gt;
&lt;br /&gt;
===Beispiel===&lt;br /&gt;
Der Device Name meines ROOMMATE ist &amp;quot;rr_Dan&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf der Suche nach dem zugehörigen Presence Device wird der erste Teil (rr_ oder rg_) weggeschnitten und der Rest in Kleinbuchstaben umgewandelt.&amp;lt;br&amp;gt;&lt;br /&gt;
Mit dem was übrig bleibt, bei mir also nur dan, werden die möglichen Presence Devices versucht zu erkennen.&amp;lt;br&amp;gt;&lt;br /&gt;
Mein zugehöriges Presence Device heißt, historisch gewachsen, PRESENCE_rr_Dan und würde somit problemlos zugeordnet werden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen der zugehörigen Presence Devives könnten in ihrer kürzesten Form auch wie folgt sein um meinen ROOMMATE/GUEST Device zugeordnet zu werden:&amp;lt;br&amp;gt;&lt;br /&gt;
 pdan&lt;br /&gt;
 danp&lt;br /&gt;
 ZDan&lt;br /&gt;
 DANZ&lt;br /&gt;
 wenndannsonst&lt;br /&gt;
Aber Achtung, es funktioniert nicht mehr wenn die Namen nicht eindeutig sind. Wenn es z.B. eine rr_Dana geben würde mit Presence Device Name &amp;quot;pdani&amp;quot;, dann würde dieser Name auch bei mir (dan) passen. Das könnte man aber auch bewußt nutzen um mit einem Presence Device 2 ROOMMATE/GUEST Devices gleichzeitig zu steuern.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn die Namen wirklich absolut eindeutig sind, dann könnte man den Regex im Attribut HomePresenceDeviceType sogar auf &amp;quot;.*&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Werden pro ROOMMATE/GUEST mehrere Presence Devices gefunden und zugeordnet, so wird automatisch dass Attribut HomePresenceDeviceAbsentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt; auf die Anzahl der gefundenen Presence Devices gesetzt, so dass der/die jeweilige ROOMMATE/GUEST immer erst als abwesend gewertet wird sobald alle zugehörigen Presence Devices abwesend sind. Analog dazu gibt es noch das Attribut HomePresenceDevicePresentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresence====&lt;br /&gt;
Ist dieses Attribut auf 1 gesetzt, so werden die ROOMMATE/GUEST Devices automatisch zum Status ihrer zugehörigen PRESENCE Devices geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device present - ROOMMATE/GUEST home&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device absent - ROOMMATE/GUEST absent&amp;lt;br&amp;gt;&lt;br /&gt;
Falls es sich bei den von Euch benutzen PRESENCE Devices nicht um Devices vom TYPE PRESENCE handeln sollte, sondern z.B. um PRESENCE und dummy, so kann dieses im Attribut HomePresenceDeviceType als Regex konfiguriert werden! z.B.: PRESENCE|dummy&amp;lt;br&amp;gt;&lt;br /&gt;
Damit ein Device als Presence Device erkannt werden kann, muss dieses über ein presence Reading verfügen.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresenceSuppressState====&lt;br /&gt;
unterdrücke Anwesenheitsänderung in angegebenen State(s) der RESIDENTS&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. für &amp;quot;mysteriös&amp;quot; verschwindende Anwesenheitsgeräte in der Nacht&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: asleep|awoken|gotosleep&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceType====&lt;br /&gt;
Regex des TYPEs/der TYPEn von Presence Devices&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Regex der Device TYPEn&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: PRESENCE&lt;br /&gt;
&lt;br /&gt;
==Erweiterte Konfiguration==&lt;br /&gt;
Um das HOMEMODE Device vollumfänglich zu benutzen ist es sinnvoll weitere Devices (zur Überwachung) hinzuzufügen.&lt;br /&gt;
&lt;br /&gt;
Die bereits möglichen hinzuzufügenden Devices werden hier folgend nach Attributnamen erklärt.&lt;br /&gt;
&lt;br /&gt;
===Attribute zum Hinzufügen weiterer Geräte===&lt;br /&gt;
&lt;br /&gt;
====HomeEventsCalendarDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeEventsHolidayDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorAirpressure====&lt;br /&gt;
Luftdrucksensor aussen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorHumidityOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussensensors für Luftfeuchtigkeit anzugeben. Dieser muss ein Reading humidity besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für (Aussen)Luftfeuchtigkeit und Aussentemperatur ein und der selbe ist, so muss dieser nur einmalig im Attribut HomeSensorTemperatureOutside hinterlegt werden. Dieser muss dann die beiden Readings humidity und temperature haben. Im Bedarfsfall können diese Readings auch vorher entsprechend durch eigene userReadings erstellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%HUMIDITY%&#039;&#039;&#039; für den Wert des Readings humidity zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorTemperatureOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussentemperatursensors anzugeben. Dieser muss mindestens ein Reading temperature besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für Aussentemperatur auch ein Reading humidity besitzen sollte und dieses auch der Sensor für die Aussenlufteuchtigkeit ist, so muss dieser nur einmalig hier in diesem Attribut hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%TEMPERATURE%&#039;&#039;&#039; für den Wert des Readings temperature zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading temperature und optional humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContact====&lt;br /&gt;
Hier können alle Kontakt Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDcontact Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das optische und magnetische Kontaktsensoren vom HomeMatic. HM-SEC-SCo und HM-SEC-SC-2.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;model=HM-SEC-SC(o|-2)&#039;&#039;&#039; eingetragen um alle diese Kontaktsensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Kontaktsensoren mit ihren Namen im Internal SENSORSCONTACT des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Kontaktsensor folgende Attribute im Attribut userattr hinzugefügt:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====HomeContactType=====&lt;br /&gt;
Typ des Kontakts - wird versucht anhand des Namen/Alias beim Hinzufügen zum HOMEMODE Device zu ermitteln, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: doorinside,dooroutside,doormain,window&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: window&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Kontaktsensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModes=====&lt;br /&gt;
Regex der Mode(s) des HOMEMODE Device in denen keine Offen Warnungen erfolgen sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist ein Kontakt geöffnet während die hier eingestellten Mode(s) eintreten, so wird der noch bestehende Timer abgebrochen. Entgegengesetzt startet er wieder sobal die hier eingestellten Mode(s) verlassen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist hier z.B. &amp;quot;gotosleep|asleep&amp;quot; eingestellt, so kann man z.B. das Fenster schon vor dem Auslösen von gotosleep oder asleep öffnen und der bestehende Offenwarnung-Timer wird dann abgebrochen. Sobald man am Morgen z.B. awoken oder home auslöst, so wird ein neuer Timer gestartet der einen dann an das noch offene Fenster erinnert.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle Modes des HOMEMODE Device&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModesResidents=====&lt;br /&gt;
Devspec der ROOMMATE/GUEST Devices deren Status statt der Modes des HOMEMODE Device für Attribut HomeOpenDontTriggerModes benutzt werden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle überwachten ROOMMATE/GUEST&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenMaxTrigger=====&lt;br /&gt;
Maximale Anzahl an Warnmeldungen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ganze Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimes=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimesDividers=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactOpenTimeDividers des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2 1 2 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsContactReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactReadings====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeDividers====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeOpenTimesDividers in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 2 1 2 2.5 (für 4 Jahreszeiten)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeMin====&lt;br /&gt;
Minimale Zeit in Minuten die mindestens für eine Offenwarnung gewartet werden soll - im Falle dass sich durch den Teiler evtl. zu kleine Werte ergeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: eine Zahle mit max. einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimes====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 7.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminance====&lt;br /&gt;
Devspec von (Innen-)Lichtsensoren deren Durchschnittswert berechnet werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotion====&lt;br /&gt;
Hier können alle Bewegungs Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDmotion Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Motion Sensor Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0801-1001|010f-0800-1001&#039;&#039;&#039; eingetragen um alle diese Bewegungssensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Damit bei den Gen5 Sensoren auch das open im reading state steht, habe ich mir bei diesen Sensoren ein userReading angelegt.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Bewegungssensoren mit ihren Namen im Internal SENSORSMOTION des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Bewegungssensor folgende Attribute im Attribut userattr hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Bewegungssensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsMotionReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeSensorLocation=====&lt;br /&gt;
Standort des Bewegungssensors (außen oder innen) - wird standardmäßig beim Hinzufügen zum HOMEMODE Device auf &amp;quot;inside&amp;quot; gesetzt, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: inside,outside&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: inside&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsMotionValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionReadings====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergy====&lt;br /&gt;
Hier können alle Energie Sensoren als Devspec hinterlegt werden. Diese müssen die beiden Readings power und energy besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Anhand dieser Readings wird dann der Gesamtverbrauch und die derzeitige gesamte Leistungsaufnahme berechnet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Wall Plugs Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0600-1000|010f-0602-1001&#039;&#039;&#039; eingetragen um alle diese Energie Sensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec mit vorhandenen energy und power Readings&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmoke====&lt;br /&gt;
Devspec mit Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorWindspeed====&lt;br /&gt;
Sensor für Windgeschwindigkeit&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors und Reading der Windgeschwindigkeit separiert mit : (z.B. ga_Windsensor:wind)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBattery====&lt;br /&gt;
Devspec von Batteriesensoren mit einem Reading &amp;quot;battery&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerAnyoneElseAtHome====&lt;br /&gt;
auslösendes Gerät für anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn:valueOff&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerPanic====&lt;br /&gt;
auslösendes Gerät für Panikalarm&amp;lt;br&amp;gt;&lt;br /&gt;
valueOff ist optional, wird es weggelassen, so fungiert valueOn als toggle&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn[:valueOff]&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTwilightDevice====&lt;br /&gt;
Hier ist der Name des lokalen Twilight Device anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich die Platzhalter &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039;, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; in den HomeCMD Attributen zur Verfügung. &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039; wird dann durch das Reading light, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; durch das Reading twilight und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; durch das aktuelle Twilight Event ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeUWZ====&lt;br /&gt;
Hier ist der Name des lokalen UWZ Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%UWZ%&#039;&#039;&#039;, &#039;&#039;&#039;%UWZSHORT%&#039;&#039;&#039; und &#039;&#039;&#039;%UWZLONG%&#039;&#039;&#039; sind verfügbar in allen HomeCMD Attributen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des UWZ Geräts&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeYahooWeatherDevice====&lt;br /&gt;
Hier ist der Name des lokalen Yahoo Weather Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich einige Platzhalter zur Verfügung. Für die genaue Beschreibung derer siehe &amp;quot;Platzhalter&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
===HomeText Attribute===&lt;br /&gt;
Die HomeText Attribute sind größtenteils zur Übersetzung einiger benötigter Begriffe gedacht.&amp;lt;br&amp;gt;&lt;br /&gt;
In den speziellen Attributen die mit HomeTextWeather anfangen, sind ganze Texte mit entsprechenden Platzhaltern einzufügen.&lt;br /&gt;
&lt;br /&gt;
====HomeTextAndAreIs====&lt;br /&gt;
Übersetzung für &amp;quot;and&amp;quot;, &amp;quot;are&amp;quot; und &amp;quot;is&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort/Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: and|are|is&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 und|sind|ist&lt;br /&gt;
&lt;br /&gt;
====HomeTextClosedOpen====&lt;br /&gt;
Übersetzung für &amp;quot;closed&amp;quot; und &amp;quot;open&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: closed|open&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 geschlossen|geöffnet&lt;br /&gt;
&lt;br /&gt;
====HomeTextNosmokeSmoke====&lt;br /&gt;
Übersetzung für &amp;quot;no smoke&amp;quot; und &amp;quot;smoke&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: no smoke|smoke&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 kein Rauch|Rauch&lt;br /&gt;
&lt;br /&gt;
====HomeTextRisingConstantFalling====&lt;br /&gt;
Übersetzung für &amp;quot;rising&amp;quot;, &amp;quot;constant&amp;quot; und &amp;quot;falling&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: rising|constant|falling&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 steigend|gleichbleibend|fallend&lt;br /&gt;
&lt;br /&gt;
====HomeTextTodayTomorrowAfterTomorrow====&lt;br /&gt;
Übersetzung für &amp;quot;today&amp;quot;, &amp;quot;tomorrow&amp;quot; und &amp;quot;day after tomorrow&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: today|tomorrow|day after tomorrow&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Heute|Morgen|Übermorgen&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherNoForecast====&lt;br /&gt;
Übersetzung für &amp;quot;No forecast available&amp;quot; - Text wenn keine Wettervorhersage verfügbar ist&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: No forecast available&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es ist leider keine Wettervorhersage für den angegebenen Tag verfügbar!&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastInSpecDays====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage in 4-10 Tagen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 In %DAY% Tagen %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastToday====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für heute&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C. Aktuelle Temperatur %TEMPERATURE%°C bei einer Luftfeuchtigkeit von %HUMIDITY%%. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastTomorrow====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für morgen/übermorgen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherLong====&lt;br /&gt;
Langer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es %TOBE% %CONDITION% bei %TEMPERATURE%°C und %HUMIDITY%% Luftfeuchtigkeit. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h. Der Luftdruck ist %PRESSURETREND% bei %PRESSURE%hPa.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherShort====&lt;br /&gt;
Kurzer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %CONDITION%, %TEMPERATURE%°C, %HUMIDITY%% Luftfeuchtigkeit, Luftdruck %PRESSURE%hPa&lt;br /&gt;
&lt;br /&gt;
===weitere Attribute===&lt;br /&gt;
Viele weitere Dinge lassen sich anpassen.&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedDetails====&lt;br /&gt;
mehr Details anzeigen, abhängig von den zu HOMEMODE hinzugefügten Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: none, detail, both, room&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Auswahlliste&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: none&lt;br /&gt;
&lt;br /&gt;
====HomeDaytimes====&lt;br /&gt;
Eigene Tageszeiten als Paare aus Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Zeit|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 00:00|Mitternacht&lt;br /&gt;
 00:05|Nacht&lt;br /&gt;
 06:30|Morgen&lt;br /&gt;
 10:00|Vormittag&lt;br /&gt;
 13:00|Mittag&lt;br /&gt;
 14:30|Nachmittag&lt;br /&gt;
 17:30|Vorabend&lt;br /&gt;
 19:00|Abend&lt;br /&gt;
 23:00|Spätabend&lt;br /&gt;
&lt;br /&gt;
====HomeIcewarningOnOffTemps====&lt;br /&gt;
2 leerzeichenseparierte Temperaturen für das Ein- und Ausschalten der Eiswarnung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei leerzeichenseparierte Temperaturen mit maximal einer Kommastelle&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 2 3&lt;br /&gt;
&lt;br /&gt;
====HomeModeAlarmArmDelay====&lt;br /&gt;
Zeit in Sekunden um das aktivieren der Alarmschaltung zu verzögern.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl (gleiche Verzögerung für alle modeAlarm) oder 3 leerzeichenseparierte Zahlen für jeden modeAlarm (Reihenfolge: armaway armnight armhome)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAtTmpRoom====&lt;br /&gt;
Diesen Raum zu temporäre at(s) hinzufügen die von HOMEMODE generiert werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceAbsentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;absent&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: maximale Anzahl von verfügbaren Presence Geräten für jeden ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDevicePresentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;present&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomePublicIpCheckInterval====&lt;br /&gt;
Interval in Minuten für die Überprüfung der öffentlichen IP-Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0 (deaktiviert)&lt;br /&gt;
&lt;br /&gt;
====HomeSeasons====&lt;br /&gt;
Eigene Jahreszeiten als Paare aus Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Datum|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 03.01|spring 06.01|summer 09.01|autumn 12.01|winter&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 03.01|Frühling&lt;br /&gt;
 06.01|Sommer&lt;br /&gt;
 09.01|Herbst&lt;br /&gt;
 12.01|Winter&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryLowPercentage====&lt;br /&gt;
Prozentsatz um einen Batteriesensor mit geringer Batterie anzuzeigen (nur bei Sensoren die ihren Batteriewert prozentual angeben)&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 50&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryReading====&lt;br /&gt;
Reading der Batteriesensoren welches statt &amp;quot;battery&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: battery&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminanceReading====&lt;br /&gt;
Reading der Lichtsensoren welches statt &amp;quot;luminance&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: luminance&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergyReadings====&lt;br /&gt;
Readings der Power/Energy Sensoren welche statt &amp;quot;power&amp;quot; und &amp;quot;energy&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: 2 leerzeichenseparierte Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: power energy&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeReading====&lt;br /&gt;
Readings der Rauchmelder welche statt &amp;quot;state&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ein Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeValue====&lt;br /&gt;
Regex der Auslösewerte von Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: RegEx&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: on&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialLocation====&lt;br /&gt;
Hier können eigene zusätzliche location(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; location &amp;lt;LOCATION&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialModes====&lt;br /&gt;
Hier können eigene zusätzliche mode(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; mode &amp;lt;MODE&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTrendCalcAge====&lt;br /&gt;
Zeit in Sekunden für das Maximalalter des vorherigen Wertes für die Trendberechnung&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 900&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Teil der Konfiguration ist das Befüllen der HomeCMD Attribute. Da dieses durch die Vermischung von FHEM Code, Perl Code und zusätzlichen Platzhaltern erst einmal sehr befremdlich sein kann, habe ich bei der Beschreibung der HomeCMD Attribute teilweise Beispiele hinzugefügt um den Einstieg weiter zu erleichtern.&lt;br /&gt;
&lt;br /&gt;
==HomeCMD Attribute (mit Beispielen)==&lt;br /&gt;
Die HomeCMD Attribute sind zum Festlegen der jeweiligen Schaltaktionen gedacht und können damit evtl. vorhandene notify/DOIF ablösen. Sie können mit FHEM-Code, Perl-Code oder aber auch mit beidem vermischt befüllt werden (wovon ich allerdings abrate). Zusätzlich sind noch diverse Platzhalter (siehe Platzhalter) verfügbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Perl-Code innerhalb der HomeCMD Attribute gibt es hier Besonderheiten.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
*Im Gegensatz zur FHEM-Eingabezeile müssen hier keine Semikolon verdoppelt werden&lt;br /&gt;
*Kommetarzeilen sind zulässig&lt;br /&gt;
*Kommentare am Ende einer Perl-Zeile sind nicht zulässig&lt;br /&gt;
&lt;br /&gt;
Typischer Weise werden in den HomeCMD Attributen weitere Module angesprochen.&amp;lt;br&amp;gt;&lt;br /&gt;
Z.B. benutze ich für jegliche Form der Benachrichtigung den msg Befehl.&lt;br /&gt;
&lt;br /&gt;
Keines der HomeCMD Attribute hat einen Standardwert. Es müssen alle Befehle selbst programmiert werden.&lt;br /&gt;
&lt;br /&gt;
Platzhalter die Text(e) (string) beinhalten, müssen im Perl-Code in Anführungszeichen gesetzt werden (Beispiel %SENSOR%).&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter die Zahlen beinhalten (int,float) sollten nicht in Anführungszeichen gesetzt werden damit Zahlenvergleiche (mittels ==, &amp;lt;=, &amp;gt;=, &amp;gt;, &amp;lt;) funktionieren (Beispiel %LIGHT%, %ICE% oder %TEMPERATURE%).&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-off====&lt;br /&gt;
Befehle die beim Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Rauchalarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-on====&lt;br /&gt;
Befehle die bei einem Rauchalarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;meldet&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;melden&amp;quot; if (%SMOKECT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %SMOKEHR% $is Rauchalarm!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Sabotage Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-off====&lt;br /&gt;
Befehle die beim Ende eines Sabotage Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Manipulationen wurden beseitigt!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-on====&lt;br /&gt;
Befehle die bei einem Sabotage Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%TAMPEREDCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %TAMPEREDHR% $is sabotiert!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-off====&lt;br /&gt;
Befehle die beim Ende eines Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg ENTWARNUNG: Alle Alarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-on====&lt;br /&gt;
Befehle die bei einem Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%ALARMCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg audio,push,light 3 !!! ALARM !!! %ALARMHR% $is ausgelöst!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome====&lt;br /&gt;
Befehle die beim on/off von anyoneElseAtHome ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-off====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armaway&amp;quot; auf &amp;quot;armhome&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome on&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun niemand anderes mehr zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-on====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armhome&amp;quot; auf &amp;quot;armaway&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder wieder Alarme melden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird anyoneElseAtHome bei Anwesenheit und nicht deaktiviertem HomeAutoAlarmModes aktiviert, so passiert erst einmal nichts, ausser dass die hier angegebenen Befehle ausgeführt werden. Wird dann später die Abwesenheit erkannt, schaltet der Alarm Mode auf &amp;quot;armhome&amp;quot; statt auf &amp;quot;armaway&amp;quot; damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome off&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun noch jemand anderes zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDbatteryLow====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Sensor einen niedrigen Batteriewert meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg;&lt;br /&gt;
   $msg = &amp;quot;Die Batterien von %BATTERYLOW% gehen zur Neige und sollten ausgetauscht werden!&amp;quot; if (%BATTERYLOWCT% == 1);&lt;br /&gt;
   $msg = &amp;quot;Die Batterien bei folgenden Geräten sollten ausgetauscht werden: %BATTERYLOWALL%&amp;quot; if (%BATTERYLOWCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push $msg&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontact====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor geschlossen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geschlossen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor offen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun offen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormain====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor Type doormain open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain wird geschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 { &lt;br /&gt;
   # Wenn es Ankommende gibt&lt;br /&gt;
   if (&amp;quot;%ARRIVERS%&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Zusammenstellen der Begrüßung&lt;br /&gt;
     my $msg = &amp;quot;Gute&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # &amp;quot;n&amp;quot; anhängen wenn Tageszeit nicht Nacht ist&lt;br /&gt;
     $msg .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Leerzeichen einfügen&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # den Feiertag der Tageszeit voranstellen wenn ein Feiertag im Kalender FEIERTAG ist&lt;br /&gt;
     $msg .= &amp;quot;%FEIERTAG%-&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Tageszeit einfügen&lt;br /&gt;
     $msg .= &amp;quot;%DAYTIME% &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # bei ROOMMATE &amp;quot;zu Hause&amp;quot; in Begrüßung einfügen&lt;br /&gt;
     $msg .= &amp;quot;zu Hause &amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; =~ /^rr_/);&lt;br /&gt;
 &lt;br /&gt;
     # Ankommende einfügen&lt;br /&gt;
     $msg .= &amp;quot;%ARRIVERS%&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Begrüßung am Sonos im Flur ausgeben bei Abwesenheit über 60 min&lt;br /&gt;
     fhem &amp;quot;msg audio \@fl_Sonos $msg!&amp;quot; if (%DURABSENCELAST% &amp;gt; 60);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain geöffnet&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geöffnet!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning1====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die erste Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: erste Offenwarnzeit des Kontakts erreicht&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning2====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die zweite Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: ab Erreichen der zweiten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht immer noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarningLast====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die letzte Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Erreichen der letzten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das ist der letzte Hinweis %ALIAS% endlich zu schliessen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald sich die Tageszeit (daytime) auf einen beliebigen Wert ändert.&amp;lt;br&amp;gt;&lt;br /&gt;
Um die jeweilige eingetretene Tageszeit zu ermitteln ist der Platzhalter &#039;&#039;&#039;%DAYTIME%&#039;&#039;&#039; vorgesehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime)&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime-&amp;amp;lt;DAYTIME&amp;amp;gt;====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald die jeweilige Tageszeit (daytime) erreicht ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime) auf bestimmten Wert&amp;lt;br&amp;gt;&lt;br /&gt;
Bei &amp;quot;night&amp;quot; könnte man z.B. die Heizung bewohnerunabhängig ausschalten, bei &amp;quot;morning&amp;quot; wieder ein.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceDisable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceDisable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun deaktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional wirklich attr disable für Device setzen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;attr %DEVICE%:FILTER=disable!=1 disable 1; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf gone/none setzen wenn Presence Devices deaktiviert werden&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     my $resident = $1;&lt;br /&gt;
     my $gone = $resident =~ /^rr_/ ? &amp;quot;gone&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set $resident:FILTER=state!=$gone state $gone&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceEnable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceEnable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun aktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional attr disable für Device entfernen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;deleteattr %DEVICE%:FILTER=disable=1 disable; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf home setzen wenn Presence Devices aktiviert werden und anwesend sind&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $1:FILTER=state!=home state home&amp;quot; if (ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;present&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd====&lt;br /&gt;
Befehle die beim Anfang/Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%DND%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun eingeschaltet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun beendet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-off====&lt;br /&gt;
Befehle die beim Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-on====&lt;br /&gt;
Befehle die beim Beginn des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun eingeschaltet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent====&lt;br /&gt;
Befehle die beim Beginn eines beliebigen (holiday)Kalender Events ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten on&amp;quot; if (&amp;quot;%EVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-each====&lt;br /&gt;
Befehle die beim Beginn/Ende eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-URLAUBDAN-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Dan hat jetzt Urlaub!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Der Urlaub von Dan ist nun zu Ende!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-WOHNUNG-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Heizung an/aus schalten&lt;br /&gt;
   my $heiz = &amp;quot;([bksw]z|ku)_Thermostat&amp;quot;;&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /^heizung(..+)?$/i)&lt;br /&gt;
   {&lt;br /&gt;
     my $zeit = $1;&lt;br /&gt;
     if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
 &lt;br /&gt;
       # morgens nicht alle Thermostaten schalten&lt;br /&gt;
       $heiz = &amp;quot;([bks]z|ku)_Thermostat&amp;quot; if ($zeit &amp;amp;&amp;amp; $zeit =~ /morgens?$/i);&lt;br /&gt;
       fhem &amp;quot;set $heiz:FILTER=controlMode!=day controlMode day&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^heizung/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $heiz:FILTER=controlMode!=night controlMode night&amp;quot; if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # WLAN an/aus schalten&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi off&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi on&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Putzfrau (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Gast (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-begin====&lt;br /&gt;
Befehle die beim Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-Neujahr-begin&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set %SENSORSENERGY% meterReset&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-end====&lt;br /&gt;
Befehle die bei Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemDEFINED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn ein neues Gerät angelegt wird (define)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Jedem neu definierten Gerät den Geräte-TYPE auch als Raum im Menüpunkt Module zuweisen&lt;br /&gt;
   fhem &amp;quot;attr %DEFINED% room Module-&amp;gt;&amp;quot;.$defs{&amp;quot;%DEFINED%&amp;quot;}-&amp;gt;{TYPE};&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemINITIALIZED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn FHEM gestartet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg FHEM Home wurde gestartet...&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemSAVE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn in FHEM die Konfigurationsdatei gespeichert wird&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel (Backup von fhem.cfg und fhem.state):&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Datum/Uhrzeit&lt;br /&gt;
   my $now = Timeow();&lt;br /&gt;
   # Leerzeichen durch Unterstriche ersetzen&lt;br /&gt;
   $now =~ s/ /_/g;&lt;br /&gt;
   # Backup der Datei fhem.cfg&lt;br /&gt;
   `cp $attr{global}{configfile} ./backup/fhem.cfg.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.cfg.$now&amp;quot;;&lt;br /&gt;
   # Backup der Datei fhem.state&lt;br /&gt;
   `cp $attr{global}{statefile} ./backup/fhem.state.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.state.$now&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemUPDATE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn das Update von FHEM ausgeführt wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das Update für FHEM ist beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning====&lt;br /&gt;
Befehle die bei Anfang/Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0/1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%ICE%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg push ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!.&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-off====&lt;br /&gt;
Befehle die bei Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-on====&lt;br /&gt;
Befehle die bei Beginn der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation====&lt;br /&gt;
Befehle die beim Ändern der location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation-&amp;amp;lt;LOCATION&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf eine bestimmte location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmte location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode====&lt;br /&gt;
Befehle die beim Ändern von mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-absent-belated====&lt;br /&gt;
Befehle die nachträglich zur Abwesenheit ausgeführt werden sollen, die Zeit kann im Atteribut &amp;quot;HomeModeAbsentBelatedTime&amp;quot; eingestellt werden&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Abwesenheit + XX min&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten mode&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-absent&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set HarmonyHub:FILTER=activity!=PowerOff activity PowerOff;&lt;br /&gt;
 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 set TYPE=SONOSPLAYER:FILTER=Volume&amp;gt;0 Volume 0;&lt;br /&gt;
 set Sonos stopAll;&lt;br /&gt;
 sleep 3;&lt;br /&gt;
 set Wohnung [FILTER=state!=off] off&amp;quot;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 define atTmp_wz_Media_aus_%SELF% at +01:00:00 set HarmonyHub:FILTER=currentActivity!=PowerOff activity PowerOff;&lt;br /&gt;
 define atTmp_wz_Venti_aus_%SELF% at +01:00:00 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 define atTmp_wzLS_aus_%SELF% at +00:30:00 set wz_LS scene aus;&lt;br /&gt;
 define atTmp_all_Sonos_vol_down_%SELF% at +00:02:00 set TYPE=SONOSPLAYER:FILTER=Volume!=0 Volume 0 1;&lt;br /&gt;
 define atTmp_all_Sonos_off_%SELF% at +00:02:30 set Sonos stopAll;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=off off;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=on on&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-gone&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlManu off&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen beliebigen Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von beliebigem Resident ausgelöst&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 msg audio @%AUDIO% Guten Nacht und schlaf&#039; gut %ALIAS%!&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg = &amp;quot;Guten&amp;quot;;&lt;br /&gt;
   $msg .= &amp;quot; %FEIERTAG%&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
   $msg .= &amp;quot; Morgen %ALIAS%&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;msg audio \@%AUDIO% $msg&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;defmod atTmp_wetter_%RESIDENT%_%SELF% at +00:07:00 msg audio Wettervorhersage für heute: %FORECASTTODAY%&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen bestimmten Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von bestimmten Resident ausgelöst&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm====&lt;br /&gt;
Befehle die beim Ändern von modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung modeAlarm&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm-&amp;amp;lt;armaway/armhome/armnight/disarm&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armaway&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%PREVAMODE%&amp;quot; eq &amp;quot;disarm&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Alarmanlage einschalten&lt;br /&gt;
     fhem &amp;quot;set AA_Arm:FILTER=level!=100 alarmLevel armAll&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht zusammensetzen&lt;br /&gt;
     my $msg;&lt;br /&gt;
     $msg .= &amp;quot;Die Alarmanlage ist nun scharf geschaltet!&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
     my $is = &amp;quot;%ALARMHR%&amp;quot; =~ /und/ ? &amp;quot;sind&amp;quot; : &amp;quot;ist&amp;quot;;&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot; if ($msg);&lt;br /&gt;
     $msg .= &amp;quot;ACHTUNG: %ALARMHR% $is noch offen!!!&amp;quot; if (%ALARMCT%);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an ROOMMATE/GUEST senden&lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 &lt;br /&gt;
     # Eingangstür abschließen falls noch nicht geschehen&lt;br /&gt;
     fhem &amp;quot;set fl_Tuerschloss:FILTER=state!=locked lock&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armhome&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armnight&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-disarm&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Alarmanlage ausschalten&lt;br /&gt;
   fhem &amp;quot;set AA_Arm:FILTER=level!=0 alarmLevel disarmed&amp;quot;;&lt;br /&gt;
   my $prio = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # Nachrichtenpriorität auf 1 setzen bei Ankunft (höhere Lautstärke beim Abspielen damit man das auch vor der Tür hört)&lt;br /&gt;
   $prio = &amp;quot; 1&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; eq &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht an ROOMMATE/GUEST senden wenn der vorherige alarmMode nicht &amp;quot;armnight&amp;quot; ist&lt;br /&gt;
   fhem &amp;quot;msg audio \@fl_Sonos$prio Die Alarmanlage ist nun ausgeschaltet %ALIAS%!&amp;quot; if (&amp;quot;%PREVAMODE%&amp;quot; ne &amp;quot;armnight&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion====&lt;br /&gt;
Befehle die bei Statusänderung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: öffnen/schließen eines beliebigen Bewegungsmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Raum aus Sensornamen ermitteln, z.B. bz_Sensor&lt;br /&gt;
   my $room = (split /_/,&amp;quot;%SENSOR%&amp;quot;)[0];&lt;br /&gt;
 &lt;br /&gt;
   # Status des structure aller Lichter dieses Raums&lt;br /&gt;
   my $lichter = Value($room.&amp;quot;_Lichter&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Status des dummy Tageslicht&lt;br /&gt;
   my $tl = Value(&amp;quot;Tageslicht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   if (&amp;quot;%STATE%&amp;quot; eq &amp;quot;geöffnet&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Lichtwert des Sensors&lt;br /&gt;
     my $lum = ReadingsNum(&amp;quot;%SENSOR%&amp;quot;,&amp;quot;luminance&amp;quot;,100);&lt;br /&gt;
 &lt;br /&gt;
     # Löschen des evtl. schon vorhandenen &amp;quot;at&amp;quot;&lt;br /&gt;
     fhem &amp;quot;delete atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot; if (IsDevice(&amp;quot;atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
     # Licht nur wenn kein Tageslicht oder Lichtwert des Sensors kleiner als 10 und AutoLight eingeschaltet und modeAlarm nicht armaway&lt;br /&gt;
     if (($tl eq &amp;quot;off&amp;quot; || $lum &amp;lt; 10) &amp;amp;&amp;amp; $lichter eq &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot; &amp;amp;&amp;amp; &amp;quot;%AMODE%&amp;quot; ne &amp;quot;armaway&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $scene;&lt;br /&gt;
 &lt;br /&gt;
       # verschiedene Szenen für verschiedene Modus bzw. Aussenlichtstärken&lt;br /&gt;
       if (&amp;quot;%MODE%&amp;quot; eq &amp;quot;gotosleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Abend&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (&amp;quot;%MODE%&amp;quot; eq &amp;quot;asleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Nacht&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;gt; 3)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;viel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;lt; 4)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;mittel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       # Schalten der entsprechenden Szene (Modul LightScene)&lt;br /&gt;
       fhem &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene $scene&amp;quot; if ($scene);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     # unterschiedliche Ausschaltzeiten für unterschiedliche Räume&lt;br /&gt;
     my $t = 3;&lt;br /&gt;
     $t = 15 if ($room eq &amp;quot;wz&amp;quot;);&lt;br /&gt;
     $t = 2 if ($room eq &amp;quot;bz&amp;quot; || ($room =~ /wz|ku/ &amp;amp;&amp;amp; &amp;quot;%MODE%&amp;quot; =~ /sleep/));&lt;br /&gt;
     $t = 1 if ($room eq &amp;quot;fl&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Zahl in Minuten umrechnen in einen Zeitpunkt für das &amp;quot;at&amp;quot;&lt;br /&gt;
     my $d = HOMEMODE_hourMaker($t);&lt;br /&gt;
 &lt;br /&gt;
     # Anlegen des &amp;quot;at&amp;quot; zum Ausschalten des Lichts wenn die Lichter angeschaltet sind und auch AutoLight eingeschaltet ist&lt;br /&gt;
     if ($lichter ne &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $cmd = &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene aus&amp;quot;;&lt;br /&gt;
       fhem &amp;quot;defmod atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF% at +$d $cmd&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-off====&lt;br /&gt;
Befehle die bei Ende der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-on====&lt;br /&gt;
Befehle die bei Beginn der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set w_Steckdosen [FILTER=state!=on] on;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode auto&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-device====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein beliebiges Presence Device, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebiges Presence Device&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present-device&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # mindestens 1x täglich den Batteriewert des PRESENCE Geräts bei erkannter Anwesenheit holen&lt;br /&gt;
   fhem &#039;&amp;quot;sudo /opt/fhem/scripts/GTag-bat.sh %DEVICE% %ADDRESS% &amp;amp;&amp;quot;&#039;&lt;br /&gt;
     if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE_/ &amp;amp;&amp;amp; (!defined ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,undef) || ReadingsAge(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,0) &amp;gt; 64800));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen beliebigen Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebigen Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-absent-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Mich benachrichtigen wenn ich nicht zu hause bin und jemand anderes die Wohnung verlässt&lt;br /&gt;
   fhem &amp;quot;msg push \@rr_Dan %ALIAS% hat gerade die Wohnung verlassen!&amp;quot;&lt;br /&gt;
     if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot; &amp;amp;&amp;amp; ReadingsVal(&amp;quot;rr_Dan&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) ne &amp;quot;present&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Verabschiedungsnachricht zusammensetzen&lt;br /&gt;
   my $msg;&lt;br /&gt;
 &lt;br /&gt;
   # Alle außer mich selbst verabschieden&lt;br /&gt;
   $msg .= &amp;quot;Bis bald und auf Wiedersehen %ALIAS%...&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Glättewarnung wenn nötig&lt;br /&gt;
   $msg .= &amp;quot; ACHTUNG!!! Es ist %TEMPERATURE%°C kalt! Somit könnte es glatt werden!&amp;quot; if (%ICE%);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht senden wenn vorhanden&lt;br /&gt;
   fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispielcode für &amp;quot;HomeCMDpresence-present-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # alle Ankommenden außer mir selbst&lt;br /&gt;
   if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Benachrichtigung wenn jemand kommt&lt;br /&gt;
     fhem &amp;quot;msg audio %ALIAS% kommt gerade!&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; ne &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) zusammensetzen&lt;br /&gt;
     my $g = &amp;quot;gute&amp;quot;;&lt;br /&gt;
     $g .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) senden &lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% Willkommen und $g %DAYTIME% %ALIAS%!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmten Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;-&amp;amp;lt;DEVICE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein bestimmtes Presence Device eines bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Dieses Attribut ist nur verfügbar wenn ein Resident mehr als ein Presence Device hat&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmtes Presence Device eines bestimmten Resident&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Jahreszeit&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $t = &amp;quot;%SEASON%&amp;quot;;&lt;br /&gt;
   $t .= &amp;quot;s&amp;quot; if ($t eq &amp;quot;Frühling&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;msg push Die Wohnung ist nun im $t-Modus!&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set Heizungen [FILTER=controlMode!=auto] controlMode auto&amp;quot; if ($t ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason-&amp;amp;lt;SEASON&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit in eine bestimmte Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung bestimmte Jahreszeit&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight====&lt;br /&gt;
Befehle die bei Änderung der Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight-&amp;amp;lt;sr/sr_astro/sr_civil/sr_indoor/sr_weather/ss/ss_astro/ss_civil/ss_indoor/ss_weather&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung zu bestimmter Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung zu bestimmter Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn====&lt;br /&gt;
Befehle die bei Beginn/Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn/Ende der UWZ Warnungen&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-begin====&lt;br /&gt;
Befehle die bei Beginn der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg %UWZLONG%&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-end====&lt;br /&gt;
Befehle die beim Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg Alle Unwetterwarnungen sind nun beendet!&lt;br /&gt;
&lt;br /&gt;
=Platzhalter=&lt;br /&gt;
==verfügbar in allen HomeCMD Attributen==&lt;br /&gt;
===%ADDRESS%===&lt;br /&gt;
MAC Adresse des zuletzt ausgelösten Presence Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALARM%===&lt;br /&gt;
Liste mit Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&lt;br /&gt;
&lt;br /&gt;
===%ALARMCT%===&lt;br /&gt;
Anzahl der ausgelösten Alarm Geräte&lt;br /&gt;
&lt;br /&gt;
===%ALARMHR%===&lt;br /&gt;
Liste mit (human readable) Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für msg benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
Alias des zuletzt ausgelösten Resident&lt;br /&gt;
&lt;br /&gt;
===%AMODE%===&lt;br /&gt;
aktueller Alarm Mode&lt;br /&gt;
&lt;br /&gt;
===%AEAH%===&lt;br /&gt;
Wert von anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 1 wenn on und 0 wenn off&lt;br /&gt;
&lt;br /&gt;
===%ARRIVERS%===&lt;br /&gt;
Alias-Liste der ROOMMATE/GUEST deren location auf arrival steht&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Residents zu begrüßen&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. Peter, Paul und Marry&lt;br /&gt;
&lt;br /&gt;
===%AUDIO%===&lt;br /&gt;
Audio Device des zuletzt ausgelösten ROOMMATE/GUEST (Attribut msgContactAudio)&amp;lt;br&amp;gt;&lt;br /&gt;
wenn das Attribut msgContactAudio des jeweiligen Resident keinen Wert hat, so wird versucht den Wert des Attributs aus dem globalMsg (sofern vorhanden) auszulesen&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Resident spezifische msg(s) vom Typ audio zu senden, z.B. Nacht/Morgen Grüße/Wünsche&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOW%===&lt;br /&gt;
Alias des zu letzt gemeldeten Geräts mit niedrigem Batteriestand&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWALL%===&lt;br /&gt;
Wert des Reading batteryLow_hr&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWCT%===&lt;br /&gt;
Wert des Reading batteryLow_ct&lt;br /&gt;
&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Reading condition des überwachten Yahoo weather Device&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für Wetter(vorhersage) benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%CONTACT%===&lt;br /&gt;
Wert des Reading lastContact (Name des zuletzt geöffneten Kontakt Sensor)&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um msg zu versenden&lt;br /&gt;
&lt;br /&gt;
===%DAYTIME%===&lt;br /&gt;
Wert des Reading daytime&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Tageszeit spezifische Aktionen zu schalten&lt;br /&gt;
&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
Name des zuletzt ausgelösten Presence Gerät&lt;br /&gt;
&lt;br /&gt;
===%DEVICEA%===&lt;br /&gt;
Wert des Reading lastAbsentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DEVICEP%===&lt;br /&gt;
Wert des Reading lastPresentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DISABLED%===&lt;br /&gt;
Wert des Reading devicesDisabled&lt;br /&gt;
&lt;br /&gt;
===%DND%===&lt;br /&gt;
DND Status&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn an, 0 wenn aus&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCE%===&lt;br /&gt;
Wert des Reading durTimerAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCELAST%===&lt;br /&gt;
Wert des Reading lastDurAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCE%===&lt;br /&gt;
Wert des Reading durTimerPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCELAST%===&lt;br /&gt;
Wert des Reading lastDurPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEP%===&lt;br /&gt;
Wert des Reading durTimerSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEPLAST%===&lt;br /&gt;
Wert des Reading lastDurSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME&amp;gt;%===&lt;br /&gt;
Event des benannten Kalenders&amp;lt;br&amp;gt;&lt;br /&gt;
0 wenn kein gerade kein Event ist&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME-EVENTNAME&amp;gt;%===&lt;br /&gt;
0 wenn das benannte Event nicht aktiv ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn das benannte Event aktiv ist&lt;br /&gt;
&lt;br /&gt;
===%FORECAST%===&lt;br /&gt;
Wettervorhersage für morgen&lt;br /&gt;
&lt;br /&gt;
===%FORECASTTODAY%===&lt;br /&gt;
Wettervorhersage für heute&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITY%===&lt;br /&gt;
Wert des Reading humidity von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITYTREND%===&lt;br /&gt;
Wert des Reading humidityTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%ICE%===&lt;br /&gt;
0 wenn keine Eiswarnung besteht&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn Eiswarnung besteht&lt;br /&gt;
&lt;br /&gt;
===%IP%===&lt;br /&gt;
Wert des Reading publicIP von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LIGHT%===&lt;br /&gt;
Wert des Reading light von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATION%===&lt;br /&gt;
Wert des Reading location von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATIONR%===&lt;br /&gt;
Wert des Reading location des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCE%===&lt;br /&gt;
Wert des Reading luminance von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCETREND%===&lt;br /&gt;
Wert des Reading luminanceTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%MODE%===&lt;br /&gt;
gerade aktiver Modus von HOMEMODE (Reading mode)&lt;br /&gt;
&lt;br /&gt;
===%MODEALARM%===&lt;br /&gt;
aktueller Alarm Mode (wie %AMODE%)&lt;br /&gt;
&lt;br /&gt;
===%MOTION%===&lt;br /&gt;
Wert des Reading lastMotion von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%NAME%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %SELF%)&lt;br /&gt;
&lt;br /&gt;
===%OPEN%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENCT%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENHR%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PANIC%===&lt;br /&gt;
0 wenn panic ausgeschaltet ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn panic eingeschaltet ist&lt;br /&gt;
&lt;br /&gt;
===%RESIDENT%===&lt;br /&gt;
Name des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PRESENT%===&lt;br /&gt;
presence von HOMEMODE&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESENTR%===&lt;br /&gt;
presence des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESSURE%===&lt;br /&gt;
Wert des Reading pressure von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PRESSURETREND%===&lt;br /&gt;
Wert des Reading pressureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVAMODE%===&lt;br /&gt;
vorheriger modeAlarm von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVCONTACT%===&lt;br /&gt;
vorheriger geöffneter Kontaktsensor&lt;br /&gt;
&lt;br /&gt;
===%PREVMODE%===&lt;br /&gt;
vorheriger mode von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVMODER%===&lt;br /&gt;
vorheriger state des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PREVMOTION%===&lt;br /&gt;
vorheriger geöffneter Bewegungsmelder&lt;br /&gt;
&lt;br /&gt;
===%SEASON%===&lt;br /&gt;
Wert des Reading season von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SELF%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %NAME%)&lt;br /&gt;
&lt;br /&gt;
===%SENSORSBATTERY%===&lt;br /&gt;
Liste aus Internal SENSORSBATTERY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSCONTACT%===&lt;br /&gt;
Liste aus Internal SENSORSCONTACT&lt;br /&gt;
&lt;br /&gt;
===%SENSORSENERGY%===&lt;br /&gt;
Liste aus Internal SENSORSENERGY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSMOTION%===&lt;br /&gt;
Liste aus Internal SENSORSMOTION&lt;br /&gt;
&lt;br /&gt;
===%SENSORSSMOKE%===&lt;br /&gt;
Liste aus Internal SENSORSSMOKE&lt;br /&gt;
&lt;br /&gt;
===%SMOKE%===&lt;br /&gt;
Wert des Reading alarmSmoke von HOMEMODE&lt;br /&gt;
0 wenn kein Alarm&lt;br /&gt;
&lt;br /&gt;
===%SMOKECT%===&lt;br /&gt;
Wert des Reading alarmSmoke_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SMOKEHR%===&lt;br /&gt;
Wert des Reading alarmSmoke_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPERED%===&lt;br /&gt;
Wert des Reading sensorsTampered von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDCT%===&lt;br /&gt;
Wert des Reading sensorsTampered_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDHR%===&lt;br /&gt;
Wert des Reading sensorsTampered_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURE%===&lt;br /&gt;
Wert des Reading temperature von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURETREND%===&lt;br /&gt;
Wert des Reading temperatureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TOBE%===&lt;br /&gt;
are/sind oder is/ist der Wetterkondition&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHT%===&lt;br /&gt;
Wert des Reading twilight von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHTEVENT%===&lt;br /&gt;
aktuelles twilight Event&lt;br /&gt;
&lt;br /&gt;
===%UWZ%===&lt;br /&gt;
UWZ Warnlevel&lt;br /&gt;
&lt;br /&gt;
===%UWZLONG%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (lange Version)&lt;br /&gt;
&lt;br /&gt;
===%UWZSHORT%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (kurze Version)&lt;br /&gt;
&lt;br /&gt;
===%WEATHER%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather short&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WEATHERLONG%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather long&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WIND%===&lt;br /&gt;
Wert des Reading wind von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%WINDCHILL%===&lt;br /&gt;
Wert des Reading wind_chill vom eingebundenen Yahoo Wetter Gerät&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDcontact, HomeCMDmotion und HomeCMDalarm Attributen==&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%SENSOR%===&lt;br /&gt;
name des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%STATE%===&lt;br /&gt;
state des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeTextWeatherForecast Attributen==&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Readings condition des Yahoo Weather Geräts&lt;br /&gt;
&lt;br /&gt;
===%DAY%===&lt;br /&gt;
Tag der Wettervorhersage (1 - heute, 2 - morgen)&lt;br /&gt;
&lt;br /&gt;
===%HIGH%===&lt;br /&gt;
maximale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
===%LOW%===&lt;br /&gt;
minimale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDevent Attributen==&lt;br /&gt;
===%CALENDAR%===&lt;br /&gt;
Name der Kalenders&lt;br /&gt;
&lt;br /&gt;
===%DESCRIPTION%===&lt;br /&gt;
Beschreibung des aktuellen Event des Kalenders (nicht verfügbar bei holiday Geräten)&lt;br /&gt;
&lt;br /&gt;
===%EVENT%===&lt;br /&gt;
Name/Titel des aktuellen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
===%PREVEVENT%===&lt;br /&gt;
Name/Titel des vorherigen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDdevice Attributen==&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
name der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
=Benötigte Events=&lt;br /&gt;
Folgende Events werden von HOMEMODE ausgewertet bzw. werden benötigt damit HOMEMODE vollumfänglich funktionieren kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;DEVICE-TYPE&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;EVENT&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;RESIDENTS&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;ROOMMATE,GUEST&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wayhome&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSCONTACT}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsContactReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSMOTION}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsMotionReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSLUMINANCE}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;luminance&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsLuminanceReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSENERGY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;power&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;energy&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsPowerEnergyReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSBATTERY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;battery&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsBatteryReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomePresenceDeviceType&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeYahooWeatherDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wind&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeTwilightDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;light&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;twilight&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;aktEvent&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorTemperatureOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorHumidityOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeEventsHolidayDevices&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeUWZ&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;WarnCount&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=24568</id>
		<title>HOMEMODE</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=24568"/>
		<updated>2018-01-16T22:18:12Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* %DESCRIPTION% */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Das Modul wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden und viele grundlegende Automationen durch Hinzufügen weiterer Geräte bereitzustellen.&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=HOMEMODE&lt;br /&gt;
|ModFTopic=64317&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=22_HOMEMODE.pm&lt;br /&gt;
|ModOwner=DeeSPe&lt;br /&gt;
}}&lt;br /&gt;
Diese Seite beschreibt die Konfiguration und Verwendung des Moduls &#039;&#039;22_HOMEMODE.pm&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Das Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier aufgeführte Anleitung entspricht dem Modul in Version 1.4.0.&lt;br /&gt;
&lt;br /&gt;
Viele allgemein typische Automationen sind bereits fertig integriert.&lt;br /&gt;
&lt;br /&gt;
Die jeweils per Event auszuführenden Befehle können in den entsprechenden &#039;&#039;HomeCMD...&#039;&#039; Atributen hinterlegt werden und so in der Detail Ansicht des HOMEMODE Geräts übersichtlich angezeigt und bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen vieler notify/DOIF ist durch den Einsatz von &#039;&#039;HOMEMODE&#039;&#039; unnötig.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wurde das Modul für die Verwendung mit HomeKit als GUI optimiert. Alle möglichen Mappings für Homebridge sind bereits enthalten und können über einen set Befehl aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:HOMEMODE_Device.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Um Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; benutzen zu können benötigt man als Mindestvoraussetzung ein bereits angelegtes RESIDENTS Gerät mit entsprechenden ROOMMATE/GUEST Geräten.&lt;br /&gt;
&lt;br /&gt;
==Mögliche Automationen==&lt;br /&gt;
Alle Automationen sind optional.&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Beispiele:&lt;br /&gt;
*Änderung des Zustands von ROOMMATE/GUEST Geräten anhand von PRESENCE Geräten&lt;br /&gt;
*Bereistellung von CMD Attributen für mögliche Events rund um den Heim-/Hausstatus&lt;br /&gt;
*Bereistellung von Platzhaltern innerhalb der CMD Attribute, z.B. %MODE%, %SEASON% oder %PREVMODE% für die Werte der Readings mode, season und prevMode&lt;br /&gt;
*Einbindung von Kontakt Sensoren, für z.B. Offen-Warnungen nach bestimmten Zeitraum oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Kontakt Sensor konfiguriert werden&lt;br /&gt;
*Einbindung von Bewegungs Sensoren, für z.B. automatische Licht Schaltungen oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Bewegungs Sensor konfiguriert werden&lt;br /&gt;
*Darstellungen und Auslösen von Sabotage Alarmen der eingebundenen Kontakt- und Bewegungssensoren&lt;br /&gt;
*Einbindung von jeweils einem Temperatur und Luftfeuchtigkeitssensor&lt;br /&gt;
*Einbindung eines lokalen Yahoo Wetter Devices zur Ermittlung und Ausgabe der lokalen Wetterdaten und Erzeugung der Wettervorhersage&lt;br /&gt;
*Einbindung von Power und Energy Sensoren zur Ermittlung der Gesamtmengen&lt;br /&gt;
*Einbindung von Calendar/holiday Devices für spezielle im HOMEMODE Device verfügbar zu machende Events&lt;br /&gt;
*von Uhrzeit abhängiger Anwesend-Modus&lt;br /&gt;
*Bewohner unabhängige Tageszeit-Modus&lt;br /&gt;
*Alarm-Modus&lt;br /&gt;
*DND-Modus&lt;br /&gt;
*Überwachung von Batteriewerten&lt;br /&gt;
&lt;br /&gt;
=HOMEMODE-Gerät=&lt;br /&gt;
==Definition==&lt;br /&gt;
Das HOMEMODE Gerät - hier mit dem Namen &#039;&#039;Home&#039;&#039; versehen - selbst wird über&lt;br /&gt;
 define Home HOMEMODE&lt;br /&gt;
bei Vorhandensein nur eines RESIDENTS Geräts definiert.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung mehrerer RESIDENTS Geräte muss das Master RESIDENTS Gerät beim Definieren mit angegeben werden&lt;br /&gt;
 define Home HOMEMODE rgr_Residents&lt;br /&gt;
Dieses Modul verwendet das globale Attribut &#039;&#039;language&#039;&#039; zur Bestimmung der Anzeigedaten (Standard: EN=english). Für deutsche Ausgabedaten kann das Attribut&lt;br /&gt;
 attr global language DE&lt;br /&gt;
gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Alternativ kann auch nur das HOMEMODE Gerät auf deutsch geändert werden&lt;br /&gt;
 attr Home HomeLanguage DE&lt;br /&gt;
&lt;br /&gt;
==Set-Befehle==&lt;br /&gt;
&#039;&#039;set &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 set Home anyoneElseAtHome &amp;lt;on/off&amp;gt;&lt;br /&gt;
einschalten wenn jemand anderes zu Hause ist der kein registrierter ROOMMATE/GUEST ist, z.B. Hund/Katze oder unregistrierte Gäste&amp;lt;br&amp;gt;&lt;br /&gt;
wenn eingeschaltet, dann wird der Alarm Mode beim Verlassen statt auf armaway nur auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
schaltet man ein und hat schon Haus/Wohnung verlassen, so wird der Alarm Mode von armaway auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AEAH%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd &amp;lt;on/off&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. um Benachrichtigungen zu deaktivieren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DND%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd-for-minutes &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus für die angegebenen Minuten ein&amp;lt;br&amp;gt;&lt;br /&gt;
kehrt danach zum vorherigen (tageszeitabhängigen) Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home deviceDisable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
deaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home deviceEnable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
reaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home location &amp;lt;arrival/home/bed/underway/wayhome&amp;gt;&lt;br /&gt;
manueller Ortswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%LOCATION%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home mode &amp;lt;morning/day/afternoon/evening/night/gotosleep/asleep/absent/gone/home&amp;gt;&lt;br /&gt;
manueller Moduswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm &amp;lt;armaway/armhome/armnight/disarm&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVAMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm-for-minutes &amp;lt;armaway/armhome/armnight/disarm&amp;gt; &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus für die angegebenen Minuten ein&lt;br /&gt;
kehrt danach zum vorherigen Alarm Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home updateHomebridgeMapping&lt;br /&gt;
aktualisiert das Attribut homebridgeMapping des HOMEMODDE Device abhängig von den verfügbaren Informationen&lt;br /&gt;
&lt;br /&gt;
 set Home updateInternalForce&lt;br /&gt;
führt eine Aktualisierung der Internals des HOMEMODE Device aus&amp;lt;br&amp;gt;&lt;br /&gt;
das sollte manuell benutzt werden nachdem das Modul aktualisiert und nur ein reload statt restart gemacht wurde&amp;lt;br&amp;gt;&lt;br /&gt;
auch wenn man überwachte/kontrollierte Geräte ändert sollte man diesen Befehl manuell ausführen, z.B. neue ROOMMATE/GUEST im RESIDENTS Device hinzufügt, oder Geräte in FHEM hinzufügt die dem selben Devspec wie bisher entsprechen (Steckdosen, Sensoren)&lt;br /&gt;
&lt;br /&gt;
==Get-Befehle==&lt;br /&gt;
&#039;&#039;get &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 get Home contactsOpen &amp;lt;all/doorsinside/doorsoutside/doorsmain/outside/windows&amp;gt;&lt;br /&gt;
Liste von all/doorsinside/doorsoutside/doorsmain/outside/windows offenen Kontakten&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%OPEN%&#039;&#039;&#039;, &#039;&#039;&#039;%OPENCT%&#039;&#039;&#039; und &#039;&#039;&#039;%OPENHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home devicesDisabled&lt;br /&gt;
Anzeige der für HOMEMODE deaktivierten Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home mode&lt;br /&gt;
Anzeige von mode&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home modeAlarm&lt;br /&gt;
Anzeige von modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%MODEALARM%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home publicIP&lt;br /&gt;
holen der öffentlichen IP Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%IP%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home sensorsTampered&lt;br /&gt;
Liste aller sabotierten Sensoren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%TAMPERED%&#039;&#039;&#039;, &#039;&#039;&#039;%TAMPEREDCT%&#039;&#039;&#039; und &#039;&#039;&#039;%TAMPEREDHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weather &amp;lt;long/short&amp;gt;&lt;br /&gt;
Wetterinfo im angegebenen Format anzeigen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%WEATHER%&#039;&#039;&#039; und &#039;&#039;&#039;%WEATHERLONG%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weatherForecast [TAG]&lt;br /&gt;
Wettervorhersage für angegebenen Tag&amp;lt;br&amp;gt;&lt;br /&gt;
wenn kein Tag angegeben wird, so wird die Vorhersage für morgen (2) asugegeben&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%FORECAST%&#039;&#039;&#039; (morgen) und &#039;&#039;&#039;%FORECASTTODAY%&#039;&#039;&#039; (heute) sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
==webCmd==&lt;br /&gt;
Die Schaltmöglichkeiten sind absichtlich gering gehalten, denn im normalen Betrieb sollte nicht mehr benötigt werden als die hier gebotenen.&amp;lt;br&amp;gt;&lt;br /&gt;
Es lässt sich der Alarm Mode manuell umschalten und beim Klick auf das devStateIcon wird der DND Mode an- und ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
==Grundkonfiguration==&lt;br /&gt;
&lt;br /&gt;
Diese Grundkonfiguration sollte immer als erstes erfolgen um entsprechend darauf weiter aufzubauen. Als zweiter Schritt ist dann die erweiterte Konfiguration angedacht.&lt;br /&gt;
&lt;br /&gt;
Bei der Namensvergabe der Attribute vom HOMEMODE Device wurde nach einem möglichst kurzem Prefix gesucht und nach vielen Tests wurde sich für das Prefix &amp;quot;Home&amp;quot; entschieden. Das hat den Vorteil dass alle Attribute beisammen stehen und diese auch (durch den Großbuchstaben am Anfang) ziemlich weit oben in der Liste der Attribute stehen. Ebenso wurde bei der Namensvergabe versucht selbsterklärende Namen zu wählen, das hat den Vorteil dass man relativ einfach genau erkennen kann wofür das Attribut steht, allerdings auch den Nachteil dass einige Attributnamen ganz schön lang werden.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedUserAttr====&lt;br /&gt;
Als Erstes wird empfohlen, gerade für Anfänger, das Attribut &amp;quot;HomeAdvancedUserAttr&amp;quot; auf 1 zu setzen. Dadurch werden viel mehr HomeCMD Attribute freigeschaltet. Diese werden im Attribut userattr des HOMEMODE Device hinzugefügt.&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAlarmModes====&lt;br /&gt;
Als nächstes sollte man sich entscheiden ob die Alarm Modus evtl. nicht automatisch zum jeweiligen Modus des HOMEMODE Device geschaltet werden sollen. Standardmäßig werden die Alarm Modus automatisch gesteuert. Ist das nicht erwünscht, so ist der Wert dieses Attributs auf 0 zu setzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;absent&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armaway&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;home&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;disarm&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;asleep&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armnight&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Alarm Modus &amp;quot;armhome&amp;quot; kann nur manuell gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeAutoArrival====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird bei Ankunft jedes ROOMMATE/GUEST die location des jeweiligen ROOMMATE/GUEST für die hier angegeben Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt. Beim ersten nach Hause kommenden ROOMMATE/GUEST wird zusätzlich die location des HOMEMODE Device für die hier eingestellte Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Ablauf der hier eingestellten Minuten wechelt das jeweilige Device von &amp;quot;arrival&amp;quot; auf &amp;quot;home&amp;quot; sofern es noch die location &amp;quot;arrival&amp;quot; hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAsleep====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Schlafengehen (gotosleep) jedes ROOMMATE/GUEST ein Timer gestartet der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;asleep&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAwoken====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Erwachen (&amp;quot;awoken&amp;quot; oder &amp;quot;home nach asleep&amp;quot;) jedes ROOMMATE/GUEST dieser auf &amp;quot;awoken&amp;quot; gesetzt und ein Timer gestartet der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;home&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoDaytime====&lt;br /&gt;
Standardmäßig wird mode anhand der Tageszeit automatisch gesetzt. Ist das nicht gewünscht kann das über den Wert 0 deaktiviert werden. Dann stehen allerdings tageszeitabhängigen mode(s) nicht mehr zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeResidentCmdDelay====&lt;br /&gt;
Normalerweise werden die Events der ROOMMATE/GUEST vor denen des HOMEMODE Device ausgeführt, um das zu ändern wird die Ausführung der ROOMMATE/GUEST HomeCMD Attribute um die hier eingestellte Zeit in Sekunden verzögert.&amp;lt;br&amp;gt;&lt;br /&gt;
Je genauer der Name des jeweiligen HomeCMD Attributs beschrieben wird, desto später wird dieser ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Das heißt z.B. dass HomeCMDmode vor HomeCMDmode-absent und dieser wiederrum vor HomeCMDmode-absent-ROOMMATE/GUEST-NAME ausgeführt wird usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Um das normale Verhalten wiederherzustellen ist der Wert dieses Attributs auf 0 zu setzen. Dann wird HomeCMDmode-absent-ROOMMATE/GUEST-NAME vor HomeCMDmode-absent und vor HomeCMDmode ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis unendlich in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
==Konfiguration Presence Devices (automatische anwesend/abwesend Umschaltung von ROOMMATE/GUEST)==&lt;br /&gt;
Damit die automatische Zuordnung der Presence Devices zu ihren ROOMMATE/GUEST Devices zuverlässig funktioniert, ist es nötig dass der Hauptteil des Namens des ROOMMATE/GUEST innerhalb des Namens des zugehörigen PRESENCE Device(s) vorkommt.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Attribut HomePresenceDeviceType kann man den zu suchenden TYPE von Presence Device vorgeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Per Default werden nur Devices vom TYPE PRESENCE gesucht und versucht den ROOMMATE/GUEST zuzuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls man z.B. auch Devices vom TYPE dummy zur Anwesenheitssteuerung benutzt, kann man diese im Attribut HomePresenceDeviceType mit hinzunehmen. Es sind alles Device TYPEn möglich die ein &amp;quot;presence&amp;quot; Reading mit den Werten &amp;quot;present/appeared&amp;quot; und &amp;quot;absent/disappeared&amp;quot; bereitstellen. Mehrere TYPEn sind möglich da in diesem Attribut ein Regex erwartet wird. z.B.: dummy oder PRESENCE|dummy oder PRESENCE|dummy|ONKYO_AVR.&lt;br /&gt;
&lt;br /&gt;
===Beispiel===&lt;br /&gt;
Der Device Name meines ROOMMATE ist &amp;quot;rr_Dan&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf der Suche nach dem zugehörigen Presence Device wird der erste Teil (rr_ oder rg_) weggeschnitten und der Rest in Kleinbuchstaben umgewandelt.&amp;lt;br&amp;gt;&lt;br /&gt;
Mit dem was übrig bleibt, bei mir also nur dan, werden die möglichen Presence Devices versucht zu erkennen.&amp;lt;br&amp;gt;&lt;br /&gt;
Mein zugehöriges Presence Device heißt, historisch gewachsen, PRESENCE_rr_Dan und würde somit problemlos zugeordnet werden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen der zugehörigen Presence Devives könnten in ihrer kürzesten Form auch wie folgt sein um meinen ROOMMATE/GUEST Device zugeordnet zu werden:&amp;lt;br&amp;gt;&lt;br /&gt;
 pdan&lt;br /&gt;
 danp&lt;br /&gt;
 ZDan&lt;br /&gt;
 DANZ&lt;br /&gt;
 wenndannsonst&lt;br /&gt;
Aber Achtung, es funktioniert nicht mehr wenn die Namen nicht eindeutig sind. Wenn es z.B. eine rr_Dana geben würde mit Presence Device Name &amp;quot;pdani&amp;quot;, dann würde dieser Name auch bei mir (dan) passen. Das könnte man aber auch bewußt nutzen um mit einem Presence Device 2 ROOMMATE/GUEST Devices gleichzeitig zu steuern.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn die Namen wirklich absolut eindeutig sind, dann könnte man den Regex im Attribut HomePresenceDeviceType sogar auf &amp;quot;.*&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Werden pro ROOMMATE/GUEST mehrere Presence Devices gefunden und zugeordnet, so wird automatisch dass Attribut HomePresenceDeviceAbsentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt; auf die Anzahl der gefundenen Presence Devices gesetzt, so dass der/die jeweilige ROOMMATE/GUEST immer erst als abwesend gewertet wird sobald alle zugehörigen Presence Devices abwesend sind. Analog dazu gibt es noch das Attribut HomePresenceDevicePresentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresence====&lt;br /&gt;
Ist dieses Attribut auf 1 gesetzt, so werden die ROOMMATE/GUEST Devices automatisch zum Status ihrer zugehörigen PRESENCE Devices geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device present - ROOMMATE/GUEST home&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device absent - ROOMMATE/GUEST absent&amp;lt;br&amp;gt;&lt;br /&gt;
Falls es sich bei den von Euch benutzen PRESENCE Devices nicht um Devices vom TYPE PRESENCE handeln sollte, sondern z.B. um PRESENCE und dummy, so kann dieses im Attribut HomePresenceDeviceType als Regex konfiguriert werden! z.B.: PRESENCE|dummy&amp;lt;br&amp;gt;&lt;br /&gt;
Damit ein Device als Presence Device erkannt werden kann, muss dieses über ein presence Reading verfügen.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceType====&lt;br /&gt;
Regex des TYPEs/der TYPEn von Presence Devices&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Regex der Device TYPEn&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: PRESENCE&lt;br /&gt;
&lt;br /&gt;
==Erweiterte Konfiguration==&lt;br /&gt;
Um das HOMEMODE Device vollumfänglich zu benutzen ist es sinnvoll weitere Devices (zur Überwachung) hinzuzufügen.&lt;br /&gt;
&lt;br /&gt;
Die bereits möglichen hinzuzufügenden Devices werden hier folgend nach Attributnamen erklärt.&lt;br /&gt;
&lt;br /&gt;
===Attribute zum Hinzufügen weiterer Geräte===&lt;br /&gt;
&lt;br /&gt;
====HomeEventsCalendarDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeEventsHolidayDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorAirpressure====&lt;br /&gt;
Luftdrucksensor aussen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorHumidityOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussensensors für Luftfeuchtigkeit anzugeben. Dieser muss ein Reading humidity besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für (Aussen)Luftfeuchtigkeit und Aussentemperatur ein und der selbe ist, so muss dieser nur einmalig im Attribut HomeSensorTemperatureOutside hinterlegt werden. Dieser muss dann die beiden Readings humidity und temperature haben. Im Bedarfsfall können diese Readings auch vorher entsprechend durch eigene userReadings erstellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%HUMIDITY%&#039;&#039;&#039; für den Wert des Readings humidity zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorTemperatureOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussentemperatursensors anzugeben. Dieser muss mindestens ein Reading temperature besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für Aussentemperatur auch ein Reading humidity besitzen sollte und dieses auch der Sensor für die Aussenlufteuchtigkeit ist, so muss dieser nur einmalig hier in diesem Attribut hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%TEMPERATURE%&#039;&#039;&#039; für den Wert des Readings temperature zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading temperature und optional humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContact====&lt;br /&gt;
Hier können alle Kontakt Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDcontact Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das optische und magnetische Kontaktsensoren vom HomeMatic. HM-SEC-SCo und HM-SEC-SC-2.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;model=HM-SEC-SC(o|-2)&#039;&#039;&#039; eingetragen um alle diese Kontaktsensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Kontaktsensoren mit ihren Namen im Internal SENSORSCONTACT des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Kontaktsensor folgende Attribute im Attribut userattr hinzugefügt:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====HomeContactType=====&lt;br /&gt;
Typ des Kontakts - wird versucht anhand des Namen/Alias beim Hinzufügen zum HOMEMODE Device zu ermitteln, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: doorinside,dooroutside,doormain,window&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: window&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Kontaktsensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModes=====&lt;br /&gt;
Regex der Mode(s) des HOMEMODE Device in denen keine Offen Warnungen erfolgen sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist ein Kontakt geöffnet während die hier eingestellten Mode(s) eintreten, so wird der noch bestehende Timer abgebrochen. Entgegengesetzt startet er wieder sobal die hier eingestellten Mode(s) verlassen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist hier z.B. &amp;quot;gotosleep|asleep&amp;quot; eingestellt, so kann man z.B. das Fenster schon vor dem Auslösen von gotosleep oder asleep öffnen und der bestehende Offenwarnung-Timer wird dann abgebrochen. Sobald man am Morgen z.B. awoken oder home auslöst, so wird ein neuer Timer gestartet der einen dann an das noch offene Fenster erinnert.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle Modes des HOMEMODE Device&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModesResidents=====&lt;br /&gt;
Devspec der ROOMMATE/GUEST Devices deren Status statt der Modes des HOMEMODE Device für Attribut HomeOpenDontTriggerModes benutzt werden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle überwachten ROOMMATE/GUEST&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenMaxTrigger=====&lt;br /&gt;
Maximale Anzahl an Warnmeldungen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ganze Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimes=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimesDividers=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactOpenTimeDividers des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2 1 2 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsContactReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactReadings====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeDividers====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeOpenTimesDividers in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 2 1 2 2.5 (für 4 Jahreszeiten)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeMin====&lt;br /&gt;
Minimale Zeit in Minuten die mindestens für eine Offenwarnung gewartet werden soll - im Falle dass sich durch den Teiler evtl. zu kleine Werte ergeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: eine Zahle mit max. einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimes====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 7.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminance====&lt;br /&gt;
Devspec von (Innen-)Lichtsensoren deren Durchschnittswert berechnet werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotion====&lt;br /&gt;
Hier können alle Bewegungs Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDmotion Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Motion Sensor Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0801-1001|010f-0800-1001&#039;&#039;&#039; eingetragen um alle diese Bewegungssensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Damit bei den Gen5 Sensoren auch das open im reading state steht, habe ich mir bei diesen Sensoren ein userReading angelegt.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Bewegungssensoren mit ihren Namen im Internal SENSORSMOTION des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Bewegungssensor folgende Attribute im Attribut userattr hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Bewegungssensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsMotionReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeSensorLocation=====&lt;br /&gt;
Standort des Bewegungssensors (außen oder innen) - wird standardmäßig beim Hinzufügen zum HOMEMODE Device auf &amp;quot;inside&amp;quot; gesetzt, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: inside,outside&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: inside&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsMotionValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionReadings====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergy====&lt;br /&gt;
Hier können alle Energie Sensoren als Devspec hinterlegt werden. Diese müssen die beiden Readings power und energy besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Anhand dieser Readings wird dann der Gesamtverbrauch und die derzeitige gesamte Leistungsaufnahme berechnet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Wall Plugs Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0600-1000|010f-0602-1001&#039;&#039;&#039; eingetragen um alle diese Energie Sensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec mit vorhandenen energy und power Readings&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmoke====&lt;br /&gt;
Devspec mit Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorWindspeed====&lt;br /&gt;
Sensor für Windgeschwindigkeit&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors und Reading der Windgeschwindigkeit separiert mit : (z.B. ga_Windsensor:wind)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBattery====&lt;br /&gt;
Devspec von Batteriesensoren mit einem Reading &amp;quot;battery&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerAnyoneElseAtHome====&lt;br /&gt;
auslösendes Gerät für anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn:valueOff&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerPanic====&lt;br /&gt;
auslösendes Gerät für Panikalarm&amp;lt;br&amp;gt;&lt;br /&gt;
valueOff ist optional, wird es weggelassen, so fungiert valueOn als toggle&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn[:valueOff]&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTwilightDevice====&lt;br /&gt;
Hier ist der Name des lokalen Twilight Device anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich die Platzhalter &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039;, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; in den HomeCMD Attributen zur Verfügung. &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039; wird dann durch das Reading light, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; durch das Reading twilight und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; durch das aktuelle Twilight Event ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeUWZ====&lt;br /&gt;
Hier ist der Name des lokalen UWZ Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%UWZ%&#039;&#039;&#039;, &#039;&#039;&#039;%UWZSHORT%&#039;&#039;&#039; und &#039;&#039;&#039;%UWZLONG%&#039;&#039;&#039; sind verfügbar in allen HomeCMD Attributen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des UWZ Geräts&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeYahooWeatherDevice====&lt;br /&gt;
Hier ist der Name des lokalen Yahoo Weather Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich einige Platzhalter zur Verfügung. Für die genaue Beschreibung derer siehe &amp;quot;Platzhalter&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
===HomeText Attribute===&lt;br /&gt;
Die HomeText Attribute sind größtenteils zur Übersetzung einiger benötigter Begriffe gedacht.&amp;lt;br&amp;gt;&lt;br /&gt;
In den speziellen Attributen die mit HomeTextWeather anfangen, sind ganze Texte mit entsprechenden Platzhaltern einzufügen.&lt;br /&gt;
&lt;br /&gt;
====HomeTextAndAreIs====&lt;br /&gt;
Übersetzung für &amp;quot;and&amp;quot;, &amp;quot;are&amp;quot; und &amp;quot;is&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort/Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: and|are|is&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 und|sind|ist&lt;br /&gt;
&lt;br /&gt;
====HomeTextClosedOpen====&lt;br /&gt;
Übersetzung für &amp;quot;closed&amp;quot; und &amp;quot;open&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: closed|open&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 geschlossen|geöffnet&lt;br /&gt;
&lt;br /&gt;
====HomeTextNosmokeSmoke====&lt;br /&gt;
Übersetzung für &amp;quot;no smoke&amp;quot; und &amp;quot;smoke&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: no smoke|smoke&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 kein Rauch|Rauch&lt;br /&gt;
&lt;br /&gt;
====HomeTextRisingConstantFalling====&lt;br /&gt;
Übersetzung für &amp;quot;rising&amp;quot;, &amp;quot;constant&amp;quot; und &amp;quot;falling&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: rising|constant|falling&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 steigend|gleichbleibend|fallend&lt;br /&gt;
&lt;br /&gt;
====HomeTextTodayTomorrowAfterTomorrow====&lt;br /&gt;
Übersetzung für &amp;quot;today&amp;quot;, &amp;quot;tomorrow&amp;quot; und &amp;quot;day after tomorrow&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: today|tomorrow|day after tomorrow&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Heute|Morgen|Übermorgen&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherNoForecast====&lt;br /&gt;
Übersetzung für &amp;quot;No forecast available&amp;quot; - Text wenn keine Wettervorhersage verfügbar ist&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: No forecast available&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es ist leider keine Wettervorhersage für den angegebenen Tag verfügbar!&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastInSpecDays====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage in 4-10 Tagen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 In %DAY% Tagen %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastToday====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für heute&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C. Aktuelle Temperatur %TEMPERATURE%°C bei einer Luftfeuchtigkeit von %HUMIDITY%%. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastTomorrow====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für morgen/übermorgen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherLong====&lt;br /&gt;
Langer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es %TOBE% %CONDITION% bei %TEMPERATURE%°C und %HUMIDITY%% Luftfeuchtigkeit. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h. Der Luftdruck ist %PRESSURETREND% bei %PRESSURE%hPa.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherShort====&lt;br /&gt;
Kurzer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %CONDITION%, %TEMPERATURE%°C, %HUMIDITY%% Luftfeuchtigkeit, Luftdruck %PRESSURE%hPa&lt;br /&gt;
&lt;br /&gt;
===weitere Attribute===&lt;br /&gt;
Viele weitere Dinge lassen sich anpassen.&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedDetails====&lt;br /&gt;
mehr Details anzeigen, abhängig von den zu HOMEMODE hinzugefügten Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: none, detail, both, room&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Auswahlliste&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: none&lt;br /&gt;
&lt;br /&gt;
====HomeDaytimes====&lt;br /&gt;
Eigene Tageszeiten als Paare aus Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Zeit|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 00:00|Mitternacht&lt;br /&gt;
 00:05|Nacht&lt;br /&gt;
 06:30|Morgen&lt;br /&gt;
 10:00|Vormittag&lt;br /&gt;
 13:00|Mittag&lt;br /&gt;
 14:30|Nachmittag&lt;br /&gt;
 17:30|Vorabend&lt;br /&gt;
 19:00|Abend&lt;br /&gt;
 23:00|Spätabend&lt;br /&gt;
&lt;br /&gt;
====HomeIcewarningOnOffTemps====&lt;br /&gt;
2 leerzeichenseparierte Temperaturen für das Ein- und Ausschalten der Eiswarnung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei leerzeichenseparierte Temperaturen mit maximal einer Kommastelle&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 2 3&lt;br /&gt;
&lt;br /&gt;
====HomeModeAlarmArmDelay====&lt;br /&gt;
Zeit in Sekunden um das aktivieren der Alarmschaltung zu verzögern.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl (gleiche Verzögerung für alle modeAlarm) oder 3 leerzeichenseparierte Zahlen für jeden modeAlarm (Reihenfolge: armaway armnight armhome)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAtTmpRoom====&lt;br /&gt;
Diesen Raum zu temporäre at(s) hinzufügen die von HOMEMODE generiert werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceAbsentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;absent&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: maximale Anzahl von verfügbaren Presence Geräten für jeden ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDevicePresentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;present&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomePublicIpCheckInterval====&lt;br /&gt;
Interval in Minuten für die Überprüfung der öffentlichen IP-Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0 (deaktiviert)&lt;br /&gt;
&lt;br /&gt;
====HomeSeasons====&lt;br /&gt;
Eigene Jahreszeiten als Paare aus Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Datum|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 03.01|spring 06.01|summer 09.01|autumn 12.01|winter&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 03.01|Frühling&lt;br /&gt;
 06.01|Sommer&lt;br /&gt;
 09.01|Herbst&lt;br /&gt;
 12.01|Winter&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryLowPercentage====&lt;br /&gt;
Prozentsatz um einen Batteriesensor mit geringer Batterie anzuzeigen (nur bei Sensoren die ihren Batteriewert prozentual angeben)&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 50&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryReading====&lt;br /&gt;
Reading der Batteriesensoren welches statt &amp;quot;battery&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: battery&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminanceReading====&lt;br /&gt;
Reading der Lichtsensoren welches statt &amp;quot;luminance&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: luminance&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergyReadings====&lt;br /&gt;
Readings der Power/Energy Sensoren welche statt &amp;quot;power&amp;quot; und &amp;quot;energy&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: 2 leerzeichenseparierte Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: power energy&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeReading====&lt;br /&gt;
Readings der Rauchmelder welche statt &amp;quot;state&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ein Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeValue====&lt;br /&gt;
Regex der Auslösewerte von Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: RegEx&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: on&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialLocation====&lt;br /&gt;
Hier können eigene zusätzliche location(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; location &amp;lt;LOCATION&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialModes====&lt;br /&gt;
Hier können eigene zusätzliche mode(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; mode &amp;lt;MODE&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTrendCalcAge====&lt;br /&gt;
Zeit in Sekunden für das Maximalalter des vorherigen Wertes für die Trendberechnung&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 900&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Teil der Konfiguration ist das Befüllen der HomeCMD Attribute. Da dieses durch die Vermischung von FHEM Code, Perl Code und zusätzlichen Platzhaltern erst einmal sehr befremdlich sein kann, habe ich bei der Beschreibung der HomeCMD Attribute teilweise Beispiele hinzugefügt um den Einstieg weiter zu erleichtern.&lt;br /&gt;
&lt;br /&gt;
==HomeCMD Attribute (mit Beispielen)==&lt;br /&gt;
Die HomeCMD Attribute sind zum Festlegen der jeweiligen Schaltaktionen gedacht und können damit evtl. vorhandene notify/DOIF ablösen. Sie können mit FHEM-Code, Perl-Code oder aber auch mit beidem vermischt befüllt werden (wovon ich allerdings abrate). Zusätzlich sind noch diverse Platzhalter (siehe Platzhalter) verfügbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Perl-Code innerhalb der HomeCMD Attribute gibt es hier Besonderheiten.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
*Im Gegensatz zur FHEM-Eingabezeile müssen hier keine Semikolon verdoppelt werden&lt;br /&gt;
*Kommetarzeilen sind zulässig&lt;br /&gt;
*Kommentare am Ende einer Perl-Zeile sind nicht zulässig&lt;br /&gt;
&lt;br /&gt;
Typischer Weise werden in den HomeCMD Attributen weitere Module angesprochen.&amp;lt;br&amp;gt;&lt;br /&gt;
Z.B. benutze ich für jegliche Form der Benachrichtigung den msg Befehl.&lt;br /&gt;
&lt;br /&gt;
Keines der HomeCMD Attribute hat einen Standardwert. Es müssen alle Befehle selbst programmiert werden.&lt;br /&gt;
&lt;br /&gt;
Platzhalter die Text(e) (string) beinhalten, müssen im Perl-Code in Anführungszeichen gesetzt werden (Beispiel %SENSOR%).&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter die Zahlen beinhalten (int,float) sollten nicht in Anführungszeichen gesetzt werden damit Zahlenvergleiche (mittels ==, &amp;lt;=, &amp;gt;=, &amp;gt;, &amp;lt;) funktionieren (Beispiel %LIGHT%, %ICE% oder %TEMPERATURE%).&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-off====&lt;br /&gt;
Befehle die beim Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Rauchalarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-on====&lt;br /&gt;
Befehle die bei einem Rauchalarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;meldet&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;melden&amp;quot; if (%SMOKECT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %SMOKEHR% $is Rauchalarm!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Sabotage Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-off====&lt;br /&gt;
Befehle die beim Ende eines Sabotage Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Manipulationen wurden beseitigt!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-on====&lt;br /&gt;
Befehle die bei einem Sabotage Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%TAMPEREDCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %TAMPEREDHR% $is sabotiert!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-off====&lt;br /&gt;
Befehle die beim Ende eines Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg ENTWARNUNG: Alle Alarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-on====&lt;br /&gt;
Befehle die bei einem Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%ALARMCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg audio,push,light 3 !!! ALARM !!! %ALARMHR% $is ausgelöst!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome====&lt;br /&gt;
Befehle die beim on/off von anyoneElseAtHome ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-off====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armaway&amp;quot; auf &amp;quot;armhome&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome on&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun niemand anderes mehr zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-on====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armhome&amp;quot; auf &amp;quot;armaway&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder wieder Alarme melden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird anyoneElseAtHome bei Anwesenheit und nicht deaktiviertem HomeAutoAlarmModes aktiviert, so passiert erst einmal nichts, ausser dass die hier angegebenen Befehle ausgeführt werden. Wird dann später die Abwesenheit erkannt, schaltet der Alarm Mode auf &amp;quot;armhome&amp;quot; statt auf &amp;quot;armaway&amp;quot; damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome off&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun noch jemand anderes zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDbatteryLow====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Sensor einen niedrigen Batteriewert meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg;&lt;br /&gt;
   $msg = &amp;quot;Die Batterien von %BATTERYLOW% gehen zur Neige und sollten ausgetauscht werden!&amp;quot; if (%BATTERYLOWCT% == 1);&lt;br /&gt;
   $msg = &amp;quot;Die Batterien bei folgenden Geräten sollten ausgetauscht werden: %BATTERYLOWALL%&amp;quot; if (%BATTERYLOWCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push $msg&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontact====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor geschlossen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geschlossen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor offen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun offen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormain====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor Type doormain open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain wird geschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 { &lt;br /&gt;
   # Wenn es Ankommende gibt&lt;br /&gt;
   if (&amp;quot;%ARRIVERS%&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Zusammenstellen der Begrüßung&lt;br /&gt;
     my $msg = &amp;quot;Gute&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # &amp;quot;n&amp;quot; anhängen wenn Tageszeit nicht Nacht ist&lt;br /&gt;
     $msg .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Leerzeichen einfügen&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # den Feiertag der Tageszeit voranstellen wenn ein Feiertag im Kalender FEIERTAG ist&lt;br /&gt;
     $msg .= &amp;quot;%FEIERTAG%-&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Tageszeit einfügen&lt;br /&gt;
     $msg .= &amp;quot;%DAYTIME% &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # bei ROOMMATE &amp;quot;zu Hause&amp;quot; in Begrüßung einfügen&lt;br /&gt;
     $msg .= &amp;quot;zu Hause &amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; =~ /^rr_/);&lt;br /&gt;
 &lt;br /&gt;
     # Ankommende einfügen&lt;br /&gt;
     $msg .= &amp;quot;%ARRIVERS%&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Begrüßung am Sonos im Flur ausgeben bei Abwesenheit über 60 min&lt;br /&gt;
     fhem &amp;quot;msg audio \@fl_Sonos $msg!&amp;quot; if (%DURABSENCELAST% &amp;gt; 60);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain geöffnet&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geöffnet!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning1====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die erste Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: erste Offenwarnzeit des Kontakts erreicht&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning2====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die zweite Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: ab Erreichen der zweiten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht immer noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarningLast====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die letzte Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Erreichen der letzten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das ist der letzte Hinweis %ALIAS% endlich zu schliessen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald sich die Tageszeit (daytime) auf einen beliebigen Wert ändert.&amp;lt;br&amp;gt;&lt;br /&gt;
Um die jeweilige eingetretene Tageszeit zu ermitteln ist der Platzhalter &#039;&#039;&#039;%DAYTIME%&#039;&#039;&#039; vorgesehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime)&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime-&amp;amp;lt;DAYTIME&amp;amp;gt;====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald die jeweilige Tageszeit (daytime) erreicht ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime) auf bestimmten Wert&amp;lt;br&amp;gt;&lt;br /&gt;
Bei &amp;quot;night&amp;quot; könnte man z.B. die Heizung bewohnerunabhängig ausschalten, bei &amp;quot;morning&amp;quot; wieder ein.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceDisable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceDisable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun deaktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional wirklich attr disable für Device setzen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;attr %DEVICE%:FILTER=disable!=1 disable 1; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf gone/none setzen wenn Presence Devices deaktiviert werden&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     my $resident = $1;&lt;br /&gt;
     my $gone = $resident =~ /^rr_/ ? &amp;quot;gone&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set $resident:FILTER=state!=$gone state $gone&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceEnable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceEnable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun aktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional attr disable für Device entfernen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;deleteattr %DEVICE%:FILTER=disable=1 disable; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf home setzen wenn Presence Devices aktiviert werden und anwesend sind&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $1:FILTER=state!=home state home&amp;quot; if (ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;present&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd====&lt;br /&gt;
Befehle die beim Anfang/Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%DND%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun eingeschaltet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun beendet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-off====&lt;br /&gt;
Befehle die beim Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-on====&lt;br /&gt;
Befehle die beim Beginn des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun eingeschaltet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent====&lt;br /&gt;
Befehle die beim Beginn eines beliebigen (holiday)Kalender Events ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten on&amp;quot; if (&amp;quot;%EVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-each====&lt;br /&gt;
Befehle die beim Beginn/Ende eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-URLAUBDAN-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Dan hat jetzt Urlaub!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Der Urlaub von Dan ist nun zu Ende!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-WOHNUNG-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Heizung an/aus schalten&lt;br /&gt;
   my $heiz = &amp;quot;([bksw]z|ku)_Thermostat&amp;quot;;&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /^heizung(..+)?$/i)&lt;br /&gt;
   {&lt;br /&gt;
     my $zeit = $1;&lt;br /&gt;
     if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
 &lt;br /&gt;
       # morgens nicht alle Thermostaten schalten&lt;br /&gt;
       $heiz = &amp;quot;([bks]z|ku)_Thermostat&amp;quot; if ($zeit &amp;amp;&amp;amp; $zeit =~ /morgens?$/i);&lt;br /&gt;
       fhem &amp;quot;set $heiz:FILTER=controlMode!=day controlMode day&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^heizung/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $heiz:FILTER=controlMode!=night controlMode night&amp;quot; if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # WLAN an/aus schalten&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi off&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi on&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Putzfrau (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Gast (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-begin====&lt;br /&gt;
Befehle die beim Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-Neujahr-begin&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set %SENSORSENERGY% meterReset&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-end====&lt;br /&gt;
Befehle die bei Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemDEFINED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn ein neues Gerät angelegt wird (define)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Jedem neu definierten Gerät den Geräte-TYPE auch als Raum im Menüpunkt Module zuweisen&lt;br /&gt;
   fhem &amp;quot;attr %DEFINED% room Module-&amp;gt;&amp;quot;.$defs{&amp;quot;%DEFINED%&amp;quot;}-&amp;gt;{TYPE};&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemINITIALIZED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn FHEM gestartet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg FHEM Home wurde gestartet...&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemSAVE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn in FHEM die Konfigurationsdatei gespeichert wird&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel (Backup von fhem.cfg und fhem.state):&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Datum/Uhrzeit&lt;br /&gt;
   my $now = Timeow();&lt;br /&gt;
   # Leerzeichen durch Unterstriche ersetzen&lt;br /&gt;
   $now =~ s/ /_/g;&lt;br /&gt;
   # Backup der Datei fhem.cfg&lt;br /&gt;
   `cp $attr{global}{configfile} ./backup/fhem.cfg.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.cfg.$now&amp;quot;;&lt;br /&gt;
   # Backup der Datei fhem.state&lt;br /&gt;
   `cp $attr{global}{statefile} ./backup/fhem.state.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.state.$now&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemUPDATE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn das Update von FHEM ausgeführt wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das Update für FHEM ist beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning====&lt;br /&gt;
Befehle die bei Anfang/Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0/1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%ICE%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg push ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!.&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-off====&lt;br /&gt;
Befehle die bei Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-on====&lt;br /&gt;
Befehle die bei Beginn der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation====&lt;br /&gt;
Befehle die beim Ändern der location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation-&amp;amp;lt;LOCATION&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf eine bestimmte location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmte location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode====&lt;br /&gt;
Befehle die beim Ändern von mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-absent-belated====&lt;br /&gt;
Befehle die nachträglich zur Abwesenheit ausgeführt werden sollen, die Zeit kann im Atteribut &amp;quot;HomeModeAbsentBelatedTime&amp;quot; eingestellt werden&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Abwesenheit + XX min&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten mode&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-absent&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set HarmonyHub:FILTER=activity!=PowerOff activity PowerOff;&lt;br /&gt;
 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 set TYPE=SONOSPLAYER:FILTER=Volume&amp;gt;0 Volume 0;&lt;br /&gt;
 set Sonos stopAll;&lt;br /&gt;
 sleep 3;&lt;br /&gt;
 set Wohnung [FILTER=state!=off] off&amp;quot;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 define atTmp_wz_Media_aus_%SELF% at +01:00:00 set HarmonyHub:FILTER=currentActivity!=PowerOff activity PowerOff;&lt;br /&gt;
 define atTmp_wz_Venti_aus_%SELF% at +01:00:00 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 define atTmp_wzLS_aus_%SELF% at +00:30:00 set wz_LS scene aus;&lt;br /&gt;
 define atTmp_all_Sonos_vol_down_%SELF% at +00:02:00 set TYPE=SONOSPLAYER:FILTER=Volume!=0 Volume 0 1;&lt;br /&gt;
 define atTmp_all_Sonos_off_%SELF% at +00:02:30 set Sonos stopAll;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=off off;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=on on&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-gone&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlManu off&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen beliebigen Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von beliebigem Resident ausgelöst&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 msg audio @%AUDIO% Guten Nacht und schlaf&#039; gut %ALIAS%!&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg = &amp;quot;Guten&amp;quot;;&lt;br /&gt;
   $msg .= &amp;quot; %FEIERTAG%&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
   $msg .= &amp;quot; Morgen %ALIAS%&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;msg audio \@%AUDIO% $msg&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;defmod atTmp_wetter_%RESIDENT%_%SELF% at +00:07:00 msg audio Wettervorhersage für heute: %FORECASTTODAY%&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen bestimmten Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von bestimmten Resident ausgelöst&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm====&lt;br /&gt;
Befehle die beim Ändern von modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung modeAlarm&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm-&amp;amp;lt;armaway/armhome/armnight/disarm&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armaway&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%PREVAMODE%&amp;quot; eq &amp;quot;disarm&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Alarmanlage einschalten&lt;br /&gt;
     fhem &amp;quot;set AA_Arm:FILTER=level!=100 alarmLevel armAll&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht zusammensetzen&lt;br /&gt;
     my $msg;&lt;br /&gt;
     $msg .= &amp;quot;Die Alarmanlage ist nun scharf geschaltet!&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
     my $is = &amp;quot;%ALARMHR%&amp;quot; =~ /und/ ? &amp;quot;sind&amp;quot; : &amp;quot;ist&amp;quot;;&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot; if ($msg);&lt;br /&gt;
     $msg .= &amp;quot;ACHTUNG: %ALARMHR% $is noch offen!!!&amp;quot; if (%ALARMCT%);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an ROOMMATE/GUEST senden&lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 &lt;br /&gt;
     # Eingangstür abschließen falls noch nicht geschehen&lt;br /&gt;
     fhem &amp;quot;set fl_Tuerschloss:FILTER=state!=locked lock&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armhome&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armnight&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-disarm&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Alarmanlage ausschalten&lt;br /&gt;
   fhem &amp;quot;set AA_Arm:FILTER=level!=0 alarmLevel disarmed&amp;quot;;&lt;br /&gt;
   my $prio = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # Nachrichtenpriorität auf 1 setzen bei Ankunft (höhere Lautstärke beim Abspielen damit man das auch vor der Tür hört)&lt;br /&gt;
   $prio = &amp;quot; 1&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; eq &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht an ROOMMATE/GUEST senden wenn der vorherige alarmMode nicht &amp;quot;armnight&amp;quot; ist&lt;br /&gt;
   fhem &amp;quot;msg audio \@fl_Sonos$prio Die Alarmanlage ist nun ausgeschaltet %ALIAS%!&amp;quot; if (&amp;quot;%PREVAMODE%&amp;quot; ne &amp;quot;armnight&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion====&lt;br /&gt;
Befehle die bei Statusänderung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: öffnen/schließen eines beliebigen Bewegungsmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Raum aus Sensornamen ermitteln, z.B. bz_Sensor&lt;br /&gt;
   my $room = (split /_/,&amp;quot;%SENSOR%&amp;quot;)[0];&lt;br /&gt;
 &lt;br /&gt;
   # Status des structure aller Lichter dieses Raums&lt;br /&gt;
   my $lichter = Value($room.&amp;quot;_Lichter&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Status des dummy Tageslicht&lt;br /&gt;
   my $tl = Value(&amp;quot;Tageslicht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   if (&amp;quot;%STATE%&amp;quot; eq &amp;quot;geöffnet&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Lichtwert des Sensors&lt;br /&gt;
     my $lum = ReadingsNum(&amp;quot;%SENSOR%&amp;quot;,&amp;quot;luminance&amp;quot;,100);&lt;br /&gt;
 &lt;br /&gt;
     # Löschen des evtl. schon vorhandenen &amp;quot;at&amp;quot;&lt;br /&gt;
     fhem &amp;quot;delete atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot; if (IsDevice(&amp;quot;atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
     # Licht nur wenn kein Tageslicht oder Lichtwert des Sensors kleiner als 10 und AutoLight eingeschaltet und modeAlarm nicht armaway&lt;br /&gt;
     if (($tl eq &amp;quot;off&amp;quot; || $lum &amp;lt; 10) &amp;amp;&amp;amp; $lichter eq &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot; &amp;amp;&amp;amp; &amp;quot;%AMODE%&amp;quot; ne &amp;quot;armaway&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $scene;&lt;br /&gt;
 &lt;br /&gt;
       # verschiedene Szenen für verschiedene Modus bzw. Aussenlichtstärken&lt;br /&gt;
       if (&amp;quot;%MODE%&amp;quot; eq &amp;quot;gotosleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Abend&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (&amp;quot;%MODE%&amp;quot; eq &amp;quot;asleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Nacht&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;gt; 3)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;viel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;lt; 4)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;mittel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       # Schalten der entsprechenden Szene (Modul LightScene)&lt;br /&gt;
       fhem &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene $scene&amp;quot; if ($scene);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     # unterschiedliche Ausschaltzeiten für unterschiedliche Räume&lt;br /&gt;
     my $t = 3;&lt;br /&gt;
     $t = 15 if ($room eq &amp;quot;wz&amp;quot;);&lt;br /&gt;
     $t = 2 if ($room eq &amp;quot;bz&amp;quot; || ($room =~ /wz|ku/ &amp;amp;&amp;amp; &amp;quot;%MODE%&amp;quot; =~ /sleep/));&lt;br /&gt;
     $t = 1 if ($room eq &amp;quot;fl&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Zahl in Minuten umrechnen in einen Zeitpunkt für das &amp;quot;at&amp;quot;&lt;br /&gt;
     my $d = HOMEMODE_hourMaker($t);&lt;br /&gt;
 &lt;br /&gt;
     # Anlegen des &amp;quot;at&amp;quot; zum Ausschalten des Lichts wenn die Lichter angeschaltet sind und auch AutoLight eingeschaltet ist&lt;br /&gt;
     if ($lichter ne &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $cmd = &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene aus&amp;quot;;&lt;br /&gt;
       fhem &amp;quot;defmod atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF% at +$d $cmd&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-off====&lt;br /&gt;
Befehle die bei Ende der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-on====&lt;br /&gt;
Befehle die bei Beginn der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set w_Steckdosen [FILTER=state!=on] on;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode auto&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-device====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein beliebiges Presence Device, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebiges Presence Device&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present-device&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # mindestens 1x täglich den Batteriewert des PRESENCE Geräts bei erkannter Anwesenheit holen&lt;br /&gt;
   fhem &#039;&amp;quot;sudo /opt/fhem/scripts/GTag-bat.sh %DEVICE% %ADDRESS% &amp;amp;&amp;quot;&#039;&lt;br /&gt;
     if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE_/ &amp;amp;&amp;amp; (!defined ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,undef) || ReadingsAge(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,0) &amp;gt; 64800));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen beliebigen Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebigen Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-absent-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Mich benachrichtigen wenn ich nicht zu hause bin und jemand anderes die Wohnung verlässt&lt;br /&gt;
   fhem &amp;quot;msg push \@rr_Dan %ALIAS% hat gerade die Wohnung verlassen!&amp;quot;&lt;br /&gt;
     if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot; &amp;amp;&amp;amp; ReadingsVal(&amp;quot;rr_Dan&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) ne &amp;quot;present&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Verabschiedungsnachricht zusammensetzen&lt;br /&gt;
   my $msg;&lt;br /&gt;
 &lt;br /&gt;
   # Alle außer mich selbst verabschieden&lt;br /&gt;
   $msg .= &amp;quot;Bis bald und auf Wiedersehen %ALIAS%...&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Glättewarnung wenn nötig&lt;br /&gt;
   $msg .= &amp;quot; ACHTUNG!!! Es ist %TEMPERATURE%°C kalt! Somit könnte es glatt werden!&amp;quot; if (%ICE%);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht senden wenn vorhanden&lt;br /&gt;
   fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispielcode für &amp;quot;HomeCMDpresence-present-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # alle Ankommenden außer mir selbst&lt;br /&gt;
   if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Benachrichtigung wenn jemand kommt&lt;br /&gt;
     fhem &amp;quot;msg audio %ALIAS% kommt gerade!&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; ne &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) zusammensetzen&lt;br /&gt;
     my $g = &amp;quot;gute&amp;quot;;&lt;br /&gt;
     $g .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) senden &lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% Willkommen und $g %DAYTIME% %ALIAS%!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmten Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;-&amp;amp;lt;DEVICE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein bestimmtes Presence Device eines bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Dieses Attribut ist nur verfügbar wenn ein Resident mehr als ein Presence Device hat&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmtes Presence Device eines bestimmten Resident&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Jahreszeit&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $t = &amp;quot;%SEASON%&amp;quot;;&lt;br /&gt;
   $t .= &amp;quot;s&amp;quot; if ($t eq &amp;quot;Frühling&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;msg push Die Wohnung ist nun im $t-Modus!&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set Heizungen [FILTER=controlMode!=auto] controlMode auto&amp;quot; if ($t ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason-&amp;amp;lt;SEASON&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit in eine bestimmte Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung bestimmte Jahreszeit&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight====&lt;br /&gt;
Befehle die bei Änderung der Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight-&amp;amp;lt;sr/sr_astro/sr_civil/sr_indoor/sr_weather/ss/ss_astro/ss_civil/ss_indoor/ss_weather&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung zu bestimmter Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung zu bestimmter Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn====&lt;br /&gt;
Befehle die bei Beginn/Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn/Ende der UWZ Warnungen&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-begin====&lt;br /&gt;
Befehle die bei Beginn der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg %UWZLONG%&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-end====&lt;br /&gt;
Befehle die beim Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg Alle Unwetterwarnungen sind nun beendet!&lt;br /&gt;
&lt;br /&gt;
=Platzhalter=&lt;br /&gt;
==verfügbar in allen HomeCMD Attributen==&lt;br /&gt;
===%ADDRESS%===&lt;br /&gt;
MAC Adresse des zuletzt ausgelösten Presence Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALARM%===&lt;br /&gt;
Liste mit Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&lt;br /&gt;
&lt;br /&gt;
===%ALARMCT%===&lt;br /&gt;
Anzahl der ausgelösten Alarm Geräte&lt;br /&gt;
&lt;br /&gt;
===%ALARMHR%===&lt;br /&gt;
Liste mit (human readable) Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für msg benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
Alias des zuletzt ausgelösten Resident&lt;br /&gt;
&lt;br /&gt;
===%AMODE%===&lt;br /&gt;
aktueller Alarm Mode&lt;br /&gt;
&lt;br /&gt;
===%AEAH%===&lt;br /&gt;
Wert von anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 1 wenn on und 0 wenn off&lt;br /&gt;
&lt;br /&gt;
===%ARRIVERS%===&lt;br /&gt;
Alias-Liste der ROOMMATE/GUEST deren location auf arrival steht&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Residents zu begrüßen&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. Peter, Paul und Marry&lt;br /&gt;
&lt;br /&gt;
===%AUDIO%===&lt;br /&gt;
Audio Device des zuletzt ausgelösten ROOMMATE/GUEST (Attribut msgContactAudio)&amp;lt;br&amp;gt;&lt;br /&gt;
wenn das Attribut msgContactAudio des jeweiligen Resident keinen Wert hat, so wird versucht den Wert des Attributs aus dem globalMsg (sofern vorhanden) auszulesen&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Resident spezifische msg(s) vom Typ audio zu senden, z.B. Nacht/Morgen Grüße/Wünsche&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOW%===&lt;br /&gt;
Alias des zu letzt gemeldeten Geräts mit niedrigem Batteriestand&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWALL%===&lt;br /&gt;
Wert des Reading batteryLow_hr&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWCT%===&lt;br /&gt;
Wert des Reading batteryLow_ct&lt;br /&gt;
&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Reading condition des überwachten Yahoo weather Device&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für Wetter(vorhersage) benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%CONTACT%===&lt;br /&gt;
Wert des Reading lastContact (Name des zuletzt geöffneten Kontakt Sensor)&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um msg zu versenden&lt;br /&gt;
&lt;br /&gt;
===%DAYTIME%===&lt;br /&gt;
Wert des Reading daytime&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Tageszeit spezifische Aktionen zu schalten&lt;br /&gt;
&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
Name des zuletzt ausgelösten Presence Gerät&lt;br /&gt;
&lt;br /&gt;
===%DEVICEA%===&lt;br /&gt;
Wert des Reading lastAbsentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DEVICEP%===&lt;br /&gt;
Wert des Reading lastPresentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DISABLED%===&lt;br /&gt;
Wert des Reading devicesDisabled&lt;br /&gt;
&lt;br /&gt;
===%DND%===&lt;br /&gt;
DND Status&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn an, 0 wenn aus&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCE%===&lt;br /&gt;
Wert des Reading durTimerAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCELAST%===&lt;br /&gt;
Wert des Reading lastDurAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCE%===&lt;br /&gt;
Wert des Reading durTimerPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCELAST%===&lt;br /&gt;
Wert des Reading lastDurPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEP%===&lt;br /&gt;
Wert des Reading durTimerSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEPLAST%===&lt;br /&gt;
Wert des Reading lastDurSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME&amp;gt;%===&lt;br /&gt;
Event des benannten Kalenders&amp;lt;br&amp;gt;&lt;br /&gt;
0 wenn kein gerade kein Event ist&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME-EVENTNAME&amp;gt;%===&lt;br /&gt;
0 wenn das benannte Event nicht aktiv ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn das benannte Event aktiv ist&lt;br /&gt;
&lt;br /&gt;
===%FORECAST%===&lt;br /&gt;
Wettervorhersage für morgen&lt;br /&gt;
&lt;br /&gt;
===%FORECASTTODAY%===&lt;br /&gt;
Wettervorhersage für heute&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITY%===&lt;br /&gt;
Wert des Reading humidity von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITYTREND%===&lt;br /&gt;
Wert des Reading humidityTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%ICE%===&lt;br /&gt;
0 wenn keine Eiswarnung besteht&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn Eiswarnung besteht&lt;br /&gt;
&lt;br /&gt;
===%IP%===&lt;br /&gt;
Wert des Reading publicIP von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LIGHT%===&lt;br /&gt;
Wert des Reading light von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATION%===&lt;br /&gt;
Wert des Reading location von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATIONR%===&lt;br /&gt;
Wert des Reading location des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCE%===&lt;br /&gt;
Wert des Reading luminance von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCETREND%===&lt;br /&gt;
Wert des Reading luminanceTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%MODE%===&lt;br /&gt;
gerade aktiver Modus von HOMEMODE (Reading mode)&lt;br /&gt;
&lt;br /&gt;
===%MODEALARM%===&lt;br /&gt;
aktueller Alarm Mode (wie %AMODE%)&lt;br /&gt;
&lt;br /&gt;
===%MOTION%===&lt;br /&gt;
Wert des Reading lastMotion von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%NAME%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %SELF%)&lt;br /&gt;
&lt;br /&gt;
===%OPEN%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENCT%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENHR%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PANIC%===&lt;br /&gt;
0 wenn panic ausgeschaltet ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn panic eingeschaltet ist&lt;br /&gt;
&lt;br /&gt;
===%RESIDENT%===&lt;br /&gt;
Name des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PRESENT%===&lt;br /&gt;
presence von HOMEMODE&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESENTR%===&lt;br /&gt;
presence des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESSURE%===&lt;br /&gt;
Wert des Reading pressure von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PRESSURETREND%===&lt;br /&gt;
Wert des Reading pressureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVAMODE%===&lt;br /&gt;
vorheriger modeAlarm von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVCONTACT%===&lt;br /&gt;
vorheriger geöffneter Kontaktsensor&lt;br /&gt;
&lt;br /&gt;
===%PREVMODE%===&lt;br /&gt;
vorheriger mode von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVMODER%===&lt;br /&gt;
vorheriger state des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PREVMOTION%===&lt;br /&gt;
vorheriger geöffneter Bewegungsmelder&lt;br /&gt;
&lt;br /&gt;
===%SEASON%===&lt;br /&gt;
Wert des Reading season von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SELF%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %NAME%)&lt;br /&gt;
&lt;br /&gt;
===%SENSORSBATTERY%===&lt;br /&gt;
Liste aus Internal SENSORSBATTERY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSCONTACT%===&lt;br /&gt;
Liste aus Internal SENSORSCONTACT&lt;br /&gt;
&lt;br /&gt;
===%SENSORSENERGY%===&lt;br /&gt;
Liste aus Internal SENSORSENERGY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSMOTION%===&lt;br /&gt;
Liste aus Internal SENSORSMOTION&lt;br /&gt;
&lt;br /&gt;
===%SENSORSSMOKE%===&lt;br /&gt;
Liste aus Internal SENSORSSMOKE&lt;br /&gt;
&lt;br /&gt;
===%SMOKE%===&lt;br /&gt;
Wert des Reading alarmSmoke von HOMEMODE&lt;br /&gt;
0 wenn kein Alarm&lt;br /&gt;
&lt;br /&gt;
===%SMOKECT%===&lt;br /&gt;
Wert des Reading alarmSmoke_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SMOKEHR%===&lt;br /&gt;
Wert des Reading alarmSmoke_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPERED%===&lt;br /&gt;
Wert des Reading sensorsTampered von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDCT%===&lt;br /&gt;
Wert des Reading sensorsTampered_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDHR%===&lt;br /&gt;
Wert des Reading sensorsTampered_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURE%===&lt;br /&gt;
Wert des Reading temperature von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURETREND%===&lt;br /&gt;
Wert des Reading temperatureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TOBE%===&lt;br /&gt;
are/sind oder is/ist der Wetterkondition&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHT%===&lt;br /&gt;
Wert des Reading twilight von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHTEVENT%===&lt;br /&gt;
aktuelles twilight Event&lt;br /&gt;
&lt;br /&gt;
===%UWZ%===&lt;br /&gt;
UWZ Warnlevel&lt;br /&gt;
&lt;br /&gt;
===%UWZLONG%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (lange Version)&lt;br /&gt;
&lt;br /&gt;
===%UWZSHORT%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (kurze Version)&lt;br /&gt;
&lt;br /&gt;
===%WEATHER%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather short&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WEATHERLONG%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather long&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WIND%===&lt;br /&gt;
Wert des Reading wind von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%WINDCHILL%===&lt;br /&gt;
Wert des Reading wind_chill vom eingebundenen Yahoo Wetter Gerät&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDcontact, HomeCMDmotion und HomeCMDalarm Attributen==&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%SENSOR%===&lt;br /&gt;
name des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%STATE%===&lt;br /&gt;
state des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeTextWeatherForecast Attributen==&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Readings condition des Yahoo Weather Geräts&lt;br /&gt;
&lt;br /&gt;
===%DAY%===&lt;br /&gt;
Tag der Wettervorhersage (1 - heute, 2 - morgen)&lt;br /&gt;
&lt;br /&gt;
===%HIGH%===&lt;br /&gt;
maximale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
===%LOW%===&lt;br /&gt;
minimale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDevent Attributen==&lt;br /&gt;
===%CALENDAR%===&lt;br /&gt;
Name der Kalenders&lt;br /&gt;
&lt;br /&gt;
===%DESCRIPTION%===&lt;br /&gt;
Beschreibung des aktuellen Event des Kalenders (nicht verfügbar bei holiday Geräten)&lt;br /&gt;
&lt;br /&gt;
===%EVENT%===&lt;br /&gt;
Name/Titel des aktuellen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
===%PREVEVENT%===&lt;br /&gt;
Name/Titel des vorherigen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDdevice Attributen==&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
name der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
=Benötigte Events=&lt;br /&gt;
Folgende Events werden von HOMEMODE ausgewertet bzw. werden benötigt damit HOMEMODE vollumfänglich funktionieren kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;DEVICE-TYPE&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;EVENT&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;RESIDENTS&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;ROOMMATE,GUEST&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wayhome&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSCONTACT}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsContactReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSMOTION}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsMotionReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSLUMINANCE}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;luminance&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsLuminanceReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSENERGY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;power&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;energy&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsPowerEnergyReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSBATTERY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;battery&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsBatteryReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomePresenceDeviceType&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeYahooWeatherDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wind&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeTwilightDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;light&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;twilight&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;aktEvent&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorTemperatureOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorHumidityOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeEventsHolidayDevices&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeUWZ&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;WarnCount&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=24567</id>
		<title>HOMEMODE</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=24567"/>
		<updated>2018-01-16T22:17:20Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* verfügbar in den HomeCMDevent Attributen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Das Modul wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden und viele grundlegende Automationen durch Hinzufügen weiterer Geräte bereitzustellen.&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=HOMEMODE&lt;br /&gt;
|ModFTopic=64317&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=22_HOMEMODE.pm&lt;br /&gt;
|ModOwner=DeeSPe&lt;br /&gt;
}}&lt;br /&gt;
Diese Seite beschreibt die Konfiguration und Verwendung des Moduls &#039;&#039;22_HOMEMODE.pm&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Das Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier aufgeführte Anleitung entspricht dem Modul in Version 1.4.0.&lt;br /&gt;
&lt;br /&gt;
Viele allgemein typische Automationen sind bereits fertig integriert.&lt;br /&gt;
&lt;br /&gt;
Die jeweils per Event auszuführenden Befehle können in den entsprechenden &#039;&#039;HomeCMD...&#039;&#039; Atributen hinterlegt werden und so in der Detail Ansicht des HOMEMODE Geräts übersichtlich angezeigt und bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen vieler notify/DOIF ist durch den Einsatz von &#039;&#039;HOMEMODE&#039;&#039; unnötig.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wurde das Modul für die Verwendung mit HomeKit als GUI optimiert. Alle möglichen Mappings für Homebridge sind bereits enthalten und können über einen set Befehl aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:HOMEMODE_Device.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Um Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; benutzen zu können benötigt man als Mindestvoraussetzung ein bereits angelegtes RESIDENTS Gerät mit entsprechenden ROOMMATE/GUEST Geräten.&lt;br /&gt;
&lt;br /&gt;
==Mögliche Automationen==&lt;br /&gt;
Alle Automationen sind optional.&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Beispiele:&lt;br /&gt;
*Änderung des Zustands von ROOMMATE/GUEST Geräten anhand von PRESENCE Geräten&lt;br /&gt;
*Bereistellung von CMD Attributen für mögliche Events rund um den Heim-/Hausstatus&lt;br /&gt;
*Bereistellung von Platzhaltern innerhalb der CMD Attribute, z.B. %MODE%, %SEASON% oder %PREVMODE% für die Werte der Readings mode, season und prevMode&lt;br /&gt;
*Einbindung von Kontakt Sensoren, für z.B. Offen-Warnungen nach bestimmten Zeitraum oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Kontakt Sensor konfiguriert werden&lt;br /&gt;
*Einbindung von Bewegungs Sensoren, für z.B. automatische Licht Schaltungen oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Bewegungs Sensor konfiguriert werden&lt;br /&gt;
*Darstellungen und Auslösen von Sabotage Alarmen der eingebundenen Kontakt- und Bewegungssensoren&lt;br /&gt;
*Einbindung von jeweils einem Temperatur und Luftfeuchtigkeitssensor&lt;br /&gt;
*Einbindung eines lokalen Yahoo Wetter Devices zur Ermittlung und Ausgabe der lokalen Wetterdaten und Erzeugung der Wettervorhersage&lt;br /&gt;
*Einbindung von Power und Energy Sensoren zur Ermittlung der Gesamtmengen&lt;br /&gt;
*Einbindung von Calendar/holiday Devices für spezielle im HOMEMODE Device verfügbar zu machende Events&lt;br /&gt;
*von Uhrzeit abhängiger Anwesend-Modus&lt;br /&gt;
*Bewohner unabhängige Tageszeit-Modus&lt;br /&gt;
*Alarm-Modus&lt;br /&gt;
*DND-Modus&lt;br /&gt;
*Überwachung von Batteriewerten&lt;br /&gt;
&lt;br /&gt;
=HOMEMODE-Gerät=&lt;br /&gt;
==Definition==&lt;br /&gt;
Das HOMEMODE Gerät - hier mit dem Namen &#039;&#039;Home&#039;&#039; versehen - selbst wird über&lt;br /&gt;
 define Home HOMEMODE&lt;br /&gt;
bei Vorhandensein nur eines RESIDENTS Geräts definiert.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung mehrerer RESIDENTS Geräte muss das Master RESIDENTS Gerät beim Definieren mit angegeben werden&lt;br /&gt;
 define Home HOMEMODE rgr_Residents&lt;br /&gt;
Dieses Modul verwendet das globale Attribut &#039;&#039;language&#039;&#039; zur Bestimmung der Anzeigedaten (Standard: EN=english). Für deutsche Ausgabedaten kann das Attribut&lt;br /&gt;
 attr global language DE&lt;br /&gt;
gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Alternativ kann auch nur das HOMEMODE Gerät auf deutsch geändert werden&lt;br /&gt;
 attr Home HomeLanguage DE&lt;br /&gt;
&lt;br /&gt;
==Set-Befehle==&lt;br /&gt;
&#039;&#039;set &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 set Home anyoneElseAtHome &amp;lt;on/off&amp;gt;&lt;br /&gt;
einschalten wenn jemand anderes zu Hause ist der kein registrierter ROOMMATE/GUEST ist, z.B. Hund/Katze oder unregistrierte Gäste&amp;lt;br&amp;gt;&lt;br /&gt;
wenn eingeschaltet, dann wird der Alarm Mode beim Verlassen statt auf armaway nur auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
schaltet man ein und hat schon Haus/Wohnung verlassen, so wird der Alarm Mode von armaway auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AEAH%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd &amp;lt;on/off&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. um Benachrichtigungen zu deaktivieren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DND%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd-for-minutes &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus für die angegebenen Minuten ein&amp;lt;br&amp;gt;&lt;br /&gt;
kehrt danach zum vorherigen (tageszeitabhängigen) Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home deviceDisable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
deaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home deviceEnable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
reaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home location &amp;lt;arrival/home/bed/underway/wayhome&amp;gt;&lt;br /&gt;
manueller Ortswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%LOCATION%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home mode &amp;lt;morning/day/afternoon/evening/night/gotosleep/asleep/absent/gone/home&amp;gt;&lt;br /&gt;
manueller Moduswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm &amp;lt;armaway/armhome/armnight/disarm&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVAMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm-for-minutes &amp;lt;armaway/armhome/armnight/disarm&amp;gt; &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus für die angegebenen Minuten ein&lt;br /&gt;
kehrt danach zum vorherigen Alarm Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home updateHomebridgeMapping&lt;br /&gt;
aktualisiert das Attribut homebridgeMapping des HOMEMODDE Device abhängig von den verfügbaren Informationen&lt;br /&gt;
&lt;br /&gt;
 set Home updateInternalForce&lt;br /&gt;
führt eine Aktualisierung der Internals des HOMEMODE Device aus&amp;lt;br&amp;gt;&lt;br /&gt;
das sollte manuell benutzt werden nachdem das Modul aktualisiert und nur ein reload statt restart gemacht wurde&amp;lt;br&amp;gt;&lt;br /&gt;
auch wenn man überwachte/kontrollierte Geräte ändert sollte man diesen Befehl manuell ausführen, z.B. neue ROOMMATE/GUEST im RESIDENTS Device hinzufügt, oder Geräte in FHEM hinzufügt die dem selben Devspec wie bisher entsprechen (Steckdosen, Sensoren)&lt;br /&gt;
&lt;br /&gt;
==Get-Befehle==&lt;br /&gt;
&#039;&#039;get &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 get Home contactsOpen &amp;lt;all/doorsinside/doorsoutside/doorsmain/outside/windows&amp;gt;&lt;br /&gt;
Liste von all/doorsinside/doorsoutside/doorsmain/outside/windows offenen Kontakten&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%OPEN%&#039;&#039;&#039;, &#039;&#039;&#039;%OPENCT%&#039;&#039;&#039; und &#039;&#039;&#039;%OPENHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home devicesDisabled&lt;br /&gt;
Anzeige der für HOMEMODE deaktivierten Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home mode&lt;br /&gt;
Anzeige von mode&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home modeAlarm&lt;br /&gt;
Anzeige von modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%MODEALARM%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home publicIP&lt;br /&gt;
holen der öffentlichen IP Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%IP%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home sensorsTampered&lt;br /&gt;
Liste aller sabotierten Sensoren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%TAMPERED%&#039;&#039;&#039;, &#039;&#039;&#039;%TAMPEREDCT%&#039;&#039;&#039; und &#039;&#039;&#039;%TAMPEREDHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weather &amp;lt;long/short&amp;gt;&lt;br /&gt;
Wetterinfo im angegebenen Format anzeigen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%WEATHER%&#039;&#039;&#039; und &#039;&#039;&#039;%WEATHERLONG%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weatherForecast [TAG]&lt;br /&gt;
Wettervorhersage für angegebenen Tag&amp;lt;br&amp;gt;&lt;br /&gt;
wenn kein Tag angegeben wird, so wird die Vorhersage für morgen (2) asugegeben&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%FORECAST%&#039;&#039;&#039; (morgen) und &#039;&#039;&#039;%FORECASTTODAY%&#039;&#039;&#039; (heute) sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
==webCmd==&lt;br /&gt;
Die Schaltmöglichkeiten sind absichtlich gering gehalten, denn im normalen Betrieb sollte nicht mehr benötigt werden als die hier gebotenen.&amp;lt;br&amp;gt;&lt;br /&gt;
Es lässt sich der Alarm Mode manuell umschalten und beim Klick auf das devStateIcon wird der DND Mode an- und ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
==Grundkonfiguration==&lt;br /&gt;
&lt;br /&gt;
Diese Grundkonfiguration sollte immer als erstes erfolgen um entsprechend darauf weiter aufzubauen. Als zweiter Schritt ist dann die erweiterte Konfiguration angedacht.&lt;br /&gt;
&lt;br /&gt;
Bei der Namensvergabe der Attribute vom HOMEMODE Device wurde nach einem möglichst kurzem Prefix gesucht und nach vielen Tests wurde sich für das Prefix &amp;quot;Home&amp;quot; entschieden. Das hat den Vorteil dass alle Attribute beisammen stehen und diese auch (durch den Großbuchstaben am Anfang) ziemlich weit oben in der Liste der Attribute stehen. Ebenso wurde bei der Namensvergabe versucht selbsterklärende Namen zu wählen, das hat den Vorteil dass man relativ einfach genau erkennen kann wofür das Attribut steht, allerdings auch den Nachteil dass einige Attributnamen ganz schön lang werden.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedUserAttr====&lt;br /&gt;
Als Erstes wird empfohlen, gerade für Anfänger, das Attribut &amp;quot;HomeAdvancedUserAttr&amp;quot; auf 1 zu setzen. Dadurch werden viel mehr HomeCMD Attribute freigeschaltet. Diese werden im Attribut userattr des HOMEMODE Device hinzugefügt.&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAlarmModes====&lt;br /&gt;
Als nächstes sollte man sich entscheiden ob die Alarm Modus evtl. nicht automatisch zum jeweiligen Modus des HOMEMODE Device geschaltet werden sollen. Standardmäßig werden die Alarm Modus automatisch gesteuert. Ist das nicht erwünscht, so ist der Wert dieses Attributs auf 0 zu setzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;absent&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armaway&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;home&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;disarm&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;asleep&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armnight&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Alarm Modus &amp;quot;armhome&amp;quot; kann nur manuell gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeAutoArrival====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird bei Ankunft jedes ROOMMATE/GUEST die location des jeweiligen ROOMMATE/GUEST für die hier angegeben Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt. Beim ersten nach Hause kommenden ROOMMATE/GUEST wird zusätzlich die location des HOMEMODE Device für die hier eingestellte Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Ablauf der hier eingestellten Minuten wechelt das jeweilige Device von &amp;quot;arrival&amp;quot; auf &amp;quot;home&amp;quot; sofern es noch die location &amp;quot;arrival&amp;quot; hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAsleep====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Schlafengehen (gotosleep) jedes ROOMMATE/GUEST ein Timer gestartet der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;asleep&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAwoken====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Erwachen (&amp;quot;awoken&amp;quot; oder &amp;quot;home nach asleep&amp;quot;) jedes ROOMMATE/GUEST dieser auf &amp;quot;awoken&amp;quot; gesetzt und ein Timer gestartet der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;home&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoDaytime====&lt;br /&gt;
Standardmäßig wird mode anhand der Tageszeit automatisch gesetzt. Ist das nicht gewünscht kann das über den Wert 0 deaktiviert werden. Dann stehen allerdings tageszeitabhängigen mode(s) nicht mehr zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeResidentCmdDelay====&lt;br /&gt;
Normalerweise werden die Events der ROOMMATE/GUEST vor denen des HOMEMODE Device ausgeführt, um das zu ändern wird die Ausführung der ROOMMATE/GUEST HomeCMD Attribute um die hier eingestellte Zeit in Sekunden verzögert.&amp;lt;br&amp;gt;&lt;br /&gt;
Je genauer der Name des jeweiligen HomeCMD Attributs beschrieben wird, desto später wird dieser ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Das heißt z.B. dass HomeCMDmode vor HomeCMDmode-absent und dieser wiederrum vor HomeCMDmode-absent-ROOMMATE/GUEST-NAME ausgeführt wird usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Um das normale Verhalten wiederherzustellen ist der Wert dieses Attributs auf 0 zu setzen. Dann wird HomeCMDmode-absent-ROOMMATE/GUEST-NAME vor HomeCMDmode-absent und vor HomeCMDmode ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis unendlich in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
==Konfiguration Presence Devices (automatische anwesend/abwesend Umschaltung von ROOMMATE/GUEST)==&lt;br /&gt;
Damit die automatische Zuordnung der Presence Devices zu ihren ROOMMATE/GUEST Devices zuverlässig funktioniert, ist es nötig dass der Hauptteil des Namens des ROOMMATE/GUEST innerhalb des Namens des zugehörigen PRESENCE Device(s) vorkommt.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Attribut HomePresenceDeviceType kann man den zu suchenden TYPE von Presence Device vorgeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Per Default werden nur Devices vom TYPE PRESENCE gesucht und versucht den ROOMMATE/GUEST zuzuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls man z.B. auch Devices vom TYPE dummy zur Anwesenheitssteuerung benutzt, kann man diese im Attribut HomePresenceDeviceType mit hinzunehmen. Es sind alles Device TYPEn möglich die ein &amp;quot;presence&amp;quot; Reading mit den Werten &amp;quot;present/appeared&amp;quot; und &amp;quot;absent/disappeared&amp;quot; bereitstellen. Mehrere TYPEn sind möglich da in diesem Attribut ein Regex erwartet wird. z.B.: dummy oder PRESENCE|dummy oder PRESENCE|dummy|ONKYO_AVR.&lt;br /&gt;
&lt;br /&gt;
===Beispiel===&lt;br /&gt;
Der Device Name meines ROOMMATE ist &amp;quot;rr_Dan&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf der Suche nach dem zugehörigen Presence Device wird der erste Teil (rr_ oder rg_) weggeschnitten und der Rest in Kleinbuchstaben umgewandelt.&amp;lt;br&amp;gt;&lt;br /&gt;
Mit dem was übrig bleibt, bei mir also nur dan, werden die möglichen Presence Devices versucht zu erkennen.&amp;lt;br&amp;gt;&lt;br /&gt;
Mein zugehöriges Presence Device heißt, historisch gewachsen, PRESENCE_rr_Dan und würde somit problemlos zugeordnet werden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen der zugehörigen Presence Devives könnten in ihrer kürzesten Form auch wie folgt sein um meinen ROOMMATE/GUEST Device zugeordnet zu werden:&amp;lt;br&amp;gt;&lt;br /&gt;
 pdan&lt;br /&gt;
 danp&lt;br /&gt;
 ZDan&lt;br /&gt;
 DANZ&lt;br /&gt;
 wenndannsonst&lt;br /&gt;
Aber Achtung, es funktioniert nicht mehr wenn die Namen nicht eindeutig sind. Wenn es z.B. eine rr_Dana geben würde mit Presence Device Name &amp;quot;pdani&amp;quot;, dann würde dieser Name auch bei mir (dan) passen. Das könnte man aber auch bewußt nutzen um mit einem Presence Device 2 ROOMMATE/GUEST Devices gleichzeitig zu steuern.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn die Namen wirklich absolut eindeutig sind, dann könnte man den Regex im Attribut HomePresenceDeviceType sogar auf &amp;quot;.*&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Werden pro ROOMMATE/GUEST mehrere Presence Devices gefunden und zugeordnet, so wird automatisch dass Attribut HomePresenceDeviceAbsentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt; auf die Anzahl der gefundenen Presence Devices gesetzt, so dass der/die jeweilige ROOMMATE/GUEST immer erst als abwesend gewertet wird sobald alle zugehörigen Presence Devices abwesend sind. Analog dazu gibt es noch das Attribut HomePresenceDevicePresentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresence====&lt;br /&gt;
Ist dieses Attribut auf 1 gesetzt, so werden die ROOMMATE/GUEST Devices automatisch zum Status ihrer zugehörigen PRESENCE Devices geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device present - ROOMMATE/GUEST home&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device absent - ROOMMATE/GUEST absent&amp;lt;br&amp;gt;&lt;br /&gt;
Falls es sich bei den von Euch benutzen PRESENCE Devices nicht um Devices vom TYPE PRESENCE handeln sollte, sondern z.B. um PRESENCE und dummy, so kann dieses im Attribut HomePresenceDeviceType als Regex konfiguriert werden! z.B.: PRESENCE|dummy&amp;lt;br&amp;gt;&lt;br /&gt;
Damit ein Device als Presence Device erkannt werden kann, muss dieses über ein presence Reading verfügen.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceType====&lt;br /&gt;
Regex des TYPEs/der TYPEn von Presence Devices&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Regex der Device TYPEn&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: PRESENCE&lt;br /&gt;
&lt;br /&gt;
==Erweiterte Konfiguration==&lt;br /&gt;
Um das HOMEMODE Device vollumfänglich zu benutzen ist es sinnvoll weitere Devices (zur Überwachung) hinzuzufügen.&lt;br /&gt;
&lt;br /&gt;
Die bereits möglichen hinzuzufügenden Devices werden hier folgend nach Attributnamen erklärt.&lt;br /&gt;
&lt;br /&gt;
===Attribute zum Hinzufügen weiterer Geräte===&lt;br /&gt;
&lt;br /&gt;
====HomeEventsCalendarDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeEventsHolidayDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorAirpressure====&lt;br /&gt;
Luftdrucksensor aussen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorHumidityOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussensensors für Luftfeuchtigkeit anzugeben. Dieser muss ein Reading humidity besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für (Aussen)Luftfeuchtigkeit und Aussentemperatur ein und der selbe ist, so muss dieser nur einmalig im Attribut HomeSensorTemperatureOutside hinterlegt werden. Dieser muss dann die beiden Readings humidity und temperature haben. Im Bedarfsfall können diese Readings auch vorher entsprechend durch eigene userReadings erstellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%HUMIDITY%&#039;&#039;&#039; für den Wert des Readings humidity zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorTemperatureOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussentemperatursensors anzugeben. Dieser muss mindestens ein Reading temperature besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für Aussentemperatur auch ein Reading humidity besitzen sollte und dieses auch der Sensor für die Aussenlufteuchtigkeit ist, so muss dieser nur einmalig hier in diesem Attribut hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%TEMPERATURE%&#039;&#039;&#039; für den Wert des Readings temperature zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading temperature und optional humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContact====&lt;br /&gt;
Hier können alle Kontakt Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDcontact Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das optische und magnetische Kontaktsensoren vom HomeMatic. HM-SEC-SCo und HM-SEC-SC-2.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;model=HM-SEC-SC(o|-2)&#039;&#039;&#039; eingetragen um alle diese Kontaktsensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Kontaktsensoren mit ihren Namen im Internal SENSORSCONTACT des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Kontaktsensor folgende Attribute im Attribut userattr hinzugefügt:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====HomeContactType=====&lt;br /&gt;
Typ des Kontakts - wird versucht anhand des Namen/Alias beim Hinzufügen zum HOMEMODE Device zu ermitteln, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: doorinside,dooroutside,doormain,window&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: window&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Kontaktsensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModes=====&lt;br /&gt;
Regex der Mode(s) des HOMEMODE Device in denen keine Offen Warnungen erfolgen sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist ein Kontakt geöffnet während die hier eingestellten Mode(s) eintreten, so wird der noch bestehende Timer abgebrochen. Entgegengesetzt startet er wieder sobal die hier eingestellten Mode(s) verlassen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist hier z.B. &amp;quot;gotosleep|asleep&amp;quot; eingestellt, so kann man z.B. das Fenster schon vor dem Auslösen von gotosleep oder asleep öffnen und der bestehende Offenwarnung-Timer wird dann abgebrochen. Sobald man am Morgen z.B. awoken oder home auslöst, so wird ein neuer Timer gestartet der einen dann an das noch offene Fenster erinnert.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle Modes des HOMEMODE Device&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModesResidents=====&lt;br /&gt;
Devspec der ROOMMATE/GUEST Devices deren Status statt der Modes des HOMEMODE Device für Attribut HomeOpenDontTriggerModes benutzt werden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle überwachten ROOMMATE/GUEST&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenMaxTrigger=====&lt;br /&gt;
Maximale Anzahl an Warnmeldungen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ganze Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimes=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimesDividers=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactOpenTimeDividers des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2 1 2 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsContactReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactReadings====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeDividers====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeOpenTimesDividers in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 2 1 2 2.5 (für 4 Jahreszeiten)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeMin====&lt;br /&gt;
Minimale Zeit in Minuten die mindestens für eine Offenwarnung gewartet werden soll - im Falle dass sich durch den Teiler evtl. zu kleine Werte ergeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: eine Zahle mit max. einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimes====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 7.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminance====&lt;br /&gt;
Devspec von (Innen-)Lichtsensoren deren Durchschnittswert berechnet werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotion====&lt;br /&gt;
Hier können alle Bewegungs Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDmotion Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Motion Sensor Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0801-1001|010f-0800-1001&#039;&#039;&#039; eingetragen um alle diese Bewegungssensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Damit bei den Gen5 Sensoren auch das open im reading state steht, habe ich mir bei diesen Sensoren ein userReading angelegt.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Bewegungssensoren mit ihren Namen im Internal SENSORSMOTION des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Bewegungssensor folgende Attribute im Attribut userattr hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Bewegungssensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsMotionReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeSensorLocation=====&lt;br /&gt;
Standort des Bewegungssensors (außen oder innen) - wird standardmäßig beim Hinzufügen zum HOMEMODE Device auf &amp;quot;inside&amp;quot; gesetzt, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: inside,outside&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: inside&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsMotionValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionReadings====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergy====&lt;br /&gt;
Hier können alle Energie Sensoren als Devspec hinterlegt werden. Diese müssen die beiden Readings power und energy besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Anhand dieser Readings wird dann der Gesamtverbrauch und die derzeitige gesamte Leistungsaufnahme berechnet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Wall Plugs Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0600-1000|010f-0602-1001&#039;&#039;&#039; eingetragen um alle diese Energie Sensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec mit vorhandenen energy und power Readings&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmoke====&lt;br /&gt;
Devspec mit Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorWindspeed====&lt;br /&gt;
Sensor für Windgeschwindigkeit&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors und Reading der Windgeschwindigkeit separiert mit : (z.B. ga_Windsensor:wind)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBattery====&lt;br /&gt;
Devspec von Batteriesensoren mit einem Reading &amp;quot;battery&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerAnyoneElseAtHome====&lt;br /&gt;
auslösendes Gerät für anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn:valueOff&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerPanic====&lt;br /&gt;
auslösendes Gerät für Panikalarm&amp;lt;br&amp;gt;&lt;br /&gt;
valueOff ist optional, wird es weggelassen, so fungiert valueOn als toggle&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn[:valueOff]&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTwilightDevice====&lt;br /&gt;
Hier ist der Name des lokalen Twilight Device anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich die Platzhalter &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039;, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; in den HomeCMD Attributen zur Verfügung. &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039; wird dann durch das Reading light, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; durch das Reading twilight und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; durch das aktuelle Twilight Event ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeUWZ====&lt;br /&gt;
Hier ist der Name des lokalen UWZ Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%UWZ%&#039;&#039;&#039;, &#039;&#039;&#039;%UWZSHORT%&#039;&#039;&#039; und &#039;&#039;&#039;%UWZLONG%&#039;&#039;&#039; sind verfügbar in allen HomeCMD Attributen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des UWZ Geräts&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeYahooWeatherDevice====&lt;br /&gt;
Hier ist der Name des lokalen Yahoo Weather Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich einige Platzhalter zur Verfügung. Für die genaue Beschreibung derer siehe &amp;quot;Platzhalter&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
===HomeText Attribute===&lt;br /&gt;
Die HomeText Attribute sind größtenteils zur Übersetzung einiger benötigter Begriffe gedacht.&amp;lt;br&amp;gt;&lt;br /&gt;
In den speziellen Attributen die mit HomeTextWeather anfangen, sind ganze Texte mit entsprechenden Platzhaltern einzufügen.&lt;br /&gt;
&lt;br /&gt;
====HomeTextAndAreIs====&lt;br /&gt;
Übersetzung für &amp;quot;and&amp;quot;, &amp;quot;are&amp;quot; und &amp;quot;is&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort/Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: and|are|is&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 und|sind|ist&lt;br /&gt;
&lt;br /&gt;
====HomeTextClosedOpen====&lt;br /&gt;
Übersetzung für &amp;quot;closed&amp;quot; und &amp;quot;open&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: closed|open&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 geschlossen|geöffnet&lt;br /&gt;
&lt;br /&gt;
====HomeTextNosmokeSmoke====&lt;br /&gt;
Übersetzung für &amp;quot;no smoke&amp;quot; und &amp;quot;smoke&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: no smoke|smoke&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 kein Rauch|Rauch&lt;br /&gt;
&lt;br /&gt;
====HomeTextRisingConstantFalling====&lt;br /&gt;
Übersetzung für &amp;quot;rising&amp;quot;, &amp;quot;constant&amp;quot; und &amp;quot;falling&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: rising|constant|falling&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 steigend|gleichbleibend|fallend&lt;br /&gt;
&lt;br /&gt;
====HomeTextTodayTomorrowAfterTomorrow====&lt;br /&gt;
Übersetzung für &amp;quot;today&amp;quot;, &amp;quot;tomorrow&amp;quot; und &amp;quot;day after tomorrow&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: today|tomorrow|day after tomorrow&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Heute|Morgen|Übermorgen&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherNoForecast====&lt;br /&gt;
Übersetzung für &amp;quot;No forecast available&amp;quot; - Text wenn keine Wettervorhersage verfügbar ist&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: No forecast available&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es ist leider keine Wettervorhersage für den angegebenen Tag verfügbar!&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastInSpecDays====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage in 4-10 Tagen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 In %DAY% Tagen %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastToday====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für heute&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C. Aktuelle Temperatur %TEMPERATURE%°C bei einer Luftfeuchtigkeit von %HUMIDITY%%. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastTomorrow====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für morgen/übermorgen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherLong====&lt;br /&gt;
Langer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es %TOBE% %CONDITION% bei %TEMPERATURE%°C und %HUMIDITY%% Luftfeuchtigkeit. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h. Der Luftdruck ist %PRESSURETREND% bei %PRESSURE%hPa.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherShort====&lt;br /&gt;
Kurzer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %CONDITION%, %TEMPERATURE%°C, %HUMIDITY%% Luftfeuchtigkeit, Luftdruck %PRESSURE%hPa&lt;br /&gt;
&lt;br /&gt;
===weitere Attribute===&lt;br /&gt;
Viele weitere Dinge lassen sich anpassen.&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedDetails====&lt;br /&gt;
mehr Details anzeigen, abhängig von den zu HOMEMODE hinzugefügten Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: none, detail, both, room&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Auswahlliste&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: none&lt;br /&gt;
&lt;br /&gt;
====HomeDaytimes====&lt;br /&gt;
Eigene Tageszeiten als Paare aus Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Zeit|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 00:00|Mitternacht&lt;br /&gt;
 00:05|Nacht&lt;br /&gt;
 06:30|Morgen&lt;br /&gt;
 10:00|Vormittag&lt;br /&gt;
 13:00|Mittag&lt;br /&gt;
 14:30|Nachmittag&lt;br /&gt;
 17:30|Vorabend&lt;br /&gt;
 19:00|Abend&lt;br /&gt;
 23:00|Spätabend&lt;br /&gt;
&lt;br /&gt;
====HomeIcewarningOnOffTemps====&lt;br /&gt;
2 leerzeichenseparierte Temperaturen für das Ein- und Ausschalten der Eiswarnung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei leerzeichenseparierte Temperaturen mit maximal einer Kommastelle&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 2 3&lt;br /&gt;
&lt;br /&gt;
====HomeModeAlarmArmDelay====&lt;br /&gt;
Zeit in Sekunden um das aktivieren der Alarmschaltung zu verzögern.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl (gleiche Verzögerung für alle modeAlarm) oder 3 leerzeichenseparierte Zahlen für jeden modeAlarm (Reihenfolge: armaway armnight armhome)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAtTmpRoom====&lt;br /&gt;
Diesen Raum zu temporäre at(s) hinzufügen die von HOMEMODE generiert werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceAbsentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;absent&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: maximale Anzahl von verfügbaren Presence Geräten für jeden ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDevicePresentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;present&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomePublicIpCheckInterval====&lt;br /&gt;
Interval in Minuten für die Überprüfung der öffentlichen IP-Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0 (deaktiviert)&lt;br /&gt;
&lt;br /&gt;
====HomeSeasons====&lt;br /&gt;
Eigene Jahreszeiten als Paare aus Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Datum|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 03.01|spring 06.01|summer 09.01|autumn 12.01|winter&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 03.01|Frühling&lt;br /&gt;
 06.01|Sommer&lt;br /&gt;
 09.01|Herbst&lt;br /&gt;
 12.01|Winter&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryLowPercentage====&lt;br /&gt;
Prozentsatz um einen Batteriesensor mit geringer Batterie anzuzeigen (nur bei Sensoren die ihren Batteriewert prozentual angeben)&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 50&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryReading====&lt;br /&gt;
Reading der Batteriesensoren welches statt &amp;quot;battery&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: battery&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminanceReading====&lt;br /&gt;
Reading der Lichtsensoren welches statt &amp;quot;luminance&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: luminance&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergyReadings====&lt;br /&gt;
Readings der Power/Energy Sensoren welche statt &amp;quot;power&amp;quot; und &amp;quot;energy&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: 2 leerzeichenseparierte Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: power energy&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeReading====&lt;br /&gt;
Readings der Rauchmelder welche statt &amp;quot;state&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ein Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeValue====&lt;br /&gt;
Regex der Auslösewerte von Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: RegEx&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: on&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialLocation====&lt;br /&gt;
Hier können eigene zusätzliche location(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; location &amp;lt;LOCATION&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialModes====&lt;br /&gt;
Hier können eigene zusätzliche mode(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; mode &amp;lt;MODE&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTrendCalcAge====&lt;br /&gt;
Zeit in Sekunden für das Maximalalter des vorherigen Wertes für die Trendberechnung&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 900&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Teil der Konfiguration ist das Befüllen der HomeCMD Attribute. Da dieses durch die Vermischung von FHEM Code, Perl Code und zusätzlichen Platzhaltern erst einmal sehr befremdlich sein kann, habe ich bei der Beschreibung der HomeCMD Attribute teilweise Beispiele hinzugefügt um den Einstieg weiter zu erleichtern.&lt;br /&gt;
&lt;br /&gt;
==HomeCMD Attribute (mit Beispielen)==&lt;br /&gt;
Die HomeCMD Attribute sind zum Festlegen der jeweiligen Schaltaktionen gedacht und können damit evtl. vorhandene notify/DOIF ablösen. Sie können mit FHEM-Code, Perl-Code oder aber auch mit beidem vermischt befüllt werden (wovon ich allerdings abrate). Zusätzlich sind noch diverse Platzhalter (siehe Platzhalter) verfügbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Perl-Code innerhalb der HomeCMD Attribute gibt es hier Besonderheiten.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
*Im Gegensatz zur FHEM-Eingabezeile müssen hier keine Semikolon verdoppelt werden&lt;br /&gt;
*Kommetarzeilen sind zulässig&lt;br /&gt;
*Kommentare am Ende einer Perl-Zeile sind nicht zulässig&lt;br /&gt;
&lt;br /&gt;
Typischer Weise werden in den HomeCMD Attributen weitere Module angesprochen.&amp;lt;br&amp;gt;&lt;br /&gt;
Z.B. benutze ich für jegliche Form der Benachrichtigung den msg Befehl.&lt;br /&gt;
&lt;br /&gt;
Keines der HomeCMD Attribute hat einen Standardwert. Es müssen alle Befehle selbst programmiert werden.&lt;br /&gt;
&lt;br /&gt;
Platzhalter die Text(e) (string) beinhalten, müssen im Perl-Code in Anführungszeichen gesetzt werden (Beispiel %SENSOR%).&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter die Zahlen beinhalten (int,float) sollten nicht in Anführungszeichen gesetzt werden damit Zahlenvergleiche (mittels ==, &amp;lt;=, &amp;gt;=, &amp;gt;, &amp;lt;) funktionieren (Beispiel %LIGHT%, %ICE% oder %TEMPERATURE%).&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-off====&lt;br /&gt;
Befehle die beim Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Rauchalarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-on====&lt;br /&gt;
Befehle die bei einem Rauchalarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;meldet&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;melden&amp;quot; if (%SMOKECT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %SMOKEHR% $is Rauchalarm!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Sabotage Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-off====&lt;br /&gt;
Befehle die beim Ende eines Sabotage Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Manipulationen wurden beseitigt!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-on====&lt;br /&gt;
Befehle die bei einem Sabotage Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%TAMPEREDCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %TAMPEREDHR% $is sabotiert!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-off====&lt;br /&gt;
Befehle die beim Ende eines Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg ENTWARNUNG: Alle Alarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-on====&lt;br /&gt;
Befehle die bei einem Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%ALARMCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg audio,push,light 3 !!! ALARM !!! %ALARMHR% $is ausgelöst!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome====&lt;br /&gt;
Befehle die beim on/off von anyoneElseAtHome ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-off====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armaway&amp;quot; auf &amp;quot;armhome&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome on&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun niemand anderes mehr zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-on====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armhome&amp;quot; auf &amp;quot;armaway&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder wieder Alarme melden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird anyoneElseAtHome bei Anwesenheit und nicht deaktiviertem HomeAutoAlarmModes aktiviert, so passiert erst einmal nichts, ausser dass die hier angegebenen Befehle ausgeführt werden. Wird dann später die Abwesenheit erkannt, schaltet der Alarm Mode auf &amp;quot;armhome&amp;quot; statt auf &amp;quot;armaway&amp;quot; damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome off&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun noch jemand anderes zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDbatteryLow====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Sensor einen niedrigen Batteriewert meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg;&lt;br /&gt;
   $msg = &amp;quot;Die Batterien von %BATTERYLOW% gehen zur Neige und sollten ausgetauscht werden!&amp;quot; if (%BATTERYLOWCT% == 1);&lt;br /&gt;
   $msg = &amp;quot;Die Batterien bei folgenden Geräten sollten ausgetauscht werden: %BATTERYLOWALL%&amp;quot; if (%BATTERYLOWCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push $msg&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontact====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor geschlossen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geschlossen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor offen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun offen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormain====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor Type doormain open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain wird geschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 { &lt;br /&gt;
   # Wenn es Ankommende gibt&lt;br /&gt;
   if (&amp;quot;%ARRIVERS%&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Zusammenstellen der Begrüßung&lt;br /&gt;
     my $msg = &amp;quot;Gute&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # &amp;quot;n&amp;quot; anhängen wenn Tageszeit nicht Nacht ist&lt;br /&gt;
     $msg .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Leerzeichen einfügen&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # den Feiertag der Tageszeit voranstellen wenn ein Feiertag im Kalender FEIERTAG ist&lt;br /&gt;
     $msg .= &amp;quot;%FEIERTAG%-&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Tageszeit einfügen&lt;br /&gt;
     $msg .= &amp;quot;%DAYTIME% &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # bei ROOMMATE &amp;quot;zu Hause&amp;quot; in Begrüßung einfügen&lt;br /&gt;
     $msg .= &amp;quot;zu Hause &amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; =~ /^rr_/);&lt;br /&gt;
 &lt;br /&gt;
     # Ankommende einfügen&lt;br /&gt;
     $msg .= &amp;quot;%ARRIVERS%&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Begrüßung am Sonos im Flur ausgeben bei Abwesenheit über 60 min&lt;br /&gt;
     fhem &amp;quot;msg audio \@fl_Sonos $msg!&amp;quot; if (%DURABSENCELAST% &amp;gt; 60);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain geöffnet&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geöffnet!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning1====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die erste Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: erste Offenwarnzeit des Kontakts erreicht&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning2====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die zweite Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: ab Erreichen der zweiten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht immer noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarningLast====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die letzte Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Erreichen der letzten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das ist der letzte Hinweis %ALIAS% endlich zu schliessen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald sich die Tageszeit (daytime) auf einen beliebigen Wert ändert.&amp;lt;br&amp;gt;&lt;br /&gt;
Um die jeweilige eingetretene Tageszeit zu ermitteln ist der Platzhalter &#039;&#039;&#039;%DAYTIME%&#039;&#039;&#039; vorgesehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime)&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime-&amp;amp;lt;DAYTIME&amp;amp;gt;====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald die jeweilige Tageszeit (daytime) erreicht ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime) auf bestimmten Wert&amp;lt;br&amp;gt;&lt;br /&gt;
Bei &amp;quot;night&amp;quot; könnte man z.B. die Heizung bewohnerunabhängig ausschalten, bei &amp;quot;morning&amp;quot; wieder ein.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceDisable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceDisable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun deaktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional wirklich attr disable für Device setzen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;attr %DEVICE%:FILTER=disable!=1 disable 1; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf gone/none setzen wenn Presence Devices deaktiviert werden&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     my $resident = $1;&lt;br /&gt;
     my $gone = $resident =~ /^rr_/ ? &amp;quot;gone&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set $resident:FILTER=state!=$gone state $gone&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceEnable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceEnable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun aktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional attr disable für Device entfernen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;deleteattr %DEVICE%:FILTER=disable=1 disable; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf home setzen wenn Presence Devices aktiviert werden und anwesend sind&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $1:FILTER=state!=home state home&amp;quot; if (ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;present&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd====&lt;br /&gt;
Befehle die beim Anfang/Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%DND%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun eingeschaltet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun beendet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-off====&lt;br /&gt;
Befehle die beim Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-on====&lt;br /&gt;
Befehle die beim Beginn des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun eingeschaltet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent====&lt;br /&gt;
Befehle die beim Beginn eines beliebigen (holiday)Kalender Events ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten on&amp;quot; if (&amp;quot;%EVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-each====&lt;br /&gt;
Befehle die beim Beginn/Ende eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-URLAUBDAN-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Dan hat jetzt Urlaub!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Der Urlaub von Dan ist nun zu Ende!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-WOHNUNG-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Heizung an/aus schalten&lt;br /&gt;
   my $heiz = &amp;quot;([bksw]z|ku)_Thermostat&amp;quot;;&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /^heizung(..+)?$/i)&lt;br /&gt;
   {&lt;br /&gt;
     my $zeit = $1;&lt;br /&gt;
     if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
 &lt;br /&gt;
       # morgens nicht alle Thermostaten schalten&lt;br /&gt;
       $heiz = &amp;quot;([bks]z|ku)_Thermostat&amp;quot; if ($zeit &amp;amp;&amp;amp; $zeit =~ /morgens?$/i);&lt;br /&gt;
       fhem &amp;quot;set $heiz:FILTER=controlMode!=day controlMode day&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^heizung/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $heiz:FILTER=controlMode!=night controlMode night&amp;quot; if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # WLAN an/aus schalten&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi off&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi on&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Putzfrau (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Gast (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-begin====&lt;br /&gt;
Befehle die beim Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-Neujahr-begin&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set %SENSORSENERGY% meterReset&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-end====&lt;br /&gt;
Befehle die bei Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemDEFINED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn ein neues Gerät angelegt wird (define)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Jedem neu definierten Gerät den Geräte-TYPE auch als Raum im Menüpunkt Module zuweisen&lt;br /&gt;
   fhem &amp;quot;attr %DEFINED% room Module-&amp;gt;&amp;quot;.$defs{&amp;quot;%DEFINED%&amp;quot;}-&amp;gt;{TYPE};&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemINITIALIZED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn FHEM gestartet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg FHEM Home wurde gestartet...&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemSAVE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn in FHEM die Konfigurationsdatei gespeichert wird&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel (Backup von fhem.cfg und fhem.state):&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Datum/Uhrzeit&lt;br /&gt;
   my $now = Timeow();&lt;br /&gt;
   # Leerzeichen durch Unterstriche ersetzen&lt;br /&gt;
   $now =~ s/ /_/g;&lt;br /&gt;
   # Backup der Datei fhem.cfg&lt;br /&gt;
   `cp $attr{global}{configfile} ./backup/fhem.cfg.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.cfg.$now&amp;quot;;&lt;br /&gt;
   # Backup der Datei fhem.state&lt;br /&gt;
   `cp $attr{global}{statefile} ./backup/fhem.state.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.state.$now&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemUPDATE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn das Update von FHEM ausgeführt wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das Update für FHEM ist beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning====&lt;br /&gt;
Befehle die bei Anfang/Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0/1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%ICE%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg push ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!.&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-off====&lt;br /&gt;
Befehle die bei Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-on====&lt;br /&gt;
Befehle die bei Beginn der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation====&lt;br /&gt;
Befehle die beim Ändern der location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation-&amp;amp;lt;LOCATION&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf eine bestimmte location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmte location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode====&lt;br /&gt;
Befehle die beim Ändern von mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-absent-belated====&lt;br /&gt;
Befehle die nachträglich zur Abwesenheit ausgeführt werden sollen, die Zeit kann im Atteribut &amp;quot;HomeModeAbsentBelatedTime&amp;quot; eingestellt werden&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Abwesenheit + XX min&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten mode&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-absent&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set HarmonyHub:FILTER=activity!=PowerOff activity PowerOff;&lt;br /&gt;
 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 set TYPE=SONOSPLAYER:FILTER=Volume&amp;gt;0 Volume 0;&lt;br /&gt;
 set Sonos stopAll;&lt;br /&gt;
 sleep 3;&lt;br /&gt;
 set Wohnung [FILTER=state!=off] off&amp;quot;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 define atTmp_wz_Media_aus_%SELF% at +01:00:00 set HarmonyHub:FILTER=currentActivity!=PowerOff activity PowerOff;&lt;br /&gt;
 define atTmp_wz_Venti_aus_%SELF% at +01:00:00 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 define atTmp_wzLS_aus_%SELF% at +00:30:00 set wz_LS scene aus;&lt;br /&gt;
 define atTmp_all_Sonos_vol_down_%SELF% at +00:02:00 set TYPE=SONOSPLAYER:FILTER=Volume!=0 Volume 0 1;&lt;br /&gt;
 define atTmp_all_Sonos_off_%SELF% at +00:02:30 set Sonos stopAll;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=off off;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=on on&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-gone&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlManu off&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen beliebigen Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von beliebigem Resident ausgelöst&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 msg audio @%AUDIO% Guten Nacht und schlaf&#039; gut %ALIAS%!&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg = &amp;quot;Guten&amp;quot;;&lt;br /&gt;
   $msg .= &amp;quot; %FEIERTAG%&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
   $msg .= &amp;quot; Morgen %ALIAS%&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;msg audio \@%AUDIO% $msg&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;defmod atTmp_wetter_%RESIDENT%_%SELF% at +00:07:00 msg audio Wettervorhersage für heute: %FORECASTTODAY%&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen bestimmten Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von bestimmten Resident ausgelöst&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm====&lt;br /&gt;
Befehle die beim Ändern von modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung modeAlarm&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm-&amp;amp;lt;armaway/armhome/armnight/disarm&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armaway&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%PREVAMODE%&amp;quot; eq &amp;quot;disarm&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Alarmanlage einschalten&lt;br /&gt;
     fhem &amp;quot;set AA_Arm:FILTER=level!=100 alarmLevel armAll&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht zusammensetzen&lt;br /&gt;
     my $msg;&lt;br /&gt;
     $msg .= &amp;quot;Die Alarmanlage ist nun scharf geschaltet!&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
     my $is = &amp;quot;%ALARMHR%&amp;quot; =~ /und/ ? &amp;quot;sind&amp;quot; : &amp;quot;ist&amp;quot;;&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot; if ($msg);&lt;br /&gt;
     $msg .= &amp;quot;ACHTUNG: %ALARMHR% $is noch offen!!!&amp;quot; if (%ALARMCT%);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an ROOMMATE/GUEST senden&lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 &lt;br /&gt;
     # Eingangstür abschließen falls noch nicht geschehen&lt;br /&gt;
     fhem &amp;quot;set fl_Tuerschloss:FILTER=state!=locked lock&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armhome&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armnight&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-disarm&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Alarmanlage ausschalten&lt;br /&gt;
   fhem &amp;quot;set AA_Arm:FILTER=level!=0 alarmLevel disarmed&amp;quot;;&lt;br /&gt;
   my $prio = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # Nachrichtenpriorität auf 1 setzen bei Ankunft (höhere Lautstärke beim Abspielen damit man das auch vor der Tür hört)&lt;br /&gt;
   $prio = &amp;quot; 1&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; eq &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht an ROOMMATE/GUEST senden wenn der vorherige alarmMode nicht &amp;quot;armnight&amp;quot; ist&lt;br /&gt;
   fhem &amp;quot;msg audio \@fl_Sonos$prio Die Alarmanlage ist nun ausgeschaltet %ALIAS%!&amp;quot; if (&amp;quot;%PREVAMODE%&amp;quot; ne &amp;quot;armnight&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion====&lt;br /&gt;
Befehle die bei Statusänderung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: öffnen/schließen eines beliebigen Bewegungsmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Raum aus Sensornamen ermitteln, z.B. bz_Sensor&lt;br /&gt;
   my $room = (split /_/,&amp;quot;%SENSOR%&amp;quot;)[0];&lt;br /&gt;
 &lt;br /&gt;
   # Status des structure aller Lichter dieses Raums&lt;br /&gt;
   my $lichter = Value($room.&amp;quot;_Lichter&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Status des dummy Tageslicht&lt;br /&gt;
   my $tl = Value(&amp;quot;Tageslicht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   if (&amp;quot;%STATE%&amp;quot; eq &amp;quot;geöffnet&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Lichtwert des Sensors&lt;br /&gt;
     my $lum = ReadingsNum(&amp;quot;%SENSOR%&amp;quot;,&amp;quot;luminance&amp;quot;,100);&lt;br /&gt;
 &lt;br /&gt;
     # Löschen des evtl. schon vorhandenen &amp;quot;at&amp;quot;&lt;br /&gt;
     fhem &amp;quot;delete atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot; if (IsDevice(&amp;quot;atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
     # Licht nur wenn kein Tageslicht oder Lichtwert des Sensors kleiner als 10 und AutoLight eingeschaltet und modeAlarm nicht armaway&lt;br /&gt;
     if (($tl eq &amp;quot;off&amp;quot; || $lum &amp;lt; 10) &amp;amp;&amp;amp; $lichter eq &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot; &amp;amp;&amp;amp; &amp;quot;%AMODE%&amp;quot; ne &amp;quot;armaway&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $scene;&lt;br /&gt;
 &lt;br /&gt;
       # verschiedene Szenen für verschiedene Modus bzw. Aussenlichtstärken&lt;br /&gt;
       if (&amp;quot;%MODE%&amp;quot; eq &amp;quot;gotosleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Abend&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (&amp;quot;%MODE%&amp;quot; eq &amp;quot;asleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Nacht&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;gt; 3)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;viel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;lt; 4)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;mittel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       # Schalten der entsprechenden Szene (Modul LightScene)&lt;br /&gt;
       fhem &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene $scene&amp;quot; if ($scene);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     # unterschiedliche Ausschaltzeiten für unterschiedliche Räume&lt;br /&gt;
     my $t = 3;&lt;br /&gt;
     $t = 15 if ($room eq &amp;quot;wz&amp;quot;);&lt;br /&gt;
     $t = 2 if ($room eq &amp;quot;bz&amp;quot; || ($room =~ /wz|ku/ &amp;amp;&amp;amp; &amp;quot;%MODE%&amp;quot; =~ /sleep/));&lt;br /&gt;
     $t = 1 if ($room eq &amp;quot;fl&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Zahl in Minuten umrechnen in einen Zeitpunkt für das &amp;quot;at&amp;quot;&lt;br /&gt;
     my $d = HOMEMODE_hourMaker($t);&lt;br /&gt;
 &lt;br /&gt;
     # Anlegen des &amp;quot;at&amp;quot; zum Ausschalten des Lichts wenn die Lichter angeschaltet sind und auch AutoLight eingeschaltet ist&lt;br /&gt;
     if ($lichter ne &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $cmd = &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene aus&amp;quot;;&lt;br /&gt;
       fhem &amp;quot;defmod atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF% at +$d $cmd&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-off====&lt;br /&gt;
Befehle die bei Ende der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-on====&lt;br /&gt;
Befehle die bei Beginn der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set w_Steckdosen [FILTER=state!=on] on;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode auto&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-device====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein beliebiges Presence Device, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebiges Presence Device&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present-device&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # mindestens 1x täglich den Batteriewert des PRESENCE Geräts bei erkannter Anwesenheit holen&lt;br /&gt;
   fhem &#039;&amp;quot;sudo /opt/fhem/scripts/GTag-bat.sh %DEVICE% %ADDRESS% &amp;amp;&amp;quot;&#039;&lt;br /&gt;
     if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE_/ &amp;amp;&amp;amp; (!defined ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,undef) || ReadingsAge(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,0) &amp;gt; 64800));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen beliebigen Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebigen Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-absent-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Mich benachrichtigen wenn ich nicht zu hause bin und jemand anderes die Wohnung verlässt&lt;br /&gt;
   fhem &amp;quot;msg push \@rr_Dan %ALIAS% hat gerade die Wohnung verlassen!&amp;quot;&lt;br /&gt;
     if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot; &amp;amp;&amp;amp; ReadingsVal(&amp;quot;rr_Dan&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) ne &amp;quot;present&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Verabschiedungsnachricht zusammensetzen&lt;br /&gt;
   my $msg;&lt;br /&gt;
 &lt;br /&gt;
   # Alle außer mich selbst verabschieden&lt;br /&gt;
   $msg .= &amp;quot;Bis bald und auf Wiedersehen %ALIAS%...&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Glättewarnung wenn nötig&lt;br /&gt;
   $msg .= &amp;quot; ACHTUNG!!! Es ist %TEMPERATURE%°C kalt! Somit könnte es glatt werden!&amp;quot; if (%ICE%);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht senden wenn vorhanden&lt;br /&gt;
   fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispielcode für &amp;quot;HomeCMDpresence-present-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # alle Ankommenden außer mir selbst&lt;br /&gt;
   if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Benachrichtigung wenn jemand kommt&lt;br /&gt;
     fhem &amp;quot;msg audio %ALIAS% kommt gerade!&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; ne &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) zusammensetzen&lt;br /&gt;
     my $g = &amp;quot;gute&amp;quot;;&lt;br /&gt;
     $g .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) senden &lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% Willkommen und $g %DAYTIME% %ALIAS%!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmten Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;-&amp;amp;lt;DEVICE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein bestimmtes Presence Device eines bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Dieses Attribut ist nur verfügbar wenn ein Resident mehr als ein Presence Device hat&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmtes Presence Device eines bestimmten Resident&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Jahreszeit&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $t = &amp;quot;%SEASON%&amp;quot;;&lt;br /&gt;
   $t .= &amp;quot;s&amp;quot; if ($t eq &amp;quot;Frühling&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;msg push Die Wohnung ist nun im $t-Modus!&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set Heizungen [FILTER=controlMode!=auto] controlMode auto&amp;quot; if ($t ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason-&amp;amp;lt;SEASON&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit in eine bestimmte Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung bestimmte Jahreszeit&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight====&lt;br /&gt;
Befehle die bei Änderung der Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight-&amp;amp;lt;sr/sr_astro/sr_civil/sr_indoor/sr_weather/ss/ss_astro/ss_civil/ss_indoor/ss_weather&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung zu bestimmter Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung zu bestimmter Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn====&lt;br /&gt;
Befehle die bei Beginn/Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn/Ende der UWZ Warnungen&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-begin====&lt;br /&gt;
Befehle die bei Beginn der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg %UWZLONG%&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-end====&lt;br /&gt;
Befehle die beim Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg Alle Unwetterwarnungen sind nun beendet!&lt;br /&gt;
&lt;br /&gt;
=Platzhalter=&lt;br /&gt;
==verfügbar in allen HomeCMD Attributen==&lt;br /&gt;
===%ADDRESS%===&lt;br /&gt;
MAC Adresse des zuletzt ausgelösten Presence Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALARM%===&lt;br /&gt;
Liste mit Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&lt;br /&gt;
&lt;br /&gt;
===%ALARMCT%===&lt;br /&gt;
Anzahl der ausgelösten Alarm Geräte&lt;br /&gt;
&lt;br /&gt;
===%ALARMHR%===&lt;br /&gt;
Liste mit (human readable) Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für msg benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
Alias des zuletzt ausgelösten Resident&lt;br /&gt;
&lt;br /&gt;
===%AMODE%===&lt;br /&gt;
aktueller Alarm Mode&lt;br /&gt;
&lt;br /&gt;
===%AEAH%===&lt;br /&gt;
Wert von anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 1 wenn on und 0 wenn off&lt;br /&gt;
&lt;br /&gt;
===%ARRIVERS%===&lt;br /&gt;
Alias-Liste der ROOMMATE/GUEST deren location auf arrival steht&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Residents zu begrüßen&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. Peter, Paul und Marry&lt;br /&gt;
&lt;br /&gt;
===%AUDIO%===&lt;br /&gt;
Audio Device des zuletzt ausgelösten ROOMMATE/GUEST (Attribut msgContactAudio)&amp;lt;br&amp;gt;&lt;br /&gt;
wenn das Attribut msgContactAudio des jeweiligen Resident keinen Wert hat, so wird versucht den Wert des Attributs aus dem globalMsg (sofern vorhanden) auszulesen&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Resident spezifische msg(s) vom Typ audio zu senden, z.B. Nacht/Morgen Grüße/Wünsche&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOW%===&lt;br /&gt;
Alias des zu letzt gemeldeten Geräts mit niedrigem Batteriestand&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWALL%===&lt;br /&gt;
Wert des Reading batteryLow_hr&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWCT%===&lt;br /&gt;
Wert des Reading batteryLow_ct&lt;br /&gt;
&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Reading condition des überwachten Yahoo weather Device&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für Wetter(vorhersage) benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%CONTACT%===&lt;br /&gt;
Wert des Reading lastContact (Name des zuletzt geöffneten Kontakt Sensor)&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um msg zu versenden&lt;br /&gt;
&lt;br /&gt;
===%DAYTIME%===&lt;br /&gt;
Wert des Reading daytime&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Tageszeit spezifische Aktionen zu schalten&lt;br /&gt;
&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
Name des zuletzt ausgelösten Presence Gerät&lt;br /&gt;
&lt;br /&gt;
===%DEVICEA%===&lt;br /&gt;
Wert des Reading lastAbsentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DEVICEP%===&lt;br /&gt;
Wert des Reading lastPresentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DISABLED%===&lt;br /&gt;
Wert des Reading devicesDisabled&lt;br /&gt;
&lt;br /&gt;
===%DND%===&lt;br /&gt;
DND Status&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn an, 0 wenn aus&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCE%===&lt;br /&gt;
Wert des Reading durTimerAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCELAST%===&lt;br /&gt;
Wert des Reading lastDurAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCE%===&lt;br /&gt;
Wert des Reading durTimerPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCELAST%===&lt;br /&gt;
Wert des Reading lastDurPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEP%===&lt;br /&gt;
Wert des Reading durTimerSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEPLAST%===&lt;br /&gt;
Wert des Reading lastDurSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME&amp;gt;%===&lt;br /&gt;
Event des benannten Kalenders&amp;lt;br&amp;gt;&lt;br /&gt;
0 wenn kein gerade kein Event ist&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME-EVENTNAME&amp;gt;%===&lt;br /&gt;
0 wenn das benannte Event nicht aktiv ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn das benannte Event aktiv ist&lt;br /&gt;
&lt;br /&gt;
===%FORECAST%===&lt;br /&gt;
Wettervorhersage für morgen&lt;br /&gt;
&lt;br /&gt;
===%FORECASTTODAY%===&lt;br /&gt;
Wettervorhersage für heute&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITY%===&lt;br /&gt;
Wert des Reading humidity von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITYTREND%===&lt;br /&gt;
Wert des Reading humidityTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%ICE%===&lt;br /&gt;
0 wenn keine Eiswarnung besteht&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn Eiswarnung besteht&lt;br /&gt;
&lt;br /&gt;
===%IP%===&lt;br /&gt;
Wert des Reading publicIP von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LIGHT%===&lt;br /&gt;
Wert des Reading light von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATION%===&lt;br /&gt;
Wert des Reading location von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATIONR%===&lt;br /&gt;
Wert des Reading location des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCE%===&lt;br /&gt;
Wert des Reading luminance von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCETREND%===&lt;br /&gt;
Wert des Reading luminanceTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%MODE%===&lt;br /&gt;
gerade aktiver Modus von HOMEMODE (Reading mode)&lt;br /&gt;
&lt;br /&gt;
===%MODEALARM%===&lt;br /&gt;
aktueller Alarm Mode (wie %AMODE%)&lt;br /&gt;
&lt;br /&gt;
===%MOTION%===&lt;br /&gt;
Wert des Reading lastMotion von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%NAME%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %SELF%)&lt;br /&gt;
&lt;br /&gt;
===%OPEN%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENCT%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENHR%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PANIC%===&lt;br /&gt;
0 wenn panic ausgeschaltet ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn panic eingeschaltet ist&lt;br /&gt;
&lt;br /&gt;
===%RESIDENT%===&lt;br /&gt;
Name des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PRESENT%===&lt;br /&gt;
presence von HOMEMODE&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESENTR%===&lt;br /&gt;
presence des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESSURE%===&lt;br /&gt;
Wert des Reading pressure von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PRESSURETREND%===&lt;br /&gt;
Wert des Reading pressureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVAMODE%===&lt;br /&gt;
vorheriger modeAlarm von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVCONTACT%===&lt;br /&gt;
vorheriger geöffneter Kontaktsensor&lt;br /&gt;
&lt;br /&gt;
===%PREVMODE%===&lt;br /&gt;
vorheriger mode von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVMODER%===&lt;br /&gt;
vorheriger state des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PREVMOTION%===&lt;br /&gt;
vorheriger geöffneter Bewegungsmelder&lt;br /&gt;
&lt;br /&gt;
===%SEASON%===&lt;br /&gt;
Wert des Reading season von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SELF%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %NAME%)&lt;br /&gt;
&lt;br /&gt;
===%SENSORSBATTERY%===&lt;br /&gt;
Liste aus Internal SENSORSBATTERY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSCONTACT%===&lt;br /&gt;
Liste aus Internal SENSORSCONTACT&lt;br /&gt;
&lt;br /&gt;
===%SENSORSENERGY%===&lt;br /&gt;
Liste aus Internal SENSORSENERGY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSMOTION%===&lt;br /&gt;
Liste aus Internal SENSORSMOTION&lt;br /&gt;
&lt;br /&gt;
===%SENSORSSMOKE%===&lt;br /&gt;
Liste aus Internal SENSORSSMOKE&lt;br /&gt;
&lt;br /&gt;
===%SMOKE%===&lt;br /&gt;
Wert des Reading alarmSmoke von HOMEMODE&lt;br /&gt;
0 wenn kein Alarm&lt;br /&gt;
&lt;br /&gt;
===%SMOKECT%===&lt;br /&gt;
Wert des Reading alarmSmoke_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SMOKEHR%===&lt;br /&gt;
Wert des Reading alarmSmoke_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPERED%===&lt;br /&gt;
Wert des Reading sensorsTampered von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDCT%===&lt;br /&gt;
Wert des Reading sensorsTampered_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDHR%===&lt;br /&gt;
Wert des Reading sensorsTampered_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURE%===&lt;br /&gt;
Wert des Reading temperature von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURETREND%===&lt;br /&gt;
Wert des Reading temperatureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TOBE%===&lt;br /&gt;
are/sind oder is/ist der Wetterkondition&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHT%===&lt;br /&gt;
Wert des Reading twilight von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHTEVENT%===&lt;br /&gt;
aktuelles twilight Event&lt;br /&gt;
&lt;br /&gt;
===%UWZ%===&lt;br /&gt;
UWZ Warnlevel&lt;br /&gt;
&lt;br /&gt;
===%UWZLONG%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (lange Version)&lt;br /&gt;
&lt;br /&gt;
===%UWZSHORT%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (kurze Version)&lt;br /&gt;
&lt;br /&gt;
===%WEATHER%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather short&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WEATHERLONG%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather long&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WIND%===&lt;br /&gt;
Wert des Reading wind von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%WINDCHILL%===&lt;br /&gt;
Wert des Reading wind_chill vom eingebundenen Yahoo Wetter Gerät&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDcontact, HomeCMDmotion und HomeCMDalarm Attributen==&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%SENSOR%===&lt;br /&gt;
name des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%STATE%===&lt;br /&gt;
state des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeTextWeatherForecast Attributen==&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Readings condition des Yahoo Weather Geräts&lt;br /&gt;
&lt;br /&gt;
===%DAY%===&lt;br /&gt;
Tag der Wettervorhersage (1 - heute, 2 - morgen)&lt;br /&gt;
&lt;br /&gt;
===%HIGH%===&lt;br /&gt;
maximale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
===%LOW%===&lt;br /&gt;
minimale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDevent Attributen==&lt;br /&gt;
===%CALENDAR%===&lt;br /&gt;
Name der Kalenders&lt;br /&gt;
&lt;br /&gt;
===%DESCRIPTION%===&lt;br /&gt;
Beschreibung des aktuellen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
===%EVENT%===&lt;br /&gt;
Name/Titel des aktuellen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
===%PREVEVENT%===&lt;br /&gt;
Name/Titel des vorherigen Event des Kalenders&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDdevice Attributen==&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
name der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
=Benötigte Events=&lt;br /&gt;
Folgende Events werden von HOMEMODE ausgewertet bzw. werden benötigt damit HOMEMODE vollumfänglich funktionieren kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;DEVICE-TYPE&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;EVENT&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;RESIDENTS&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;ROOMMATE,GUEST&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wayhome&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSCONTACT}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsContactReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSMOTION}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsMotionReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSLUMINANCE}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;luminance&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsLuminanceReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSENERGY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;power&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;energy&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsPowerEnergyReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSBATTERY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;battery&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsBatteryReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomePresenceDeviceType&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeYahooWeatherDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wind&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeTwilightDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;light&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;twilight&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;aktEvent&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorTemperatureOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorHumidityOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeEventsHolidayDevices&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeUWZ&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;WarnCount&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=24488</id>
		<title>HOMEMODE</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HOMEMODE&amp;diff=24488"/>
		<updated>2018-01-11T17:46:09Z</updated>

		<summary type="html">&lt;p&gt;DeeSPe: /* Allgemeines */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Das Modul wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden und viele grundlegende Automationen durch Hinzufügen weiterer Geräte bereitzustellen.&lt;br /&gt;
|ModType=h&lt;br /&gt;
|ModCmdRef=HOMEMODE&lt;br /&gt;
|ModFTopic=64317&lt;br /&gt;
|ModForumArea=Automatisierung&lt;br /&gt;
|ModTechName=22_HOMEMODE.pm&lt;br /&gt;
|ModOwner=DeeSPe&lt;br /&gt;
}}&lt;br /&gt;
Diese Seite beschreibt die Konfiguration und Verwendung des Moduls &#039;&#039;22_HOMEMODE.pm&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Das Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier aufgeführte Anleitung entspricht dem Modul in Version 1.4.0.&lt;br /&gt;
&lt;br /&gt;
Viele allgemein typische Automationen sind bereits fertig integriert.&lt;br /&gt;
&lt;br /&gt;
Die jeweils per Event auszuführenden Befehle können in den entsprechenden &#039;&#039;HomeCMD...&#039;&#039; Atributen hinterlegt werden und so in der Detail Ansicht des HOMEMODE Geräts übersichtlich angezeigt und bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen vieler notify/DOIF ist durch den Einsatz von &#039;&#039;HOMEMODE&#039;&#039; unnötig.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wurde das Modul für die Verwendung mit HomeKit als GUI optimiert. Alle möglichen Mappings für Homebridge sind bereits enthalten und können über einen set Befehl aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:HOMEMODE_Device.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Um Modul &#039;&#039;22_HOMEMODE.pm&#039;&#039; benutzen zu können benötigt man als Mindestvoraussetzung ein bereits angelegtes RESIDENTS Gerät mit entsprechenden ROOMMATE/GUEST Geräten.&lt;br /&gt;
&lt;br /&gt;
==Mögliche Automationen==&lt;br /&gt;
Alle Automationen sind optional.&lt;br /&gt;
&lt;br /&gt;
Hier ein paar Beispiele:&lt;br /&gt;
*Änderung des Zustands von ROOMMATE/GUEST Geräten anhand von PRESENCE Geräten&lt;br /&gt;
*Bereistellung von CMD Attributen für mögliche Events rund um den Heim-/Hausstatus&lt;br /&gt;
*Bereistellung von Platzhaltern innerhalb der CMD Attribute, z.B. %MODE%, %SEASON% oder %PREVMODE% für die Werte der Readings mode, season und prevMode&lt;br /&gt;
*Einbindung von Kontakt Sensoren, für z.B. Offen-Warnungen nach bestimmten Zeitraum oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Kontakt Sensor konfiguriert werden&lt;br /&gt;
*Einbindung von Bewegungs Sensoren, für z.B. automatische Licht Schaltungen oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Bewegungs Sensor konfiguriert werden&lt;br /&gt;
*Darstellungen und Auslösen von Sabotage Alarmen der eingebundenen Kontakt- und Bewegungssensoren&lt;br /&gt;
*Einbindung von jeweils einem Temperatur und Luftfeuchtigkeitssensor&lt;br /&gt;
*Einbindung eines lokalen Yahoo Wetter Devices zur Ermittlung und Ausgabe der lokalen Wetterdaten und Erzeugung der Wettervorhersage&lt;br /&gt;
*Einbindung von Power und Energy Sensoren zur Ermittlung der Gesamtmengen&lt;br /&gt;
*Einbindung von Calendar/holiday Devices für spezielle im HOMEMODE Device verfügbar zu machende Events&lt;br /&gt;
*von Uhrzeit abhängiger Anwesend-Modus&lt;br /&gt;
*Bewohner unabhängige Tageszeit-Modus&lt;br /&gt;
*Alarm-Modus&lt;br /&gt;
*DND-Modus&lt;br /&gt;
*Überwachung von Batteriewerten&lt;br /&gt;
&lt;br /&gt;
=HOMEMODE-Gerät=&lt;br /&gt;
==Definition==&lt;br /&gt;
Das HOMEMODE Gerät - hier mit dem Namen &#039;&#039;Home&#039;&#039; versehen - selbst wird über&lt;br /&gt;
 define Home HOMEMODE&lt;br /&gt;
bei Vorhandensein nur eines RESIDENTS Geräts definiert.&lt;br /&gt;
&lt;br /&gt;
Bei Verwendung mehrerer RESIDENTS Geräte muss das Master RESIDENTS Gerät beim Definieren mit angegeben werden&lt;br /&gt;
 define Home HOMEMODE rgr_Residents&lt;br /&gt;
Dieses Modul verwendet das globale Attribut &#039;&#039;language&#039;&#039; zur Bestimmung der Anzeigedaten (Standard: EN=english). Für deutsche Ausgabedaten kann das Attribut&lt;br /&gt;
 attr global language DE&lt;br /&gt;
gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Alternativ kann auch nur das HOMEMODE Gerät auf deutsch geändert werden&lt;br /&gt;
 attr Home HomeLanguage DE&lt;br /&gt;
&lt;br /&gt;
==Set-Befehle==&lt;br /&gt;
&#039;&#039;set &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 set Home anyoneElseAtHome &amp;lt;on/off&amp;gt;&lt;br /&gt;
einschalten wenn jemand anderes zu Hause ist der kein registrierter ROOMMATE/GUEST ist, z.B. Hund/Katze oder unregistrierte Gäste&amp;lt;br&amp;gt;&lt;br /&gt;
wenn eingeschaltet, dann wird der Alarm Mode beim Verlassen statt auf armaway nur auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
schaltet man ein und hat schon Haus/Wohnung verlassen, so wird der Alarm Mode von armaway auf armhome gestellt&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AEAH%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd &amp;lt;on/off&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. um Benachrichtigungen zu deaktivieren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DND%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home dnd-for-minutes &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den &amp;quot;Bitte nicht stören&amp;quot; Modus für die angegebenen Minuten ein&amp;lt;br&amp;gt;&lt;br /&gt;
kehrt danach zum vorherigen (tageszeitabhängigen) Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home deviceDisable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
deaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home deviceEnable &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
reaktiviert das Gerät für sämtliche HOMEMODE Automationen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DEVICE%&#039;&#039;&#039; und &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home location &amp;lt;arrival/home/bed/underway/wayhome&amp;gt;&lt;br /&gt;
manueller Ortswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%LOCATION%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home mode &amp;lt;morning/day/afternoon/evening/night/gotosleep/asleep/absent/gone/home&amp;gt;&lt;br /&gt;
manueller Moduswechsel&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm &amp;lt;armaway/armhome/armnight/disarm&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus ein&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVAMODE%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 set Home modeAlarm-for-minutes &amp;lt;armaway/armhome/armnight/disarm&amp;gt; &amp;lt;MINUTES&amp;gt;&lt;br /&gt;
schaltet den angegebenen Alarm Modus für die angegebenen Minuten ein&lt;br /&gt;
kehrt danach zum vorherigen Alarm Modus zurück&lt;br /&gt;
&lt;br /&gt;
 set Home updateHomebridgeMapping&lt;br /&gt;
aktualisiert das Attribut homebridgeMapping des HOMEMODDE Device abhängig von den verfügbaren Informationen&lt;br /&gt;
&lt;br /&gt;
 set Home updateInternalForce&lt;br /&gt;
führt eine Aktualisierung der Internals des HOMEMODE Device aus&amp;lt;br&amp;gt;&lt;br /&gt;
das sollte manuell benutzt werden nachdem das Modul aktualisiert und nur ein reload statt restart gemacht wurde&amp;lt;br&amp;gt;&lt;br /&gt;
auch wenn man überwachte/kontrollierte Geräte ändert sollte man diesen Befehl manuell ausführen, z.B. neue ROOMMATE/GUEST im RESIDENTS Device hinzufügt, oder Geräte in FHEM hinzufügt die dem selben Devspec wie bisher entsprechen (Steckdosen, Sensoren)&lt;br /&gt;
&lt;br /&gt;
==Get-Befehle==&lt;br /&gt;
&#039;&#039;get &amp;lt;required&amp;gt; [optional]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 get Home contactsOpen &amp;lt;all/doorsinside/doorsoutside/doorsmain/outside/windows&amp;gt;&lt;br /&gt;
Liste von all/doorsinside/doorsoutside/doorsmain/outside/windows offenen Kontakten&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%OPEN%&#039;&#039;&#039;, &#039;&#039;&#039;%OPENCT%&#039;&#039;&#039; und &#039;&#039;&#039;%OPENHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home devicesDisabled&lt;br /&gt;
Anzeige der für HOMEMODE deaktivierten Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%DISABLED%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home mode&lt;br /&gt;
Anzeige von mode&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%MODE%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home modeAlarm&lt;br /&gt;
Anzeige von modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%AMODE%&#039;&#039;&#039; und &#039;&#039;&#039;%MODEALARM%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home publicIP&lt;br /&gt;
holen der öffentlichen IP Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%IP%&#039;&#039;&#039; ist in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home sensorsTampered&lt;br /&gt;
Liste aller sabotierten Sensoren&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%TAMPERED%&#039;&#039;&#039;, &#039;&#039;&#039;%TAMPEREDCT%&#039;&#039;&#039; und &#039;&#039;&#039;%TAMPEREDHR%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weather &amp;lt;long/short&amp;gt;&lt;br /&gt;
Wetterinfo im angegebenen Format anzeigen&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%WEATHER%&#039;&#039;&#039; und &#039;&#039;&#039;%WEATHERLONG%&#039;&#039;&#039; sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
 get Home weatherForecast [TAG]&lt;br /&gt;
Wettervorhersage für angegebenen Tag&amp;lt;br&amp;gt;&lt;br /&gt;
wenn kein Tag angegeben wird, so wird die Vorhersage für morgen (2) asugegeben&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%FORECAST%&#039;&#039;&#039; (morgen) und &#039;&#039;&#039;%FORECASTTODAY%&#039;&#039;&#039; (heute) sind in allen HomeCMD Attributen verfügbar&lt;br /&gt;
&lt;br /&gt;
==webCmd==&lt;br /&gt;
Die Schaltmöglichkeiten sind absichtlich gering gehalten, denn im normalen Betrieb sollte nicht mehr benötigt werden als die hier gebotenen.&amp;lt;br&amp;gt;&lt;br /&gt;
Es lässt sich der Alarm Mode manuell umschalten und beim Klick auf das devStateIcon wird der DND Mode an- und ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
==Grundkonfiguration==&lt;br /&gt;
&lt;br /&gt;
Diese Grundkonfiguration sollte immer als erstes erfolgen um entsprechend darauf weiter aufzubauen. Als zweiter Schritt ist dann die erweiterte Konfiguration angedacht.&lt;br /&gt;
&lt;br /&gt;
Bei der Namensvergabe der Attribute vom HOMEMODE Device wurde nach einem möglichst kurzem Prefix gesucht und nach vielen Tests wurde sich für das Prefix &amp;quot;Home&amp;quot; entschieden. Das hat den Vorteil dass alle Attribute beisammen stehen und diese auch (durch den Großbuchstaben am Anfang) ziemlich weit oben in der Liste der Attribute stehen. Ebenso wurde bei der Namensvergabe versucht selbsterklärende Namen zu wählen, das hat den Vorteil dass man relativ einfach genau erkennen kann wofür das Attribut steht, allerdings auch den Nachteil dass einige Attributnamen ganz schön lang werden.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedUserAttr====&lt;br /&gt;
Als Erstes wird empfohlen, gerade für Anfänger, das Attribut &amp;quot;HomeAdvancedUserAttr&amp;quot; auf 1 zu setzen. Dadurch werden viel mehr HomeCMD Attribute freigeschaltet. Diese werden im Attribut userattr des HOMEMODE Device hinzugefügt.&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAlarmModes====&lt;br /&gt;
Als nächstes sollte man sich entscheiden ob die Alarm Modus evtl. nicht automatisch zum jeweiligen Modus des HOMEMODE Device geschaltet werden sollen. Standardmäßig werden die Alarm Modus automatisch gesteuert. Ist das nicht erwünscht, so ist der Wert dieses Attributs auf 0 zu setzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;absent&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armaway&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;home&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;disarm&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Modus &amp;quot;asleep&amp;quot; des HOMEMODE Device wird automatisch auf &amp;quot;armnight&amp;quot; geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
Alarm Modus &amp;quot;armhome&amp;quot; kann nur manuell gesetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeAutoArrival====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird bei Ankunft jedes ROOMMATE/GUEST die location des jeweiligen ROOMMATE/GUEST für die hier angegeben Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt. Beim ersten nach Hause kommenden ROOMMATE/GUEST wird zusätzlich die location des HOMEMODE Device für die hier eingestellte Zeit in Minuten auf &amp;quot;arrival&amp;quot; gesetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Ablauf der hier eingestellten Minuten wechelt das jeweilige Device von &amp;quot;arrival&amp;quot; auf &amp;quot;home&amp;quot; sofern es noch die location &amp;quot;arrival&amp;quot; hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAsleep====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Schlafengehen (gotosleep) jedes ROOMMATE/GUEST ein Timer gestartet der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;asleep&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoAwoken====&lt;br /&gt;
Ist hier ein Wert größer 0 angegeben, so wird beim Erwachen (&amp;quot;awoken&amp;quot; oder &amp;quot;home nach asleep&amp;quot;) jedes ROOMMATE/GUEST dieser auf &amp;quot;awoken&amp;quot; gesetzt und ein Timer gestartet der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf &amp;quot;home&amp;quot; setzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 5999.9&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAutoDaytime====&lt;br /&gt;
Standardmäßig wird mode anhand der Tageszeit automatisch gesetzt. Ist das nicht gewünscht kann das über den Wert 0 deaktiviert werden. Dann stehen allerdings tageszeitabhängigen mode(s) nicht mehr zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomeResidentCmdDelay====&lt;br /&gt;
Normalerweise werden die Events der ROOMMATE/GUEST vor denen des HOMEMODE Device ausgeführt, um das zu ändern wird die Ausführung der ROOMMATE/GUEST HomeCMD Attribute um die hier eingestellte Zeit in Sekunden verzögert.&amp;lt;br&amp;gt;&lt;br /&gt;
Je genauer der Name des jeweiligen HomeCMD Attributs beschrieben wird, desto später wird dieser ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Das heißt z.B. dass HomeCMDmode vor HomeCMDmode-absent und dieser wiederrum vor HomeCMDmode-absent-ROOMMATE/GUEST-NAME ausgeführt wird usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Um das normale Verhalten wiederherzustellen ist der Wert dieses Attributs auf 0 zu setzen. Dann wird HomeCMDmode-absent-ROOMMATE/GUEST-NAME vor HomeCMDmode-absent und vor HomeCMDmode ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis unendlich in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
==Konfiguration Presence Devices (automatische anwesend/abwesend Umschaltung von ROOMMATE/GUEST)==&lt;br /&gt;
Damit die automatische Zuordnung der Presence Devices zu ihren ROOMMATE/GUEST Devices zuverlässig funktioniert, ist es nötig dass der Hauptteil des Namens des ROOMMATE/GUEST innerhalb des Namens des zugehörigen PRESENCE Device(s) vorkommt.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Attribut HomePresenceDeviceType kann man den zu suchenden TYPE von Presence Device vorgeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Per Default werden nur Devices vom TYPE PRESENCE gesucht und versucht den ROOMMATE/GUEST zuzuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls man z.B. auch Devices vom TYPE dummy zur Anwesenheitssteuerung benutzt, kann man diese im Attribut HomePresenceDeviceType mit hinzunehmen. Es sind alles Device TYPEn möglich die ein &amp;quot;presence&amp;quot; Reading mit den Werten &amp;quot;present/appeared&amp;quot; und &amp;quot;absent/disappeared&amp;quot; bereitstellen. Mehrere TYPEn sind möglich da in diesem Attribut ein Regex erwartet wird. z.B.: dummy oder PRESENCE|dummy oder PRESENCE|dummy|ONKYO_AVR.&lt;br /&gt;
&lt;br /&gt;
===Beispiel===&lt;br /&gt;
Der Device Name meines ROOMMATE ist &amp;quot;rr_Dan&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf der Suche nach dem zugehörigen Presence Device wird der erste Teil (rr_ oder rg_) weggeschnitten und der Rest in Kleinbuchstaben umgewandelt.&amp;lt;br&amp;gt;&lt;br /&gt;
Mit dem was übrig bleibt, bei mir also nur dan, werden die möglichen Presence Devices versucht zu erkennen.&amp;lt;br&amp;gt;&lt;br /&gt;
Mein zugehöriges Presence Device heißt, historisch gewachsen, PRESENCE_rr_Dan und würde somit problemlos zugeordnet werden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Namen der zugehörigen Presence Devives könnten in ihrer kürzesten Form auch wie folgt sein um meinen ROOMMATE/GUEST Device zugeordnet zu werden:&amp;lt;br&amp;gt;&lt;br /&gt;
 pdan&lt;br /&gt;
 danp&lt;br /&gt;
 ZDan&lt;br /&gt;
 DANZ&lt;br /&gt;
 wenndannsonst&lt;br /&gt;
Aber Achtung, es funktioniert nicht mehr wenn die Namen nicht eindeutig sind. Wenn es z.B. eine rr_Dana geben würde mit Presence Device Name &amp;quot;pdani&amp;quot;, dann würde dieser Name auch bei mir (dan) passen. Das könnte man aber auch bewußt nutzen um mit einem Presence Device 2 ROOMMATE/GUEST Devices gleichzeitig zu steuern.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn die Namen wirklich absolut eindeutig sind, dann könnte man den Regex im Attribut HomePresenceDeviceType sogar auf &amp;quot;.*&amp;quot; setzen.&lt;br /&gt;
&lt;br /&gt;
Werden pro ROOMMATE/GUEST mehrere Presence Devices gefunden und zugeordnet, so wird automatisch dass Attribut HomePresenceDeviceAbsentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt; auf die Anzahl der gefundenen Presence Devices gesetzt, so dass der/die jeweilige ROOMMATE/GUEST immer erst als abwesend gewertet wird sobald alle zugehörigen Presence Devices abwesend sind. Analog dazu gibt es noch das Attribut HomePresenceDevicePresentCount-&amp;lt;NAME-ROOMMATE/GUEST&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
====HomeAutoPresence====&lt;br /&gt;
Ist dieses Attribut auf 1 gesetzt, so werden die ROOMMATE/GUEST Devices automatisch zum Status ihrer zugehörigen PRESENCE Devices geschaltet.&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device present - ROOMMATE/GUEST home&amp;lt;br&amp;gt;&lt;br /&gt;
PRESENCE Device absent - ROOMMATE/GUEST absent&amp;lt;br&amp;gt;&lt;br /&gt;
Falls es sich bei den von Euch benutzen PRESENCE Devices nicht um Devices vom TYPE PRESENCE handeln sollte, sondern z.B. um PRESENCE und dummy, so kann dieses im Attribut HomePresenceDeviceType als Regex konfiguriert werden! z.B.: PRESENCE|dummy&amp;lt;br&amp;gt;&lt;br /&gt;
Damit ein Device als Presence Device erkannt werden kann, muss dieses über ein presence Reading verfügen.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 oder 1&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceType====&lt;br /&gt;
Regex des TYPEs/der TYPEn von Presence Devices&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Regex der Device TYPEn&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: PRESENCE&lt;br /&gt;
&lt;br /&gt;
==Erweiterte Konfiguration==&lt;br /&gt;
Um das HOMEMODE Device vollumfänglich zu benutzen ist es sinnvoll weitere Devices (zur Überwachung) hinzuzufügen.&lt;br /&gt;
&lt;br /&gt;
Die bereits möglichen hinzuzufügenden Devices werden hier folgend nach Attributnamen erklärt.&lt;br /&gt;
&lt;br /&gt;
===Attribute zum Hinzufügen weiterer Geräte===&lt;br /&gt;
&lt;br /&gt;
====HomeEventsCalendarDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeEventsHolidayDevices====&lt;br /&gt;
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Es wird empfohlen die holiday/Calendar Namen in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).&amp;lt;br&amp;gt;&lt;br /&gt;
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; in den HomeCMDevent Attributen zur Verfügung. &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039; wird dann durch den Namen, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; durch das aktuelle Event und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; durch das vorherige Event des jeweiligen Kalenders ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec von holiday/Calendar Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorAirpressure====&lt;br /&gt;
Luftdrucksensor aussen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorHumidityOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussensensors für Luftfeuchtigkeit anzugeben. Dieser muss ein Reading humidity besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für (Aussen)Luftfeuchtigkeit und Aussentemperatur ein und der selbe ist, so muss dieser nur einmalig im Attribut HomeSensorTemperatureOutside hinterlegt werden. Dieser muss dann die beiden Readings humidity und temperature haben. Im Bedarfsfall können diese Readings auch vorher entsprechend durch eigene userReadings erstellt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%HUMIDITY%&#039;&#039;&#039; für den Wert des Readings humidity zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorTemperatureOutside====&lt;br /&gt;
Hier ist der Name des (Haupt)Aussentemperatursensors anzugeben. Dieser muss mindestens ein Reading temperature besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Falls der Sensor für Aussentemperatur auch ein Reading humidity besitzen sollte und dieses auch der Sensor für die Aussenlufteuchtigkeit ist, so muss dieser nur einmalig hier in diesem Attribut hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Dieser Sensor stellt den Platzhalter &#039;&#039;&#039;%TEMPERATURE%&#039;&#039;&#039; für den Wert des Readings temperature zur Verfügung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Device Name mit Reading temperature und optional humidity&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContact====&lt;br /&gt;
Hier können alle Kontakt Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDcontact Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das optische und magnetische Kontaktsensoren vom HomeMatic. HM-SEC-SCo und HM-SEC-SC-2.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;model=HM-SEC-SC(o|-2)&#039;&#039;&#039; eingetragen um alle diese Kontaktsensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Kontaktsensoren mit ihren Namen im Internal SENSORSCONTACT des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Kontaktsensor folgende Attribute im Attribut userattr hinzugefügt:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====HomeContactType=====&lt;br /&gt;
Typ des Kontakts - wird versucht anhand des Namen/Alias beim Hinzufügen zum HOMEMODE Device zu ermitteln, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: doorinside,dooroutside,doormain,window&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: window&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Kontaktsensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModes=====&lt;br /&gt;
Regex der Mode(s) des HOMEMODE Device in denen keine Offen Warnungen erfolgen sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist ein Kontakt geöffnet während die hier eingestellten Mode(s) eintreten, so wird der noch bestehende Timer abgebrochen. Entgegengesetzt startet er wieder sobal die hier eingestellten Mode(s) verlassen werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Ist hier z.B. &amp;quot;gotosleep|asleep&amp;quot; eingestellt, so kann man z.B. das Fenster schon vor dem Auslösen von gotosleep oder asleep öffnen und der bestehende Offenwarnung-Timer wird dann abgebrochen. Sobald man am Morgen z.B. awoken oder home auslöst, so wird ein neuer Timer gestartet der einen dann an das noch offene Fenster erinnert.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle Modes des HOMEMODE Device&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenDontTriggerModesResidents=====&lt;br /&gt;
Devspec der ROOMMATE/GUEST Devices deren Status statt der Modes des HOMEMODE Device für Attribut HomeOpenDontTriggerModes benutzt werden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: alle überwachten ROOMMATE/GUEST&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenMaxTrigger=====&lt;br /&gt;
Maximale Anzahl an Warnmeldungen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ganze Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimes=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
=====HomeOpenTimesDividers=====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactOpenTimeDividers des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2 1 2 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsContactReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactReadings====&lt;br /&gt;
Zwei leerzeichenseparierte Readings für open und sabotage Status.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|tilted|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeDividers====&lt;br /&gt;
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.&amp;lt;br&amp;gt;&lt;br /&gt;
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).&amp;lt;br&amp;gt;&lt;br /&gt;
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. &amp;quot;2 1 2 3&amp;quot; ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeOpenTimesDividers in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 2 1 2 2.5 (für 4 Jahreszeiten)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimeMin====&lt;br /&gt;
Minimale Zeit in Minuten die mindestens für eine Offenwarnung gewartet werden soll - im Falle dass sich durch den Teiler evtl. zu kleine Werte ergeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: eine Zahle mit max. einer Kommmastelle, z.B. 2.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsContactOpenTimes====&lt;br /&gt;
Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Anzahl sollte dem Wert im Attribut HomeOpenMaxTrigger entsprechen. Wenn hier weniger Zeiten vorgegeben werden, so wird für weitere Offen Warnungen immer die letzte hier angegebene Zeit verwendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 7.5&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 10&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminance====&lt;br /&gt;
Devspec von (Innen-)Lichtsensoren deren Durchschnittswert berechnet werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotion====&lt;br /&gt;
Hier können alle Bewegungs Sensoren als Devspec hinterlegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Devices stellen zusätzlich die Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; in den HomeCMDmotion Attributen zur Verfügung. &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039; wird dann durch den Alias, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; durch den Namen und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Motion Sensor Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0801-1001|010f-0800-1001&#039;&#039;&#039; eingetragen um alle diese Bewegungssensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Damit bei den Gen5 Sensoren auch das open im reading state steht, habe ich mir bei diesen Sensoren ein userReading angelegt.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Nach Übernehmen des Attributs werden alle gefundenen Bewegungssensoren mit ihren Namen im Internal SENSORSMOTION des HOMEMODE Device einzeln aufgelistet und können dort auch direkt angeklickt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Des weiteren werden beim Übernehmen dieses Attributs jedem Bewegungssensor folgende Attribute im Attribut userattr hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
=====HomeModeAlarmActive=====&lt;br /&gt;
Regex der Alarm Mode(s) in denen der Bewegungssensor eine erfolgte Öffnung als Alarm melden soll.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: armaway|armhome|armnight&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex von Alarm Modes&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: armaway&lt;br /&gt;
&lt;br /&gt;
=====HomeReadings=====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsMotionReadings des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
=====HomeSensorLocation=====&lt;br /&gt;
Standort des Bewegungssensors (außen oder innen) - wird standardmäßig beim Hinzufügen zum HOMEMODE Device auf &amp;quot;inside&amp;quot; gesetzt, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: inside,outside&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: vorgegebene Werteauswahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: inside&lt;br /&gt;
&lt;br /&gt;
=====HomeValues=====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsMotionValues des HOMEMODE Device.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionReadings====&lt;br /&gt;
2 leerzeichenseparierte Readings für open und sabotage.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state sabotageError&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsMotionValues====&lt;br /&gt;
Regex der Werte die für offen und sabotiert stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Regex&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: open|on&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergy====&lt;br /&gt;
Hier können alle Energie Sensoren als Devspec hinterlegt werden. Diese müssen die beiden Readings power und energy besitzen.&amp;lt;br&amp;gt;&lt;br /&gt;
Anhand dieser Readings wird dann der Gesamtverbrauch und die derzeitige gesamte Leistungsaufnahme berechnet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;In meinem Falle sind das Fibaro Wall Plugs Gen4/5.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Darum ist bei mir als Devspec &#039;&#039;&#039;modelId=010f-0600-1000|010f-0602-1001&#039;&#039;&#039; eingetragen um alle diese Energie Sensoren zu erfassen.&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec mit vorhandenen energy und power Readings&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmoke====&lt;br /&gt;
Devspec mit Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorWindspeed====&lt;br /&gt;
Sensor für Windgeschwindigkeit&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des Sensors und Reading der Windgeschwindigkeit separiert mit : (z.B. ga_Windsensor:wind)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBattery====&lt;br /&gt;
Devspec von Batteriesensoren mit einem Reading &amp;quot;battery&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerAnyoneElseAtHome====&lt;br /&gt;
auslösendes Gerät für anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn:valueOff&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTriggerPanic====&lt;br /&gt;
auslösendes Gerät für Panikalarm&amp;lt;br&amp;gt;&lt;br /&gt;
valueOff ist optional, wird es weggelassen, so fungiert valueOn als toggle&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: device:reading:valueOn[:valueOff]&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTwilightDevice====&lt;br /&gt;
Hier ist der Name des lokalen Twilight Device anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich die Platzhalter &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039;, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; in den HomeCMD Attributen zur Verfügung. &#039;&#039;&#039;%LIGHT%&#039;&#039;&#039; wird dann durch das Reading light, &#039;&#039;&#039;%TWILIGHT%&#039;&#039;&#039; durch das Reading twilight und &#039;&#039;&#039;%TWILIGHTEVENT%&#039;&#039;&#039; durch das aktuelle Twilight Event ersetzt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeUWZ====&lt;br /&gt;
Hier ist der Name des lokalen UWZ Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%UWZ%&#039;&#039;&#039;, &#039;&#039;&#039;%UWZSHORT%&#039;&#039;&#039; und &#039;&#039;&#039;%UWZLONG%&#039;&#039;&#039; sind verfügbar in allen HomeCMD Attributen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Name des UWZ Geräts&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeYahooWeatherDevice====&lt;br /&gt;
Hier ist der Name des lokalen Yahoo Weather Geräts anzugeben.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Device stellt zusätzlich einige Platzhalter zur Verfügung. Für die genaue Beschreibung derer siehe &amp;quot;Platzhalter&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Devspec&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
===HomeText Attribute===&lt;br /&gt;
Die HomeText Attribute sind größtenteils zur Übersetzung einiger benötigter Begriffe gedacht.&amp;lt;br&amp;gt;&lt;br /&gt;
In den speziellen Attributen die mit HomeTextWeather anfangen, sind ganze Texte mit entsprechenden Platzhaltern einzufügen.&lt;br /&gt;
&lt;br /&gt;
====HomeTextAndAreIs====&lt;br /&gt;
Übersetzung für &amp;quot;and&amp;quot;, &amp;quot;are&amp;quot; und &amp;quot;is&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort/Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: and|are|is&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 und|sind|ist&lt;br /&gt;
&lt;br /&gt;
====HomeTextClosedOpen====&lt;br /&gt;
Übersetzung für &amp;quot;closed&amp;quot; und &amp;quot;open&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: closed|open&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 geschlossen|geöffnet&lt;br /&gt;
&lt;br /&gt;
====HomeTextNosmokeSmoke====&lt;br /&gt;
Übersetzung für &amp;quot;no smoke&amp;quot; und &amp;quot;smoke&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: no smoke|smoke&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 kein Rauch|Rauch&lt;br /&gt;
&lt;br /&gt;
====HomeTextRisingConstantFalling====&lt;br /&gt;
Übersetzung für &amp;quot;rising&amp;quot;, &amp;quot;constant&amp;quot; und &amp;quot;falling&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: rising|constant|falling&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 steigend|gleichbleibend|fallend&lt;br /&gt;
&lt;br /&gt;
====HomeTextTodayTomorrowAfterTomorrow====&lt;br /&gt;
Übersetzung für &amp;quot;today&amp;quot;, &amp;quot;tomorrow&amp;quot; und &amp;quot;day after tomorrow&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar separiert mit |&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: today|tomorrow|day after tomorrow&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Heute|Morgen|Übermorgen&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherNoForecast====&lt;br /&gt;
Übersetzung für &amp;quot;No forecast available&amp;quot; - Text wenn keine Wettervorhersage verfügbar ist&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: No forecast available&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es ist leider keine Wettervorhersage für den angegebenen Tag verfügbar!&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastInSpecDays====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage in 4-10 Tagen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 In %DAY% Tagen %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastToday====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für heute&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C. Aktuelle Temperatur %TEMPERATURE%°C bei einer Luftfeuchtigkeit von %HUMIDITY%%. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherForecastTomorrow====&lt;br /&gt;
Text mit Platzhaltern für Wettervorhersage für morgen/übermorgen&amp;lt;br&amp;gt;&lt;br /&gt;
spezielle Platzhalter die nur in diesem Attribut gültig sind: &#039;&#039;&#039;%CONDITION%&#039;&#039;&#039;, &#039;&#039;&#039;%DAY%&#039;&#039;&#039;, &#039;&#039;&#039;%HIGH%&#039;&#039;&#039; und &#039;&#039;&#039;%LOW%&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherLong====&lt;br /&gt;
Langer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 Es %TOBE% %CONDITION% bei %TEMPERATURE%°C und %HUMIDITY%% Luftfeuchtigkeit. Die gefühlte Temperatur ist %WINDCHILL%°C bei einer Windgeschwindigkeit von %WIND%km/h. Der Luftdruck ist %PRESSURETREND% bei %PRESSURE%hPa.&lt;br /&gt;
&lt;br /&gt;
====HomeTextWeatherShort====&lt;br /&gt;
Kurzer Text mit Platzhaltern für aktuelle Wetterdaten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Text mit Platzhaltern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 %CONDITION%, %TEMPERATURE%°C, %HUMIDITY%% Luftfeuchtigkeit, Luftdruck %PRESSURE%hPa&lt;br /&gt;
&lt;br /&gt;
===weitere Attribute===&lt;br /&gt;
Viele weitere Dinge lassen sich anpassen.&lt;br /&gt;
&lt;br /&gt;
====HomeAdvancedDetails====&lt;br /&gt;
mehr Details anzeigen, abhängig von den zu HOMEMODE hinzugefügten Geräten&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: none, detail, both, room&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Auswahlliste&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: none&lt;br /&gt;
&lt;br /&gt;
====HomeDaytimes====&lt;br /&gt;
Eigene Tageszeiten als Paare aus Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Zeit|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 00:00|Mitternacht&lt;br /&gt;
 00:05|Nacht&lt;br /&gt;
 06:30|Morgen&lt;br /&gt;
 10:00|Vormittag&lt;br /&gt;
 13:00|Mittag&lt;br /&gt;
 14:30|Nachmittag&lt;br /&gt;
 17:30|Vorabend&lt;br /&gt;
 19:00|Abend&lt;br /&gt;
 23:00|Spätabend&lt;br /&gt;
&lt;br /&gt;
====HomeIcewarningOnOffTemps====&lt;br /&gt;
2 leerzeichenseparierte Temperaturen für das Ein- und Ausschalten der Eiswarnung.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: zwei leerzeichenseparierte Temperaturen mit maximal einer Kommastelle&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 2 3&lt;br /&gt;
&lt;br /&gt;
====HomeModeAlarmArmDelay====&lt;br /&gt;
Zeit in Sekunden um das aktivieren der Alarmschaltung zu verzögern.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl (gleiche Verzögerung für alle modeAlarm) oder 3 leerzeichenseparierte Zahlen für jeden modeAlarm (Reihenfolge: armaway armnight armhome)&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0&lt;br /&gt;
&lt;br /&gt;
====HomeAtTmpRoom====&lt;br /&gt;
Diesen Raum zu temporäre at(s) hinzufügen die von HOMEMODE generiert werden&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDeviceAbsentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;absent&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: maximale Anzahl von verfügbaren Presence Geräten für jeden ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
====HomePresenceDevicePresentCount-&amp;lt;ROOMMATE/GUEST&amp;gt;====&lt;br /&gt;
Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf &amp;quot;present&amp;quot; zu setzen&amp;lt;br&amp;gt;&lt;br /&gt;
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis ~&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 1&lt;br /&gt;
&lt;br /&gt;
====HomePublicIpCheckInterval====&lt;br /&gt;
Interval in Minuten für die Überprüfung der öffentlichen IP-Adresse&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: 0 bis 99999&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelne Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 0 (deaktiviert)&lt;br /&gt;
&lt;br /&gt;
====HomeSeasons====&lt;br /&gt;
Eigene Jahreszeiten als Paare aus Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: Datum|Wort Paare separiert mit Leerzeichen&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Datum|Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 03.01|spring 06.01|summer 09.01|autumn 12.01|winter&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 03.01|Frühling&lt;br /&gt;
 06.01|Sommer&lt;br /&gt;
 09.01|Herbst&lt;br /&gt;
 12.01|Winter&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryLowPercentage====&lt;br /&gt;
Prozentsatz um einen Batteriesensor mit geringer Batterie anzuzeigen (nur bei Sensoren die ihren Batteriewert prozentual angeben)&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zahl&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 50&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsBatteryReading====&lt;br /&gt;
Reading der Batteriesensoren welches statt &amp;quot;battery&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: battery&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsLuminanceReading====&lt;br /&gt;
Reading der Lichtsensoren welches statt &amp;quot;luminance&amp;quot; benutzt werden soll&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: einzelnes Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: luminance&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsPowerEnergyReadings====&lt;br /&gt;
Readings der Power/Energy Sensoren welche statt &amp;quot;power&amp;quot; und &amp;quot;energy&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: 2 leerzeichenseparierte Wörter&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: power energy&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeReading====&lt;br /&gt;
Readings der Rauchmelder welche statt &amp;quot;state&amp;quot; benutzt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: ein Wort&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: state&lt;br /&gt;
&lt;br /&gt;
====HomeSensorsSmokeValue====&lt;br /&gt;
Regex der Auslösewerte von Rauchmeldern&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: RegEx&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: on&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialLocation====&lt;br /&gt;
Hier können eigene zusätzliche location(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; location &amp;lt;LOCATION&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeSpecialModes====&lt;br /&gt;
Hier können eigene zusätzliche mode(s) als kommaseparierte Liste angegeben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Diese können dann über &amp;quot;set &amp;lt;HOMEMODE&amp;gt; mode &amp;lt;MODE&amp;gt;&amp;quot; gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: kommaseparierte Liste von Wörtern&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
====HomeTrendCalcAge====&lt;br /&gt;
Zeit in Sekunden für das Maximalalter des vorherigen Wertes für die Trendberechnung&amp;lt;br&amp;gt;&lt;br /&gt;
Werte: frei wählbar&amp;lt;br&amp;gt;&lt;br /&gt;
Werteformat: Zeit in Sekunden&amp;lt;br&amp;gt;&lt;br /&gt;
Standardwert: 900&lt;br /&gt;
&lt;br /&gt;
Ein weiterer Teil der Konfiguration ist das Befüllen der HomeCMD Attribute. Da dieses durch die Vermischung von FHEM Code, Perl Code und zusätzlichen Platzhaltern erst einmal sehr befremdlich sein kann, habe ich bei der Beschreibung der HomeCMD Attribute teilweise Beispiele hinzugefügt um den Einstieg weiter zu erleichtern.&lt;br /&gt;
&lt;br /&gt;
==HomeCMD Attribute (mit Beispielen)==&lt;br /&gt;
Die HomeCMD Attribute sind zum Festlegen der jeweiligen Schaltaktionen gedacht und können damit evtl. vorhandene notify/DOIF ablösen. Sie können mit FHEM-Code, Perl-Code oder aber auch mit beidem vermischt befüllt werden (wovon ich allerdings abrate). Zusätzlich sind noch diverse Platzhalter (siehe Platzhalter) verfügbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bei Perl-Code innerhalb der HomeCMD Attribute gibt es hier Besonderheiten.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
*Im Gegensatz zur FHEM-Eingabezeile müssen hier keine Semikolon verdoppelt werden&lt;br /&gt;
*Kommetarzeilen sind zulässig&lt;br /&gt;
*Kommentare am Ende einer Perl-Zeile sind nicht zulässig&lt;br /&gt;
&lt;br /&gt;
Typischer Weise werden in den HomeCMD Attributen weitere Module angesprochen.&amp;lt;br&amp;gt;&lt;br /&gt;
Z.B. benutze ich für jegliche Form der Benachrichtigung den msg Befehl.&lt;br /&gt;
&lt;br /&gt;
Keines der HomeCMD Attribute hat einen Standardwert. Es müssen alle Befehle selbst programmiert werden.&lt;br /&gt;
&lt;br /&gt;
Platzhalter die Text(e) (string) beinhalten, müssen im Perl-Code in Anführungszeichen gesetzt werden (Beispiel %SENSOR%).&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter die Zahlen beinhalten (int,float) sollten nicht in Anführungszeichen gesetzt werden damit Zahlenvergleiche (mittels ==, &amp;lt;=, &amp;gt;=, &amp;gt;, &amp;lt;) funktionieren (Beispiel %LIGHT%, %ICE% oder %TEMPERATURE%).&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-off====&lt;br /&gt;
Befehle die beim Ende eines Rauchalarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Rauchalarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmSmoke-on====&lt;br /&gt;
Befehle die bei einem Rauchalarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;meldet&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;melden&amp;quot; if (%SMOKECT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %SMOKEHR% $is Rauchalarm!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Sabotage Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-off====&lt;br /&gt;
Befehle die beim Ende eines Sabotage Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg push ENTWARNUNG: Alle Manipulationen wurden beseitigt!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTampered-on====&lt;br /&gt;
Befehle die bei einem Sabotage Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%TAMPEREDCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push ACHTUNG: %TAMPEREDHR% $is sabotiert!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered====&lt;br /&gt;
Befehle die beim Anfang/Ende eines Alarms ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-off====&lt;br /&gt;
Befehle die beim Ende eines Alarms ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg ENTWARNUNG: Alle Alarme sind beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDalarmTriggered-on====&lt;br /&gt;
Befehle die bei einem Alarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $is = &amp;quot;ist&amp;quot;;&lt;br /&gt;
   $is = &amp;quot;sind&amp;quot; if (%ALARMCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg audio,push,light 3 !!! ALARM !!! %ALARMHR% $is ausgelöst!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome====&lt;br /&gt;
Befehle die beim on/off von anyoneElseAtHome ausgeführt werden sollen.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-off====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armaway&amp;quot; auf &amp;quot;armhome&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome on&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun niemand anderes mehr zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDanyoneElseAtHome-on====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von &amp;quot;armhome&amp;quot; auf &amp;quot;armaway&amp;quot; umgeschaltet damit evtl. vorhandene Bewegungsmelder wieder Alarme melden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Wird anyoneElseAtHome bei Anwesenheit und nicht deaktiviertem HomeAutoAlarmModes aktiviert, so passiert erst einmal nichts, ausser dass die hier angegebenen Befehle ausgeführt werden. Wird dann später die Abwesenheit erkannt, schaltet der Alarm Mode auf &amp;quot;armhome&amp;quot; statt auf &amp;quot;armaway&amp;quot; damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: anyoneElseAtHome off&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg HINWEIS: Es ist nun noch jemand anderes zu Hause!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDbatteryLow====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Sensor einen niedrigen Batteriewert meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg;&lt;br /&gt;
   $msg = &amp;quot;Die Batterien von %BATTERYLOW% gehen zur Neige und sollten ausgetauscht werden!&amp;quot; if (%BATTERYLOWCT% == 1);&lt;br /&gt;
   $msg = &amp;quot;Die Batterien bei folgenden Geräten sollten ausgetauscht werden: %BATTERYLOWALL%&amp;quot; if (%BATTERYLOWCT% &amp;gt; 1);&lt;br /&gt;
   fhem &amp;quot;msg push $msg&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontact====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor geschlossen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geschlossen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor offen meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor open/tilted&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun offen!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormain====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted/closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor Type doormain open/tilted/closed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun %STATE%!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainClosed====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain closed meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain wird geschlossen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 { &lt;br /&gt;
   # Wenn es Ankommende gibt&lt;br /&gt;
   if (&amp;quot;%ARRIVERS%&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Zusammenstellen der Begrüßung&lt;br /&gt;
     my $msg = &amp;quot;Gute&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # &amp;quot;n&amp;quot; anhängen wenn Tageszeit nicht Nacht ist&lt;br /&gt;
     $msg .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Leerzeichen einfügen&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # den Feiertag der Tageszeit voranstellen wenn ein Feiertag im Kalender FEIERTAG ist&lt;br /&gt;
     $msg .= &amp;quot;%FEIERTAG%-&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Tageszeit einfügen&lt;br /&gt;
     $msg .= &amp;quot;%DAYTIME% &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # bei ROOMMATE &amp;quot;zu Hause&amp;quot; in Begrüßung einfügen&lt;br /&gt;
     $msg .= &amp;quot;zu Hause &amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; =~ /^rr_/);&lt;br /&gt;
 &lt;br /&gt;
     # Ankommende einfügen&lt;br /&gt;
     $msg .= &amp;quot;%ARRIVERS%&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Begrüßung am Sonos im Flur ausgeben bei Abwesenheit über 60 min&lt;br /&gt;
     fhem &amp;quot;msg audio \@fl_Sonos $msg!&amp;quot; if (%DURABSENCELAST% &amp;gt; 60);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactDoormainOpen====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted meldet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Kontaktsensor vom Typ doormain geöffnet&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $a = &amp;quot;%ALIAS%&amp;quot;;&lt;br /&gt;
   $a =~ s/d/D/;&lt;br /&gt;
   fhem &amp;quot;msg $a ist nun geöffnet!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning1====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die erste Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: erste Offenwarnzeit des Kontakts erreicht&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarning2====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die zweite Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: ab Erreichen der zweiten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio %ALIAS% steht immer noch offen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDcontactOpenWarningLast====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die letzte Offenwarnzeit erreicht hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Die speziellen Platzhalter &#039;&#039;&#039;%ALIAS%&#039;&#039;&#039;, &#039;&#039;&#039;%SENSOR%&#039;&#039;&#039; und &#039;&#039;&#039;%STATE%&#039;&#039;&#039; können in diesem Attribut benutzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Erreichen der letzten Offenwarnzeit des Kontakts&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das ist der letzte Hinweis %ALIAS% endlich zu schliessen!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald sich die Tageszeit (daytime) auf einen beliebigen Wert ändert.&amp;lt;br&amp;gt;&lt;br /&gt;
Um die jeweilige eingetretene Tageszeit zu ermitteln ist der Platzhalter &#039;&#039;&#039;%DAYTIME%&#039;&#039;&#039; vorgesehen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime)&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdaytime-&amp;amp;lt;DAYTIME&amp;amp;gt;====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald die jeweilige Tageszeit (daytime) erreicht ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung der Tageszeit (daytime) auf bestimmten Wert&amp;lt;br&amp;gt;&lt;br /&gt;
Bei &amp;quot;night&amp;quot; könnte man z.B. die Heizung bewohnerunabhängig ausschalten, bei &amp;quot;morning&amp;quot; wieder ein.&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceDisable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät deaktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceDisable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun deaktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional wirklich attr disable für Device setzen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;attr %DEVICE%:FILTER=disable!=1 disable 1; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf gone/none setzen wenn Presence Devices deaktiviert werden&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     my $resident = $1;&lt;br /&gt;
     my $gone = $resident =~ /^rr_/ ? &amp;quot;gone&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
     fhem &amp;quot;set $resident:FILTER=state!=$gone state $gone&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdeviceEnable====&lt;br /&gt;
Befehle die ausgeführt werden sollen sobald ein Gerät aktiviert wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: &#039;set deviceEnable &amp;amp;lt;DEVICE&amp;amp;gt;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   speak &amp;quot;Das Gerät %ALIAS% ist nun aktiviert!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # optional attr disable für Device entfernen und Konfig speichern&lt;br /&gt;
   #fhem &amp;quot;deleteattr %DEVICE%:FILTER=disable=1 disable; save&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # ROOMMATE/GUEST auf home setzen wenn Presence Devices aktiviert werden und anwesend sind&lt;br /&gt;
   if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE\d?_(r[rg]_.*)/)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $1:FILTER=state!=home state home&amp;quot; if (ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) eq &amp;quot;present&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd====&lt;br /&gt;
Befehle die beim Anfang/Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%DND%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun eingeschaltet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Der DND Modus ist nun beendet!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-off====&lt;br /&gt;
Befehle die beim Ende des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDdnd-on====&lt;br /&gt;
Befehle die beim Beginn des DND Modus ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn des DND Modus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Der DND Modus ist nun eingeschaltet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent====&lt;br /&gt;
Befehle die beim Beginn eines beliebigen (holiday)Kalender Events ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%CALENDAR%&#039;&#039;&#039;, &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten on&amp;quot; if (&amp;quot;%EVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-each====&lt;br /&gt;
Befehle die beim Beginn/Ende eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%EVENT%&#039;&#039;&#039; und &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; können zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   fhem &amp;quot;set Weihnachten off&amp;quot; if (&amp;quot;%PREVEVENT%&amp;quot; eq &amp;quot;Weihnachten&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-URLAUBDAN-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Dan hat jetzt Urlaub!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /urlaub/i)&lt;br /&gt;
   {&lt;br /&gt;
     speak &amp;quot;Der Urlaub von Dan ist nun zu Ende!!!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-WOHNUNG-each&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Heizung an/aus schalten&lt;br /&gt;
   my $heiz = &amp;quot;([bksw]z|ku)_Thermostat&amp;quot;;&lt;br /&gt;
   if (&amp;quot;%EVENT%&amp;quot; =~ /^heizung(..+)?$/i)&lt;br /&gt;
   {&lt;br /&gt;
     my $zeit = $1;&lt;br /&gt;
     if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
 &lt;br /&gt;
       # morgens nicht alle Thermostaten schalten&lt;br /&gt;
       $heiz = &amp;quot;([bks]z|ku)_Thermostat&amp;quot; if ($zeit &amp;amp;&amp;amp; $zeit =~ /morgens?$/i);&lt;br /&gt;
       fhem &amp;quot;set $heiz:FILTER=controlMode!=day controlMode day&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^heizung/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set $heiz:FILTER=controlMode!=night controlMode night&amp;quot; if (&amp;quot;%SEASON%&amp;quot; ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # WLAN an/aus schalten&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi off&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^wlan|wifi|wi-fi/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set Router wifi on&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Putzfrau (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /^putz/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Inge&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   # G-Tag für Gast (de)aktivieren&lt;br /&gt;
   elsif (&amp;quot;%EVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceEnable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   elsif (&amp;quot;%PREVEVENT%&amp;quot; =~ /g([aä]|ae)st/i)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;set %NAME% deviceDisable PRESENCE_rg_Gast&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-begin====&lt;br /&gt;
Befehle die beim Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDevent-FEIERTAGE-Neujahr-begin&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set %SENSORSENERGY% meterReset&lt;br /&gt;
&lt;br /&gt;
====HomeCMDevent-&amp;amp;lt;KALENDER&amp;amp;gt;-&amp;amp;lt;EVENT&amp;amp;gt;-end====&lt;br /&gt;
Befehle die bei Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs&amp;lt;br&amp;gt;&lt;br /&gt;
Platzhalter &#039;&#039;&#039;%PREVEVENT%&#039;&#039;&#039; kann zusätzlich verwendet werden&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemDEFINED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn ein neues Gerät angelegt wird (define)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Jedem neu definierten Gerät den Geräte-TYPE auch als Raum im Menüpunkt Module zuweisen&lt;br /&gt;
   fhem &amp;quot;attr %DEFINED% room Module-&amp;gt;&amp;quot;.$defs{&amp;quot;%DEFINED%&amp;quot;}-&amp;gt;{TYPE};&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemINITIALIZED====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn FHEM gestartet wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg FHEM Home wurde gestartet...&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemSAVE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn in FHEM die Konfigurationsdatei gespeichert wird&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel (Backup von fhem.cfg und fhem.state):&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Datum/Uhrzeit&lt;br /&gt;
   my $now = Timeow();&lt;br /&gt;
   # Leerzeichen durch Unterstriche ersetzen&lt;br /&gt;
   $now =~ s/ /_/g;&lt;br /&gt;
   # Backup der Datei fhem.cfg&lt;br /&gt;
   `cp $attr{global}{configfile} ./backup/fhem.cfg.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.cfg.$now&amp;quot;;&lt;br /&gt;
   # Backup der Datei fhem.state&lt;br /&gt;
   `cp $attr{global}{statefile} ./backup/fhem.state.$now`;&lt;br /&gt;
   # Log-Ausgabe der gespeicherten Datei&lt;br /&gt;
   Log3 undef,3,&amp;quot;saved ./backup/fhem.state.$now&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDfhemUPDATE====&lt;br /&gt;
Befehle die ausgeführt werden sollen wenn das Update von FHEM ausgeführt wurde&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Das Update für FHEM ist beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning====&lt;br /&gt;
Befehle die bei Anfang/Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0/1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (%ICE%)&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg push ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     fhem &amp;quot;msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!.&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-off====&lt;br /&gt;
Befehle die bei Ende der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 0&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDicewarning-on====&lt;br /&gt;
Befehle die bei Beginn der Eiswarnung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: icewarning 1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg audio ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation====&lt;br /&gt;
Befehle die beim Ändern der location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDlocation-&amp;amp;lt;LOCATION&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf eine bestimmte location ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmte location&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode====&lt;br /&gt;
Befehle die beim Ändern von mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-absent-belated====&lt;br /&gt;
Befehle die nachträglich zur Abwesenheit ausgeführt werden sollen, die Zeit kann im Atteribut &amp;quot;HomeModeAbsentBelatedTime&amp;quot; eingestellt werden&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Abwesenheit + XX min&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten mode&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-absent&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set HarmonyHub:FILTER=activity!=PowerOff activity PowerOff;&lt;br /&gt;
 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 set TYPE=SONOSPLAYER:FILTER=Volume&amp;gt;0 Volume 0;&lt;br /&gt;
 set Sonos stopAll;&lt;br /&gt;
 sleep 3;&lt;br /&gt;
 set Wohnung [FILTER=state!=off] off&amp;quot;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 define atTmp_wz_Media_aus_%SELF% at +01:00:00 set HarmonyHub:FILTER=currentActivity!=PowerOff activity PowerOff;&lt;br /&gt;
 define atTmp_wz_Venti_aus_%SELF% at +01:00:00 set wz_Ventilator:FILTER=speed!=0 speed 0;&lt;br /&gt;
 define atTmp_wzLS_aus_%SELF% at +00:30:00 set wz_LS scene aus;&lt;br /&gt;
 define atTmp_all_Sonos_vol_down_%SELF% at +00:02:00 set TYPE=SONOSPLAYER:FILTER=Volume!=0 Volume 0 1;&lt;br /&gt;
 define atTmp_all_Sonos_off_%SELF% at +00:02:30 set Sonos stopAll;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=off off;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode night&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set [sw]z_Auto(Music|Light):FILTER=state!=on on&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-gone&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlManu off&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen beliebigen Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von beliebigem Resident ausgelöst&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-asleep-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 msg audio @%AUDIO% Guten Nacht und schlaf&#039; gut %ALIAS%!&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmode-awoken-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $msg = &amp;quot;Guten&amp;quot;;&lt;br /&gt;
   $msg .= &amp;quot; %FEIERTAG%&amp;quot; if (&amp;quot;%FEIERTAG%&amp;quot;);&lt;br /&gt;
   $msg .= &amp;quot; Morgen %ALIAS%&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;msg audio \@%AUDIO% $msg&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;defmod atTmp_wetter_%RESIDENT%_%SELF% at +00:07:00 msg audio Wettervorhersage für heute: %FORECASTTODAY%&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmode-&amp;amp;lt;MODE&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen bestimmten Resident, ausgeführt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung mode von bestimmten Resident ausgelöst&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm====&lt;br /&gt;
Befehle die beim Ändern von modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung modeAlarm&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmodeAlarm-&amp;amp;lt;armaway/armhome/armnight/disarm&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung auf einen bestimmten modeAlarm ausgeführt werden sollen.&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung auf bestimmten modeAlarm&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armaway&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   if (&amp;quot;%PREVAMODE%&amp;quot; eq &amp;quot;disarm&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Alarmanlage einschalten&lt;br /&gt;
     fhem &amp;quot;set AA_Arm:FILTER=level!=100 alarmLevel armAll&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht zusammensetzen&lt;br /&gt;
     my $msg;&lt;br /&gt;
     $msg .= &amp;quot;Die Alarmanlage ist nun scharf geschaltet!&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
     my $is = &amp;quot;%ALARMHR%&amp;quot; =~ /und/ ? &amp;quot;sind&amp;quot; : &amp;quot;ist&amp;quot;;&lt;br /&gt;
     $msg .= &amp;quot; &amp;quot; if ($msg);&lt;br /&gt;
     $msg .= &amp;quot;ACHTUNG: %ALARMHR% $is noch offen!!!&amp;quot; if (%ALARMCT%);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an ROOMMATE/GUEST senden&lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 &lt;br /&gt;
     # Eingangstür abschließen falls noch nicht geschehen&lt;br /&gt;
     fhem &amp;quot;set fl_Tuerschloss:FILTER=state!=locked lock&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armhome&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-armnight&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 AA_Arm:FILTER=level!=25 alarmLevel armExtSens;&lt;br /&gt;
 set fl_Tuerschloss:FILTER=state!=locked lock&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDmodeAlarm-disarm&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Alarmanlage ausschalten&lt;br /&gt;
   fhem &amp;quot;set AA_Arm:FILTER=level!=0 alarmLevel disarmed&amp;quot;;&lt;br /&gt;
   my $prio = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   # Nachrichtenpriorität auf 1 setzen bei Ankunft (höhere Lautstärke beim Abspielen damit man das auch vor der Tür hört)&lt;br /&gt;
   $prio = &amp;quot; 1&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; eq &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht an ROOMMATE/GUEST senden wenn der vorherige alarmMode nicht &amp;quot;armnight&amp;quot; ist&lt;br /&gt;
   fhem &amp;quot;msg audio \@fl_Sonos$prio Die Alarmanlage ist nun ausgeschaltet %ALIAS%!&amp;quot; if (&amp;quot;%PREVAMODE%&amp;quot; ne &amp;quot;armnight&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion====&lt;br /&gt;
Befehle die bei Statusänderung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: öffnen/schließen eines beliebigen Bewegungsmelders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Raum aus Sensornamen ermitteln, z.B. bz_Sensor&lt;br /&gt;
   my $room = (split /_/,&amp;quot;%SENSOR%&amp;quot;)[0];&lt;br /&gt;
 &lt;br /&gt;
   # Status des structure aller Lichter dieses Raums&lt;br /&gt;
   my $lichter = Value($room.&amp;quot;_Lichter&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Status des dummy Tageslicht&lt;br /&gt;
   my $tl = Value(&amp;quot;Tageslicht&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   if (&amp;quot;%STATE%&amp;quot; eq &amp;quot;geöffnet&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Lichtwert des Sensors&lt;br /&gt;
     my $lum = ReadingsNum(&amp;quot;%SENSOR%&amp;quot;,&amp;quot;luminance&amp;quot;,100);&lt;br /&gt;
 &lt;br /&gt;
     # Löschen des evtl. schon vorhandenen &amp;quot;at&amp;quot;&lt;br /&gt;
     fhem &amp;quot;delete atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot; if (IsDevice(&amp;quot;atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF%&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
     # Licht nur wenn kein Tageslicht oder Lichtwert des Sensors kleiner als 10 und AutoLight eingeschaltet und modeAlarm nicht armaway&lt;br /&gt;
     if (($tl eq &amp;quot;off&amp;quot; || $lum &amp;lt; 10) &amp;amp;&amp;amp; $lichter eq &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot; &amp;amp;&amp;amp; &amp;quot;%AMODE%&amp;quot; ne &amp;quot;armaway&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $scene;&lt;br /&gt;
 &lt;br /&gt;
       # verschiedene Szenen für verschiedene Modus bzw. Aussenlichtstärken&lt;br /&gt;
       if (&amp;quot;%MODE%&amp;quot; eq &amp;quot;gotosleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Abend&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (&amp;quot;%MODE%&amp;quot; eq &amp;quot;asleep&amp;quot;)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;Nacht&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;gt; 3)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;viel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
       elsif (%LIGHT% &amp;lt; 4)&lt;br /&gt;
       {&lt;br /&gt;
         $scene = &amp;quot;mittel&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       # Schalten der entsprechenden Szene (Modul LightScene)&lt;br /&gt;
       fhem &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene $scene&amp;quot; if ($scene);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     # unterschiedliche Ausschaltzeiten für unterschiedliche Räume&lt;br /&gt;
     my $t = 3;&lt;br /&gt;
     $t = 15 if ($room eq &amp;quot;wz&amp;quot;);&lt;br /&gt;
     $t = 2 if ($room eq &amp;quot;bz&amp;quot; || ($room =~ /wz|ku/ &amp;amp;&amp;amp; &amp;quot;%MODE%&amp;quot; =~ /sleep/));&lt;br /&gt;
     $t = 1 if ($room eq &amp;quot;fl&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Zahl in Minuten umrechnen in einen Zeitpunkt für das &amp;quot;at&amp;quot;&lt;br /&gt;
     my $d = HOMEMODE_hourMaker($t);&lt;br /&gt;
 &lt;br /&gt;
     # Anlegen des &amp;quot;at&amp;quot; zum Ausschalten des Lichts wenn die Lichter angeschaltet sind und auch AutoLight eingeschaltet ist&lt;br /&gt;
     if ($lichter ne &amp;quot;off&amp;quot; &amp;amp;&amp;amp; Value($room.&amp;quot;_AutoLight&amp;quot;) eq &amp;quot;on&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
       my $cmd = &amp;quot;set &amp;quot;.$room.&amp;quot;_LS scene aus&amp;quot;;&lt;br /&gt;
       fhem &amp;quot;defmod atTmp_Bewegungsmelder_Licht_aus_&amp;quot;.$room.&amp;quot;_%SELF% at +$d $cmd&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-off====&lt;br /&gt;
Befehle die bei Ende der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDmotion-on====&lt;br /&gt;
Befehle die bei Beginn der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der Bewegung eines beliebigen Bewegungsmelders&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 set w_Steckdosen [FILTER=state!=on] on;&lt;br /&gt;
 set Heizungen [FILTER=controlManu!=off] controlMode auto&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-device====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein beliebiges Presence Device, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebiges Presence Device&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-present-device&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # mindestens 1x täglich den Batteriewert des PRESENCE Geräts bei erkannter Anwesenheit holen&lt;br /&gt;
   fhem &#039;&amp;quot;sudo /opt/fhem/scripts/GTag-bat.sh %DEVICE% %ADDRESS% &amp;amp;&amp;quot;&#039;&lt;br /&gt;
     if (&amp;quot;%DEVICE%&amp;quot; =~ /^PRESENCE_/ &amp;amp;&amp;amp; (!defined ReadingsVal(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,undef) || ReadingsAge(&amp;quot;%DEVICE%&amp;quot;,&amp;quot;battery&amp;quot;,0) &amp;gt; 64800));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-resident====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen beliebigen Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch beliebigen Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel für &amp;quot;HomeCMDpresence-absent-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # Mich benachrichtigen wenn ich nicht zu hause bin und jemand anderes die Wohnung verlässt&lt;br /&gt;
   fhem &amp;quot;msg push \@rr_Dan %ALIAS% hat gerade die Wohnung verlassen!&amp;quot;&lt;br /&gt;
     if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot; &amp;amp;&amp;amp; ReadingsVal(&amp;quot;rr_Dan&amp;quot;,&amp;quot;presence&amp;quot;,&amp;quot;&amp;quot;) ne &amp;quot;present&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Verabschiedungsnachricht zusammensetzen&lt;br /&gt;
   my $msg;&lt;br /&gt;
 &lt;br /&gt;
   # Alle außer mich selbst verabschieden&lt;br /&gt;
   $msg .= &amp;quot;Bis bald und auf Wiedersehen %ALIAS%...&amp;quot; if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   # Glättewarnung wenn nötig&lt;br /&gt;
   $msg .= &amp;quot; ACHTUNG!!! Es ist %TEMPERATURE%°C kalt! Somit könnte es glatt werden!&amp;quot; if (%ICE%);&lt;br /&gt;
 &lt;br /&gt;
   # Nachricht senden wenn vorhanden&lt;br /&gt;
   fhem &amp;quot;msg \@%RESIDENT% $msg&amp;quot; if ($msg);&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;&#039;Beispielcode für &amp;quot;HomeCMDpresence-present-resident&amp;quot;:&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   # alle Ankommenden außer mir selbst&lt;br /&gt;
   if (&amp;quot;%RESIDENT%&amp;quot; ne &amp;quot;rr_Dan&amp;quot;)&lt;br /&gt;
   {&lt;br /&gt;
     # Benachrichtigung wenn jemand kommt&lt;br /&gt;
     fhem &amp;quot;msg audio %ALIAS% kommt gerade!&amp;quot; if (&amp;quot;%LOCATION%&amp;quot; ne &amp;quot;arrival&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) zusammensetzen&lt;br /&gt;
     my $g = &amp;quot;gute&amp;quot;;&lt;br /&gt;
     $g .= &amp;quot;n&amp;quot; if (&amp;quot;%DAYTIME%&amp;quot; ne &amp;quot;Nacht);&lt;br /&gt;
 &lt;br /&gt;
     # Nachricht an Ankommende(n) senden &lt;br /&gt;
     fhem &amp;quot;msg \@%RESIDENT% Willkommen und $g %DAYTIME% %ALIAS%!&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch einen bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmten Resident&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HomeCMDpresence-&amp;amp;lt;absent/present&amp;amp;gt;-&amp;amp;lt;ROOMMATE/GUEST&amp;amp;gt;-&amp;amp;lt;DEVICE&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung von presence, ausgelöst durch ein bestimmtes Presence Device eines bestimmten Resident, ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Dieses Attribut ist nur verfügbar wenn ein Resident mehr als ein Presence Device hat&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung presence, ausgelöst durch bestimmtes Presence Device eines bestimmten Resident&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Jahreszeit&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel&#039;&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
   my $t = &amp;quot;%SEASON%&amp;quot;;&lt;br /&gt;
   $t .= &amp;quot;s&amp;quot; if ($t eq &amp;quot;Frühling&amp;quot;);&lt;br /&gt;
   fhem &amp;quot;msg push Die Wohnung ist nun im $t-Modus!&amp;quot;;&lt;br /&gt;
   fhem &amp;quot;set Heizungen [FILTER=controlMode!=auto] controlMode auto&amp;quot; if ($t ne &amp;quot;Sommer&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====HomeCMDseason-&amp;amp;lt;SEASON&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung der Jahreszeit in eine bestimmte Jahreszeit ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung bestimmte Jahreszeit&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight====&lt;br /&gt;
Befehle die bei Änderung der Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDtwilight-&amp;amp;lt;sr/sr_astro/sr_civil/sr_indoor/sr_weather/ss/ss_astro/ss_civil/ss_indoor/ss_weather&amp;amp;gt;====&lt;br /&gt;
Befehle die bei Änderung zu bestimmter Dämmerung ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Änderung zu bestimmter Dämmerung&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn====&lt;br /&gt;
Befehle die bei Beginn/Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn/Ende der UWZ Warnungen&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-begin====&lt;br /&gt;
Befehle die bei Beginn der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Beginn der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg %UWZLONG%&lt;br /&gt;
&lt;br /&gt;
====HomeCMDuwz-warn-end====&lt;br /&gt;
Befehle die beim Ende der UWZ Warnungen ausgeführt werden sollen&amp;lt;br&amp;gt;&lt;br /&gt;
Auslöser: Ende der UWZ Warnungen&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&lt;br /&gt;
 msg Alle Unwetterwarnungen sind nun beendet!&lt;br /&gt;
&lt;br /&gt;
=Platzhalter=&lt;br /&gt;
==verfügbar in allen HomeCMD Attributen==&lt;br /&gt;
===%ADDRESS%===&lt;br /&gt;
MAC Adresse des zuletzt ausgelösten Presence Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALARM%===&lt;br /&gt;
Liste mit Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&lt;br /&gt;
&lt;br /&gt;
===%ALARMCT%===&lt;br /&gt;
Anzahl der ausgelösten Alarm Geräte&lt;br /&gt;
&lt;br /&gt;
===%ALARMHR%===&lt;br /&gt;
Liste mit (human readable) Namen der ausgelösten Alarm Geräte&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 0 wenn kein Alarm Device ausgelöst ist&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für msg benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
Alias des zuletzt ausgelösten Resident&lt;br /&gt;
&lt;br /&gt;
===%AMODE%===&lt;br /&gt;
aktueller Alarm Mode&lt;br /&gt;
&lt;br /&gt;
===%AEAH%===&lt;br /&gt;
Wert von anyoneElseAtHome&amp;lt;br&amp;gt;&lt;br /&gt;
Wert ist 1 wenn on und 0 wenn off&lt;br /&gt;
&lt;br /&gt;
===%ARRIVERS%===&lt;br /&gt;
Alias-Liste der ROOMMATE/GUEST deren location auf arrival steht&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Residents zu begrüßen&amp;lt;br&amp;gt;&lt;br /&gt;
z.B. Peter, Paul und Marry&lt;br /&gt;
&lt;br /&gt;
===%AUDIO%===&lt;br /&gt;
Audio Device des zuletzt ausgelösten ROOMMATE/GUEST (Attribut msgContactAudio)&amp;lt;br&amp;gt;&lt;br /&gt;
wenn das Attribut msgContactAudio des jeweiligen Resident keinen Wert hat, so wird versucht den Wert des Attributs aus dem globalMsg (sofern vorhanden) auszulesen&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Resident spezifische msg(s) vom Typ audio zu senden, z.B. Nacht/Morgen Grüße/Wünsche&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOW%===&lt;br /&gt;
Alias des zu letzt gemeldeten Geräts mit niedrigem Batteriestand&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWALL%===&lt;br /&gt;
Wert des Reading batteryLow_hr&lt;br /&gt;
&lt;br /&gt;
===%BATTERYLOWCT%===&lt;br /&gt;
Wert des Reading batteryLow_ct&lt;br /&gt;
&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Reading condition des überwachten Yahoo weather Device&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. für Wetter(vorhersage) benutzt werden&lt;br /&gt;
&lt;br /&gt;
===%CONTACT%===&lt;br /&gt;
Wert des Reading lastContact (Name des zuletzt geöffneten Kontakt Sensor)&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um msg zu versenden&lt;br /&gt;
&lt;br /&gt;
===%DAYTIME%===&lt;br /&gt;
Wert des Reading daytime&amp;lt;br&amp;gt;&lt;br /&gt;
kann z.B. dafür benutzt werden um Tageszeit spezifische Aktionen zu schalten&lt;br /&gt;
&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
Name des zuletzt ausgelösten Presence Gerät&lt;br /&gt;
&lt;br /&gt;
===%DEVICEA%===&lt;br /&gt;
Wert des Reading lastAbsentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DEVICEP%===&lt;br /&gt;
Wert des Reading lastPresentByPresenceDevice&lt;br /&gt;
&lt;br /&gt;
===%DISABLED%===&lt;br /&gt;
Wert des Reading devicesDisabled&lt;br /&gt;
&lt;br /&gt;
===%DND%===&lt;br /&gt;
DND Status&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn an, 0 wenn aus&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCE%===&lt;br /&gt;
Wert des Reading durTimerAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURABSENCELAST%===&lt;br /&gt;
Wert des Reading lastDurAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCE%===&lt;br /&gt;
Wert des Reading durTimerPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURPRESENCELAST%===&lt;br /&gt;
Wert des Reading lastDurPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEP%===&lt;br /&gt;
Wert des Reading durTimerSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%DURSLEEPLAST%===&lt;br /&gt;
Wert des Reading lastDurSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME&amp;gt;%===&lt;br /&gt;
Event des benannten Kalenders&amp;lt;br&amp;gt;&lt;br /&gt;
0 wenn kein gerade kein Event ist&lt;br /&gt;
&lt;br /&gt;
===%&amp;lt;CALENDARNAME-EVENTNAME&amp;gt;%===&lt;br /&gt;
0 wenn das benannte Event nicht aktiv ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn das benannte Event aktiv ist&lt;br /&gt;
&lt;br /&gt;
===%FORECAST%===&lt;br /&gt;
Wettervorhersage für morgen&lt;br /&gt;
&lt;br /&gt;
===%FORECASTTODAY%===&lt;br /&gt;
Wettervorhersage für heute&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITY%===&lt;br /&gt;
Wert des Reading humidity von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%HUMIDITYTREND%===&lt;br /&gt;
Wert des Reading humidityTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%ICE%===&lt;br /&gt;
0 wenn keine Eiswarnung besteht&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn Eiswarnung besteht&lt;br /&gt;
&lt;br /&gt;
===%IP%===&lt;br /&gt;
Wert des Reading publicIP von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LIGHT%===&lt;br /&gt;
Wert des Reading light von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATION%===&lt;br /&gt;
Wert des Reading location von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LOCATIONR%===&lt;br /&gt;
Wert des Reading location des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCE%===&lt;br /&gt;
Wert des Reading luminance von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%LUMINANCETREND%===&lt;br /&gt;
Wert des Reading luminanceTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%MODE%===&lt;br /&gt;
gerade aktiver Modus von HOMEMODE (Reading mode)&lt;br /&gt;
&lt;br /&gt;
===%MODEALARM%===&lt;br /&gt;
aktueller Alarm Mode (wie %AMODE%)&lt;br /&gt;
&lt;br /&gt;
===%MOTION%===&lt;br /&gt;
Wert des Reading lastMotion von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%NAME%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %SELF%)&lt;br /&gt;
&lt;br /&gt;
===%OPEN%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENCT%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%OPENHR%===&lt;br /&gt;
Wert des Reading contactsOutsideOpen_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PANIC%===&lt;br /&gt;
0 wenn panic ausgeschaltet ist&amp;lt;br&amp;gt;&lt;br /&gt;
1 wenn panic eingeschaltet ist&lt;br /&gt;
&lt;br /&gt;
===%RESIDENT%===&lt;br /&gt;
Name des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PRESENT%===&lt;br /&gt;
presence von HOMEMODE&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESENTR%===&lt;br /&gt;
presence des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
0 wenn absent&lt;br /&gt;
1 wenn present&lt;br /&gt;
&lt;br /&gt;
===%PRESSURE%===&lt;br /&gt;
Wert des Reading pressure von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PRESSURETREND%===&lt;br /&gt;
Wert des Reading pressureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVAMODE%===&lt;br /&gt;
vorheriger modeAlarm von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVCONTACT%===&lt;br /&gt;
vorheriger geöffneter Kontaktsensor&lt;br /&gt;
&lt;br /&gt;
===%PREVMODE%===&lt;br /&gt;
vorheriger mode von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%PREVMODER%===&lt;br /&gt;
vorheriger state des zu letzt ausgelösten ROOMMATE/GUEST&lt;br /&gt;
&lt;br /&gt;
===%PREVMOTION%===&lt;br /&gt;
vorheriger geöffneter Bewegungsmelder&lt;br /&gt;
&lt;br /&gt;
===%SEASON%===&lt;br /&gt;
Wert des Reading season von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SELF%===&lt;br /&gt;
Name des HOMEMODE Geräts selbst (identisch zu %NAME%)&lt;br /&gt;
&lt;br /&gt;
===%SENSORSBATTERY%===&lt;br /&gt;
Liste aus Internal SENSORSBATTERY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSCONTACT%===&lt;br /&gt;
Liste aus Internal SENSORSCONTACT&lt;br /&gt;
&lt;br /&gt;
===%SENSORSENERGY%===&lt;br /&gt;
Liste aus Internal SENSORSENERGY&lt;br /&gt;
&lt;br /&gt;
===%SENSORSMOTION%===&lt;br /&gt;
Liste aus Internal SENSORSMOTION&lt;br /&gt;
&lt;br /&gt;
===%SENSORSSMOKE%===&lt;br /&gt;
Liste aus Internal SENSORSSMOKE&lt;br /&gt;
&lt;br /&gt;
===%SMOKE%===&lt;br /&gt;
Wert des Reading alarmSmoke von HOMEMODE&lt;br /&gt;
0 wenn kein Alarm&lt;br /&gt;
&lt;br /&gt;
===%SMOKECT%===&lt;br /&gt;
Wert des Reading alarmSmoke_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%SMOKEHR%===&lt;br /&gt;
Wert des Reading alarmSmoke_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPERED%===&lt;br /&gt;
Wert des Reading sensorsTampered von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDCT%===&lt;br /&gt;
Wert des Reading sensorsTampered_ct von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TAMPEREDHR%===&lt;br /&gt;
Wert des Reading sensorsTampered_hr von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURE%===&lt;br /&gt;
Wert des Reading temperature von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TEMPERATURETREND%===&lt;br /&gt;
Wert des Reading temperatureTrend von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TOBE%===&lt;br /&gt;
are/sind oder is/ist der Wetterkondition&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHT%===&lt;br /&gt;
Wert des Reading twilight von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%TWILIGHTEVENT%===&lt;br /&gt;
aktuelles twilight Event&lt;br /&gt;
&lt;br /&gt;
===%UWZ%===&lt;br /&gt;
UWZ Warnlevel&lt;br /&gt;
&lt;br /&gt;
===%UWZLONG%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (lange Version)&lt;br /&gt;
&lt;br /&gt;
===%UWZSHORT%===&lt;br /&gt;
alle aktuellen UWZ Warnungen (kurze Version)&lt;br /&gt;
&lt;br /&gt;
===%WEATHER%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather short&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WEATHERLONG%===&lt;br /&gt;
Wert von &amp;quot;get &amp;lt;HOMEMODE&amp;gt; weather long&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===%WIND%===&lt;br /&gt;
Wert des Reading wind von HOMEMODE&lt;br /&gt;
&lt;br /&gt;
===%WINDCHILL%===&lt;br /&gt;
Wert des Reading wind_chill vom eingebundenen Yahoo Wetter Gerät&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDcontact, HomeCMDmotion und HomeCMDalarm Attributen==&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%SENSOR%===&lt;br /&gt;
name des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
===%STATE%===&lt;br /&gt;
state des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeTextWeatherForecast Attributen==&lt;br /&gt;
===%CONDITION%===&lt;br /&gt;
Wert des Readings condition des Yahoo Weather Geräts&lt;br /&gt;
&lt;br /&gt;
===%DAY%===&lt;br /&gt;
Tag der Wettervorhersage (1 - heute, 2 - morgen)&lt;br /&gt;
&lt;br /&gt;
===%HIGH%===&lt;br /&gt;
maximale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
===%LOW%===&lt;br /&gt;
minimale Temperatur der Wettervorhersage&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDevent Attributen==&lt;br /&gt;
===%CALENDAR%===&lt;br /&gt;
Name der Kalenders&lt;br /&gt;
&lt;br /&gt;
===%EVENT%===&lt;br /&gt;
aktuelles Event der Kalenders&lt;br /&gt;
&lt;br /&gt;
===%PREVEVENT%===&lt;br /&gt;
vorheriges Event der Kalenders&lt;br /&gt;
&lt;br /&gt;
==verfügbar in den HomeCMDdevice Attributen==&lt;br /&gt;
===%DEVICE%===&lt;br /&gt;
name der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
===%ALIAS%===&lt;br /&gt;
alias der deaktivierten Geräts&lt;br /&gt;
&lt;br /&gt;
=Benötigte Events=&lt;br /&gt;
Folgende Events werden von HOMEMODE ausgewertet bzw. werden benötigt damit HOMEMODE vollumfänglich funktionieren kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;DEVICE-TYPE&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;EVENT&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;RESIDENTS&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;ROOMMATE,GUEST&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wayhome&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSCONTACT}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsContactReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSMOTION}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;sabotageError&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsMotionReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSLUMINANCE}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;luminance&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsLuminanceReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSENERGY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;power&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;energy&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsPowerEnergyReadings&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;{SENSORSBATTERY}&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;battery&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorsBatteryReading&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomePresenceDeviceType&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;presence&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeYahooWeatherDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;wind&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeTwilightDevice&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;light&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;twilight&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;aktEvent&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;pressure&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorTemperatureOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;temperature&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorHumidityOutside&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;humidity&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorWindspeed&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeSensorAirpressure&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeEventsHolidayDevices&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;state&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;quot;HomeUWZ&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;WarnCount&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>DeeSPe</name></author>
	</entry>
</feed>