HOMEMODE: Unterschied zwischen den Versionen

Aus FHEMWiki
 
(101 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{
{{Infobox Modul
Infobox Modul
|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.
|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.
|ModType=h
|ModType=h
Zeile 12: Zeile 11:


=Allgemeines=
=Allgemeines=
Das Modul ''22_HOMEMODE.pm'' wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden.
Das Modul ''22_HOMEMODE.pm'' wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden.<br>
Die hier aufgeführte Anleitung entspricht dem Modul in Version 1.4.2.


Viele allgemein typische Automationen sind bereits fertig integriert.
Viele allgemein typische Automationen sind bereits fertig integriert.
Zeile 32: Zeile 32:
Hier ein paar Beispiele:
Hier ein paar Beispiele:
*Änderung des Zustands von ROOMMATE/GUEST Geräten anhand von PRESENCE Geräten
*Änderung des Zustands von ROOMMATE/GUEST Geräten anhand von PRESENCE Geräten
*Bereistellung von CMD Attributen für mögliche Events rund um den Heim-/Hausstatus
*Bereitstellung von CMD Attributen für mögliche Events rund um den Heim-/Hausstatus
*Bereistellung von Platzhaltern innerhalb der CMD Attribute, z.B. %MODE%, %SEASON% oder %PREVMODE% für die Werte der Readings mode, season und prevMode
*Bereitstellung von Platzhaltern innerhalb der CMD Attribute, z.B. %MODE%, %SEASON% oder %PREVMODE% für die Werte der Readings mode, season und prevMode
*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
*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
*Einbindung von Bewegungs Sensoren, für z.B. automatische Licht Schaltungen oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Bewegungs Sensor konfiguriert werden
*Einbindung von Bewegungs Sensoren, für z.B. automatische Licht Schaltungen oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Bewegungs Sensor konfiguriert werden
*Darstellungen und Auslösen von Sabotage Alarmen der eingebundenen Kontakt- und Bewegungssensoren
*Darstellungen und Auslösen von Sabotage Alarmen der eingebundenen Kontakt- und Bewegungssensoren
*Einbindung von jeweils einem Temperatur und Luftfeuchtigkeitssensor
*Einbindung von jeweils einem Temperatur und Luftfeuchtigkeitssensor
*Einbindung eines lokalen Yahoo Wetter Devices zur Ermittlung und Ausgabe der lokalen Wetterdaten und Erzeugung der Wettervorhersage
*Einbindung eines lokalen Wetter Devices zur Ermittlung und Ausgabe der lokalen Wetterdaten und Erzeugung der Wettervorhersage
*Einbindung von Power und Energy Sensoren zur Ermittlung der Gesamtmengen
*Einbindung von Power und Energy Sensoren zur Ermittlung der Gesamtmengen
*Einbindung von holiday Devices für spezielle im HOMEMODE Device verfügbar zu machende Events
*Einbindung von Calendar/holiday Devices für spezielle im HOMEMODE Device verfügbar zu machende Events
*von Uhrzeit abhängiger Anwesend-Modus
*von Uhrzeit abhängiger Anwesend-Modus
*Bewohner unabhängige Tageszeit-Modus
*Bewohner unabhängige Tageszeit-Modus
Zeile 78: Zeile 78:
schaltet den "Bitte nicht stören" Modus für die angegebenen Minuten ein<br>
schaltet den "Bitte nicht stören" Modus für die angegebenen Minuten ein<br>
kehrt danach zum vorherigen (tageszeitabhängigen) Modus zurück
kehrt danach zum vorherigen (tageszeitabhängigen) Modus zurück
set Home deviceDisable <DEVICE>
deaktiviert das Gerät für sämtliche HOMEMODE Automationen<br>
Platzhalter '''%DISABLED%''' ist in allen HomeCMD Attributen verfügbar<br>
Platzhalter '''%DEVICE%''' und '''%ALIAS%''' sind in allen HomeCMD Attributen verfügbar
set Home deviceEnable <DEVICE>
reaktiviert das Gerät für sämtliche HOMEMODE Automationen<br>
Platzhalter '''%DISABLED%''' ist in allen HomeCMD Attributen verfügbar<br>
Platzhalter '''%DEVICE%''' und '''%ALIAS%''' sind in allen HomeCMD Attributen verfügbar


  set Home location <arrival/home/bed/underway/wayhome>
  set Home location <arrival/home/bed/underway/wayhome>
Zeile 109: Zeile 119:
Liste von all/doorsinside/doorsoutside/doorsmain/outside/windows offenen Kontakten<br>
Liste von all/doorsinside/doorsoutside/doorsmain/outside/windows offenen Kontakten<br>
Platzhalter '''%OPEN%''', '''%OPENCT%''' und '''%OPENHR%''' sind in allen HomeCMD Attributen verfügbar
Platzhalter '''%OPEN%''', '''%OPENCT%''' und '''%OPENHR%''' sind in allen HomeCMD Attributen verfügbar
get Home devicesDisabled
Anzeige der für HOMEMODE deaktivierten Geräte<br>
Platzhalter '''%DISABLED%''' ist in allen HomeCMD Attributen verfügbar
get Home mode
Anzeige von mode<br>
Platzhalter '''%MODE%''' ist in allen HomeCMD Attributen verfügbar
get Home modeAlarm
Anzeige von modeAlarm<br>
Platzhalter '''%AMODE%''' und '''%MODEALARM%''' sind in allen HomeCMD Attributen verfügbar


  get Home publicIP
  get Home publicIP
Zeile 124: Zeile 146:
  get Home weatherForecast [TAG]
  get Home weatherForecast [TAG]
Wettervorhersage für angegebenen Tag<br>
Wettervorhersage für angegebenen Tag<br>
wenn kein Tag angegeben wird, so wird die Vorhersage für morgen (2) asugegeben<br>
wenn kein Tag angegeben wird, so wird die Vorhersage für morgen (2) ausgegeben<br>
Platzhalter '''%FORECAST%''' (morgen) und '''%FORECASTTODAY%''' (heute) sind in allen HomeCMD Attributen verfügbar
Platzhalter '''%FORECAST%''' (morgen) und '''%FORECASTTODAY%''' (heute) sind in allen HomeCMD Attributen verfügbar


Zeile 137: Zeile 159:
Diese Grundkonfiguration sollte immer als erstes erfolgen um entsprechend darauf weiter aufzubauen. Als zweiter Schritt ist dann die erweiterte Konfiguration angedacht.
Diese Grundkonfiguration sollte immer als erstes erfolgen um entsprechend darauf weiter aufzubauen. Als zweiter Schritt ist dann die erweiterte Konfiguration angedacht.


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 "Home" 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.
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 "Home" 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.


===Attribute===
===Attribute===
Zeile 146: Zeile 168:


====HomeAutoAlarmModes====
====HomeAutoAlarmModes====
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.<br>
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.<br>
Bei Modus "absent" des HOMEMODE Device wird automatisch auf "armaway" geschaltet.<br>
Bei Modus "absent" des HOMEMODE Device wird automatisch auf "armaway" geschaltet.<br>
Bei Modus "home" des HOMEMODE Device wird automatisch auf "disarm" geschaltet.<br>
Bei Modus "home" des HOMEMODE Device wird automatisch auf "disarm" geschaltet.<br>
Zeile 156: Zeile 178:
====HomeAutoArrival====
====HomeAutoArrival====
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 "arrival" 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 "arrival" gesetzt.<br>
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 "arrival" 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 "arrival" gesetzt.<br>
Nach Ablauf der hier eingestellten Minuten wechelt das jeweilige Device von "arrival" auf "home" sofern es noch die location "arrival" hat.<br>
Nach Ablauf der hier eingestellten Minuten wechselt das jeweilige Device von "arrival" auf "home", sofern es noch die location "arrival" hat.<br>
Werte: 0 bis 5999.9<br>
Werte: 0 bis 5999.9<br>
Standardwert: 0
Standardwert: 0


====HomeAutoAsleep====
====HomeAutoAsleep====
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 "asleep" setzt.<br>
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 "asleep" setzt.<br>
Werte: 0 bis 5999.9<br>
Werte: 0 bis 5999.9<br>
Standardwert: 0
Standardwert: 0


====HomeAutoAwoken====
====HomeAutoAwoken====
Ist hier ein Wert größer 0 angegeben, so wird beim Erwachen ("awoken" oder "home nach asleep") jedes ROOMMATE/GUEST dieser auf "awoken" gesetzt und ein Timer gestartet der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf "home" setzt.<br>
Ist hier ein Wert größer 0 angegeben, so wird beim Erwachen ("awoken" oder "home nach asleep") jedes ROOMMATE/GUEST dieser auf "awoken" gesetzt und ein Timer gestartet, der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf "home" setzt.<br>
Werte: 0 bis 5999.9<br>
Werte: 0 bis 5999.9<br>
Standardwert: 0
Standardwert: 0


====HomeAutoDaytime====
====HomeAutoDaytime====
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.<br>
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.<br>
Werte: 0 oder 1<br>
Werte: 0 oder 1<br>
Standardwert: 1
Standardwert: 1


====HomeResidentCmdDelay====
====HomeResidentCmdDelay====
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.<br>
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.<br>
Je genauer der Name des jeweiligen HomeCMD Attributs beschrieben wird, desto später wird dieser ausgeführt.<br>
Je genauer der Name des jeweiligen HomeCMD Attributs beschrieben wird, desto später wird dieser ausgeführt.<br>
Das heißt z.B. dass HomeCMDmode vor HomeCMDmode-absent und dieser wiederrum vor HomeCMDmode-absent-ROOMMATE/GUEST-NAME ausgeführt wird usw.<br>
Das heißt z.B. dass HomeCMDmode vor HomeCMDmode-absent und dieser wiederrum vor HomeCMDmode-absent-ROOMMATE/GUEST-NAME ausgeführt wird usw.<br>
Zeile 215: Zeile 237:
Werte: 0 oder 1<br>
Werte: 0 oder 1<br>
Standardwert: 0
Standardwert: 0
====HomeAutoPresenceSuppressState====
unterdrücke Anwesenheitsänderung in angegebenen State(s) der RESIDENTS<br>
z.B. für "mysteriös" verschwindende Anwesenheitsgeräte in der Nacht<br>
Werte: asleep|awoken|gotosleep<br>
Standardwert:


====HomePresenceDeviceType====
====HomePresenceDeviceType====
Zeile 227: Zeile 255:


===Attribute zum Hinzufügen weiterer Geräte===
===Attribute zum Hinzufügen weiterer Geräte===
====HomeEventsCalendarDevices====
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.<br>
''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.''<br>
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.<br>
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).<br>
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.<br>
Diese Devices stellen zusätzlich die Platzhalter '''%CALENDAR%''', '''%EVENT%''' und '''%PREVEVENT%''' in den HomeCMDevent Attributen zur Verfügung. '''%CALENDAR%''' wird dann durch den Namen, '''%EVENT%''' durch das aktuelle Event und '''%PREVEVENT%''' durch das vorherige Event des jeweiligen Kalenders ersetzt.<br>
Werte: frei wählbar<br>
Werteformat: Devspec von holiday/Calendar Geräten<br>
Standardwert:


====HomeEventsHolidayDevices====
====HomeEventsHolidayDevices====
Hier ist ein Devspec von holiday Device(s) anzugeben.<br>
Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.<br>
''Es wird empfohlen die holiday Dateien in Großbuchstaben anzulegen, da dann die daraus resultierenden Platzhalter ebenfalls Großbuchstaben sind und somit zu den anderen Platzhaltern passen.''
''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.''<br>
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt. Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.<br>
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.<br>
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).<br>
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.<br>
Diese Devices stellen zusätzlich die Platzhalter '''%CALENDAR%''', '''%EVENT%''' und '''%PREVEVENT%''' in den HomeCMDevent Attributen zur Verfügung. '''%CALENDAR%''' wird dann durch den Namen, '''%EVENT%''' durch das aktuelle Event und '''%PREVEVENT%''' durch das vorherige Event des jeweiligen Kalenders ersetzt.<br>
Diese Devices stellen zusätzlich die Platzhalter '''%CALENDAR%''', '''%EVENT%''' und '''%PREVEVENT%''' in den HomeCMDevent Attributen zur Verfügung. '''%CALENDAR%''' wird dann durch den Namen, '''%EVENT%''' durch das aktuelle Event und '''%PREVEVENT%''' durch das vorherige Event des jeweiligen Kalenders ersetzt.<br>
Werte: frei wählbar<br>
Werte: frei wählbar<br>
Werteformat: Devspec<br>
Werteformat: Devspec von holiday/Calendar Geräten<br>
Standardwert:
Standardwert:


Zeile 261: Zeile 302:
====HomeSensorsContact====
====HomeSensorsContact====
Hier können alle Kontakt Sensoren als Devspec hinterlegt werden.<br>
Hier können alle Kontakt Sensoren als Devspec hinterlegt werden.<br>
Diese Devices stellen zusätzlich die Platzhalter %ALIAS%, %SENSOR% und %STATE% in den HomeCMDcontact Attributen zur Verfügung. %ALIAS% wird dann durch den Alias, %SENSOR% durch den Namen und %STATE% durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.<br>
Diese Devices stellen zusätzlich die Platzhalter '''%ALIAS%''', '''%SENSOR%''' und '''%STATE%''' in den HomeCMDcontact Attributen zur Verfügung. '''%ALIAS%''' wird dann durch den Alias, '''%SENSOR%''' durch den Namen und '''%STATE%''' durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.<br>
Werte: frei wählbar<br>
Werte: frei wählbar<br>
Werteformat: Devspec<br>
Werteformat: Devspec<br>
Standardwert:<br>
Standardwert:<br>
''In meinem Falle sind das optische und magnetische Kontaktsensoren vom HomeMatic. HM-SEC-SCo und HM-SEC-SC-2.''<br>
''In meinem Falle sind das optische und magnetische Kontaktsensoren vom HomeMatic. HM-SEC-SCO und HM-SEC-SC-2.''<br>
''Darum ist bei mir als Devspec '''model=HM-SEC-SC(o|-2)''' eingetragen um alle diese Kontaktsensoren zu erfassen.''<br>
''Darum ist bei mir als Devspec '''model=HM-SEC-SC(O|-2)''' eingetragen um alle diese Kontaktsensoren zu erfassen.''<br>
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.<br>
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.<br>
Des weiteren werden beim Übernehmen dieses Attributs jedem Kontaktsensor folgende Attribute im Attribut userattr hinzugefügt:<br>
Des weiteren werden beim Übernehmen dieses Attributs jedem Kontaktsensor folgende Attribute im Attribut userattr hinzugefügt:<br>
Zeile 311: Zeile 352:


=====HomeOpenTimesDividers=====
=====HomeOpenTimesDividers=====
Leerzeichenseparierte Liste von 3 Offenwarnzeit Teilern.<br>
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.<br>
Der erste Wert ist für Herbst (autumn), der zweite Wert für Winter (winter) und der dritte Wert für Frühling (spring). Im Sommer wird immer die normale Zeit (Teiler 1) verwendet.<br>
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).<br>
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. "2 3 2" ergeben sich für Herbst und Frühling Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.<br>
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. "2 1 2 3" ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.<br>
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactOpenTimeDividers des HOMEMODE Device.<br>
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactOpenTimeDividers des HOMEMODE Device.<br>
Werte: frei wählbar<br>
Werte: frei wählbar<br>
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2 2.5 2<br>
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2 1 2 2.5<br>
Standardwert: 1 1 1
Standardwert:


=====HomeReadings=====
=====HomeReadings=====
Zeile 348: Zeile 389:


====HomeSensorsContactOpenTimeDividers====
====HomeSensorsContactOpenTimeDividers====
Leerzeichenseparierte Liste von 3 Offenwarnzeit Teilern.<br>
Leerzeichenseparierte Liste von Offenwarnzeit Teilern.<br>
Der erste Wert ist für Herbst (autumn), der zweite Wert für Winter (winter) und der dritte Wert für Frühling (spring). Im Sommer wird immer die normale Zeit (Teiler 1) verwendet.<br>
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).<br>
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. "2 3 2" ergeben sich für Herbst und Frühling Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.<br>
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. "2 1 2 3" ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.<br>
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeOpenTimesDividers in jedem Sensor überschrieben werden.<br>
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeOpenTimesDividers in jedem Sensor überschrieben werden.<br>
Werte: frei wählbar<br>
Werte: frei wählbar<br>
Werteformat: leerzeichenseparierte Liste von 3 Zahlen mit max. einer Kommmastelle, z.B. 2 2.5 2<br>
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 2 1 2 2.5 (für 4 Jahreszeiten)<br>
Standardwert: 1 1 1
Standardwert:


====HomeSensorsContactOpenTimeMin====
====HomeSensorsContactOpenTimeMin====
Zeile 378: Zeile 419:
====HomeSensorsMotion====
====HomeSensorsMotion====
Hier können alle Bewegungs Sensoren als Devspec hinterlegt werden.<br>
Hier können alle Bewegungs Sensoren als Devspec hinterlegt werden.<br>
Diese Devices stellen zusätzlich die Platzhalter %ALIAS%, %SENSOR% und %STATE% in den HomeCMDmotion Attributen zur Verfügung. %ALIAS% wird dann durch den Alias, %SENSOR% durch den Namen und %STATE% durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.<br>
Diese Devices stellen zusätzlich die Platzhalter '''%ALIAS%''', '''%SENSOR%''' und '''%STATE%''' in den HomeCMDmotion Attributen zur Verfügung. '''%ALIAS%''' wird dann durch den Alias, '''%SENSOR%''' durch den Namen und '''%STATE%''' durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.<br>
Werte: frei wählbar<br>
Werte: frei wählbar<br>
Werteformat: Devspec<br>
Werteformat: Devspec<br>
Zeile 471: Zeile 512:
====HomeTwilightDevice====
====HomeTwilightDevice====
Hier ist der Name des lokalen Twilight Device anzugeben.<br>
Hier ist der Name des lokalen Twilight Device anzugeben.<br>
Diese Device stellt zusätzlich die Platzhalter %LIGHT%, %TWILIGHT% und %TWILIGHTEVENT% in den HomeCMD Attributen zur Verfügung. %LIGHT% wird dann durch das Reading light, %TWILIGHT% durch das Reading twilight und %TWILIGHTEVENT% durch das aktuelle Twilight Event ersetzt.<br>
Diese Device stellt zusätzlich die Platzhalter '''%LIGHT%''', '''%TWILIGHT%''' und '''%TWILIGHTEVENT%''' in den HomeCMD Attributen zur Verfügung. '''%LIGHT%''' wird dann durch das Reading light, '''%TWILIGHT%''' durch das Reading twilight und '''%TWILIGHTEVENT%''' durch das aktuelle Twilight Event ersetzt.<br>
Werte: frei wählbar<br>
Werte: frei wählbar<br>
Werteformat: Devspec<br>
Werteformat: Devspec<br>
Zeile 483: Zeile 524:
Standardwert:
Standardwert:


====HomeYahooWeatherDevice====
====HomeWeatherDevice====
Hier ist der Name des lokalen Yahoo Weather Geräts anzugeben.<br>
Hier ist der Name des lokalen Weather Geräts anzugeben.<br>
Diese Device stellt zusätzlich einige Platzhalter zur Verfügung. Für die genaue Beschreibung derer siehe "Platzhalter".<br>
Diese Device stellt zusätzlich einige Platzhalter zur Verfügung. Für die genaue Beschreibung derer siehe "Platzhalter".<br>
Werte: frei wählbar<br>
Werte: frei wählbar<br>
Zeile 544: Zeile 585:
====HomeTextWeatherForecastInSpecDays====
====HomeTextWeatherForecastInSpecDays====
Text mit Platzhaltern für Wettervorhersage in 4-10 Tagen<br>
Text mit Platzhaltern für Wettervorhersage in 4-10 Tagen<br>
spezielle Platzhalter die nur in diesem Attribut gültig sind: %CONDITION%, %DAY%, %HIGH% und %LOW%<br>
spezielle Platzhalter die nur in diesem Attribut gültig sind: '''%CONDITION%''', '''%DAY%''', '''%HIGH%''' und '''%LOW%'''<br>
Werte: frei wählbar<br>
Werte: frei wählbar<br>
Werteformat: Text mit Platzhaltern<br>
Werteformat: Text mit Platzhaltern<br>
Zeile 553: Zeile 594:
====HomeTextWeatherForecastToday====
====HomeTextWeatherForecastToday====
Text mit Platzhaltern für Wettervorhersage für heute<br>
Text mit Platzhaltern für Wettervorhersage für heute<br>
spezielle Platzhalter die nur in diesem Attribut gültig sind: %CONDITION%, %DAY%, %HIGH% und %LOW%<br>
spezielle Platzhalter die nur in diesem Attribut gültig sind: '''%CONDITION%''', '''%DAY%''', '''%HIGH%''' und '''%LOW%'''<br>
Werte: frei wählbar<br>
Werte: frei wählbar<br>
Werteformat: Text mit Platzhaltern<br>
Werteformat: Text mit Platzhaltern<br>
Zeile 562: Zeile 603:
====HomeTextWeatherForecastTomorrow====
====HomeTextWeatherForecastTomorrow====
Text mit Platzhaltern für Wettervorhersage für morgen/übermorgen<br>
Text mit Platzhaltern für Wettervorhersage für morgen/übermorgen<br>
spezielle Platzhalter die nur in diesem Attribut gültig sind: %CONDITION%, %DAY%, %HIGH% und %LOW%<br>
spezielle Platzhalter die nur in diesem Attribut gültig sind: '''%CONDITION%''', '''%DAY%''', '''%HIGH%''' und '''%LOW%'''<br>
Werte: frei wählbar<br>
Werte: frei wählbar<br>
Werteformat: Text mit Platzhaltern<br>
Werteformat: Text mit Platzhaltern<br>
Zeile 575: Zeile 616:
Standardwert:<br>
Standardwert:<br>
'''Beispiel:'''
'''Beispiel:'''
  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.
  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.


====HomeTextWeatherShort====
====HomeTextWeatherShort====
Zeile 624: Zeile 665:
====HomeAtTmpRoom====
====HomeAtTmpRoom====
Diesen Raum zu temporäre at(s) hinzufügen die von HOMEMODE generiert werden<br>
Diesen Raum zu temporäre at(s) hinzufügen die von HOMEMODE generiert werden<br>
Werte: 0 bis 99999<br>
Werte: frei wählbar<br>
Werteformat: einzelne Zahl (gleiche Verzögerung für alle modeAlarm) oder 3 leerzeichenseparierte Zahlen für jeden modeAlarm (Reihenfolge: armaway armnight armhome)<br>
Werteformat: Wort<br>
Standardwert: 0
Standardwert:


====HomePresenceDeviceAbsentCount-<ROOMMATE/GUEST>====
====HomePresenceDeviceAbsentCount-<ROOMMATE/GUEST>====
Zeile 748: Zeile 789:
  {
  {
   my $is = "meldet";
   my $is = "meldet";
   $is = "melden" if ("%SMOKEHR%" =~ /und/);
   $is = "melden" if (%SMOKECT% > 1);
   fhem "msg push ACHTUNG: %SMOKEHR% $is Rauchalarm!";
   fhem "msg push ACHTUNG: %SMOKEHR% $is Rauchalarm!";
  }
  }
Zeile 767: Zeile 808:
  {
  {
   my $is = "ist";
   my $is = "ist";
   $is = "sind" if ("%TAMPEREDHR%" =~ /und/);
   $is = "sind" if (%TAMPEREDCT% > 1);
   fhem "msg push ACHTUNG: %TAMPEREDHR% $is sabotiert!";
   fhem "msg push ACHTUNG: %TAMPEREDHR% $is sabotiert!";
  }
  }
Zeile 786: Zeile 827:
  {
  {
   my $is = "ist";
   my $is = "ist";
   $is = "sind" if ("%ALARMHR%" =~ /und/);
   $is = "sind" if (%ALARMCT% > 1);
   fhem "msg audio,push,light 3 !!! ALARM !!! %ALARMHR% $is ausgelöst!";
   fhem "msg audio,push,light 3 !!! ALARM !!! %ALARMHR% $is ausgelöst!";
  }
  }
Zeile 812: Zeile 853:
'''Beispiel:'''
'''Beispiel:'''
  {
  {
   my $t;
   my $msg;
   $t = "Die Batterien von %BATTERYLOW% gehen zur Neige und sollten ausgetauscht werden!" if (%BATTERYLOWCT% == 1);
   $msg = "Die Batterien von %BATTERYLOW% gehen zur Neige und sollten ausgetauscht werden!" if (%BATTERYLOWCT% == 1);
   $t = "Die Batterien bei folgenden Geräten sollten ausgetauscht werden: %BATTERYLOWALL%" if (%BATTERYLOWCT% > 1);
   $msg = "Die Batterien bei folgenden Geräten sollten ausgetauscht werden: %BATTERYLOWALL%" if (%BATTERYLOWCT% > 1);
   fhem "msg $t";
   fhem "msg push $msg";
  }
  }


Zeile 842: Zeile 883:
====HomeCMDcontactOpen====
====HomeCMDcontactOpen====
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor offen meldet.<br>
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor offen meldet.<br>
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.<br>
Die speziellen Platzhalter '''%ALIAS%''', '''%SENSOR%''' und '''%STATE%''' können in diesem Attribut benutzt werden.<br>
Auslöser: Kontaktsensor open/tilted<br>
Auslöser: Kontaktsensor open/tilted<br>
'''Beispiel:'''
'''Beispiel:'''
Zeile 864: Zeile 905:
====HomeCMDcontactDoormainClosed====
====HomeCMDcontactDoormainClosed====
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain closed meldet.<br>
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain closed meldet.<br>
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.<br>
Die speziellen Platzhalter '''%ALIAS%''', '''%SENSOR%''' und '''%STATE%''' können in diesem Attribut benutzt werden.<br>
Auslöser: Kontaktsensor Type doormain closed<br>
Auslöser: Kontaktsensor vom Typ doormain wird geschlossen<br>
'''Beispiel:'''
'''Beispiel:'''
  {
  {  
  my $arr = "%ARRIVERS%";
   # Wenn es Ankommende gibt
   # Wenn es Ankommende gibt
   if ($arr)
   if ("%ARRIVERS%")
   {
   {
    # bei ROOMMATE "zu Hause" in Begrüßung einfügen
     # Zusammenstellen der Begrüßung
    my $zh = "%RESIDENT%" =~ /^rr_/ ? "zu Hause" : "";
    # aktuelle Tageszeit
    my $d = "%DAYTIME%";
     # Zusammenstellen der Nachricht
     my $msg = "Gute";
     my $msg = "Gute";
     # "n" anhängen wenn Tageszeit Nacht ist
     $msg .= "n" if ($d eq "Nacht");
     # "n" anhängen wenn Tageszeit nicht Nacht ist
     $msg .= "n" if ("%DAYTIME%" ne "Nacht");
     # Leerzeichen einfügen
     # Leerzeichen einfügen
     $msg .= " ";
     $msg .= " ";
     # der Tageszeit den Feiertag voranstellen wenn ein Feiertag im Kalender FEIERTAG ist
     # den Feiertag der Tageszeit voranstellen wenn ein Feiertag im Kalender FEIERTAG ist
     $msg .= "%FEIERTAG%-" if ("%FEIERTAG%");
     $msg .= "%FEIERTAG%-" if ("%FEIERTAG%");
     # Tageszeit einfügen
     # Tageszeit einfügen
     $msg .= $d;
     $msg .= "%DAYTIME% ";
     # "zu Hause" einfügen
     $msg .= " $zh";
     # bei ROOMMATE "zu Hause" in Begrüßung einfügen
     $msg .= "zu Hause " if ("%RESIDENT%" =~ /^rr_/);
     # Ankommende einfügen
     # Ankommende einfügen
     $msg .= " $arr";
     $msg .= "%ARRIVERS%";
     # die Begrüßung am Sonos im Flur ausgeben bei Abwesenheit über 60 min
     # Begrüßung am Sonos im Flur ausgeben bei Abwesenheit über 60 min
     fhem "msg audio \@fl_Sonos $msg!" if (%DURABSENCELAST% > 60);
     fhem "msg audio \@fl_Sonos $msg!" if (%DURABSENCELAST% > 60);
   }
   }
Zeile 897: Zeile 940:
====HomeCMDcontactDoormainOpen====
====HomeCMDcontactDoormainOpen====
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted meldet.<br>
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted meldet.<br>
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.<br>
Die speziellen Platzhalter '''%ALIAS%''', '''%SENSOR%''' und '''%STATE%''' können in diesem Attribut benutzt werden.<br>
Auslöser: Kontaktsensor Type doormain open/tilted<br>
Auslöser: Kontaktsensor vom Typ doormain geöffnet<br>
'''Beispiel:'''
'''Beispiel:'''
  {
  {
Zeile 908: Zeile 951:
====HomeCMDcontactOpenWarning1====
====HomeCMDcontactOpenWarning1====
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die erste Offenwarnzeit erreicht hat.<br>
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die erste Offenwarnzeit erreicht hat.<br>
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.<br>
Die speziellen Platzhalter '''%ALIAS%''', '''%SENSOR%''' und '''%STATE%''' können in diesem Attribut benutzt werden.<br>
Auslöser: erste Offenwarnzeit des Kontakts erreicht<br>
Auslöser: erste Offenwarnzeit des Kontakts erreicht<br>
'''Beispiel:'''
'''Beispiel:'''
Zeile 915: Zeile 958:
====HomeCMDcontactOpenWarning2====
====HomeCMDcontactOpenWarning2====
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die zweite Offenwarnzeit erreicht hat.<br>
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die zweite Offenwarnzeit erreicht hat.<br>
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.<br>
Die speziellen Platzhalter '''%ALIAS%''', '''%SENSOR%''' und '''%STATE%''' können in diesem Attribut benutzt werden.<br>
Auslöser: ab Erreichen der zweiten Offenwarnzeit des Kontakts<br>
Auslöser: ab Erreichen der zweiten Offenwarnzeit des Kontakts<br>
'''Beispiel:'''
'''Beispiel:'''
  msg audio %ALIAS% steht immer noch offen! Vielleicht sollte %ALIAS% endlich geschlossen werden!?
  msg audio %ALIAS% steht immer noch offen!


====HomeCMDcontactOpenWarningLast====
====HomeCMDcontactOpenWarningLast====
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die letzte Offenwarnzeit erreicht hat.<br>
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die letzte Offenwarnzeit erreicht hat.<br>
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.<br>
Die speziellen Platzhalter '''%ALIAS%''', '''%SENSOR%''' und '''%STATE%''' können in diesem Attribut benutzt werden.<br>
Auslöser: Erreichen der letzten Offenwarnzeit des Kontakts<br>
Auslöser: Erreichen der letzten Offenwarnzeit des Kontakts<br>
'''Beispiel:'''
'''Beispiel:'''
Zeile 929: Zeile 972:
====HomeCMDdaytime====
====HomeCMDdaytime====
Befehle die ausgeführt werden sollen sobald sich die Tageszeit (daytime) auf einen beliebigen Wert ändert.<br>
Befehle die ausgeführt werden sollen sobald sich die Tageszeit (daytime) auf einen beliebigen Wert ändert.<br>
Um die jeweilige eingetretene Tageszeit zu ermitteln ist der Platzhalter %DAYTIME% vorgesehen.<br>
Um die jeweilige eingetretene Tageszeit zu ermitteln ist der Platzhalter '''%DAYTIME%''' vorgesehen.<br>
Auslöser: Änderung der Tageszeit (daytime)
Auslöser: Änderung der Tageszeit (daytime)


====HomeCMDdaytime-<DAYTIME>====
====HomeCMDdaytime-&lt;DAYTIME&gt;====
Befehle die ausgeführt werden sollen sobald die jeweilige Tageszeit (daytime) erreicht ist.<br>
Befehle die ausgeführt werden sollen sobald die jeweilige Tageszeit (daytime) erreicht ist.<br>
Auslöser: Änderung der Tageszeit (daytime) auf bestimmten Wert<br>
Auslöser: Änderung der Tageszeit (daytime) auf bestimmten Wert<br>
Bei "night" könnte man z.B. die Heizung bewohnerunabhängig ausschalten, bei "morning" wieder ein.
Bei "night" könnte man z.B. die Heizung bewohnerunabhängig ausschalten, bei "morning" wieder ein.
====HomeCMDdeviceDisable====
Befehle die ausgeführt werden sollen sobald ein Gerät deaktiviert wird.<br>
Auslöser: 'set deviceDisable &lt;DEVICE&gt;'<br>
'''Beispiel:'''
{
  speak "Das Gerät %ALIAS% ist nun deaktiviert!";
  # optional wirklich attr disable für Device setzen und Konfig speichern
  #fhem "attr %DEVICE%:FILTER=disable!=1 disable 1; save";
  # ROOMMATE/GUEST auf gone/none setzen wenn Presence Devices deaktiviert werden
  if ("%DEVICE%" =~ /^PRESENCE\d?_(r[rg]_.*)/)
  {
    my $resident = $1;
    my $gone = $resident =~ /^rr_/ ? "gone" : "none";
    fhem "set $resident:FILTER=state!=$gone state $gone";
  }
}
====HomeCMDdeviceEnable====
Befehle die ausgeführt werden sollen sobald ein Gerät aktiviert wird.<br>
Auslöser: 'set deviceEnable &lt;DEVICE&gt;'<br>
'''Beispiel:'''
{
  speak "Das Gerät %ALIAS% ist nun aktiviert!";
  # optional attr disable für Device entfernen und Konfig speichern
  #fhem "deleteattr %DEVICE%:FILTER=disable=1 disable; save";
  # ROOMMATE/GUEST auf home setzen wenn Presence Devices aktiviert werden und anwesend sind
  if ("%DEVICE%" =~ /^PRESENCE\d?_(r[rg]_.*)/)
  {
    fhem "set $1:FILTER=state!=home state home" if (ReadingsVal("%DEVICE%","presence","") eq "present");
  }
}


====HomeCMDdnd====
====HomeCMDdnd====
Zeile 967: Zeile 1.046:
Befehle die beim Beginn eines beliebigen (holiday)Kalender Events ausgeführt werden sollen.<br>
Befehle die beim Beginn eines beliebigen (holiday)Kalender Events ausgeführt werden sollen.<br>
Auslöser: Beginn eines beliebigen (holiday)Kalender Events<br>
Auslöser: Beginn eines beliebigen (holiday)Kalender Events<br>
Platzhalter %CALENDAR%, %EVENT% und %PREVEVENT% können zusätzlich verwendet werden<br>
Platzhalter '''%CALENDAR%''', '''%EVENT%''' und '''%PREVEVENT%''' können zusätzlich verwendet werden<br>
'''Beispiel:'''
'''Beispiel:'''
  {
  {
Zeile 974: Zeile 1.053:
  }
  }


====HomeCMDevent-<KALENDER>-each====
====HomeCMDevent-&lt;KALENDER&gt;-each====
Befehle die beim Beginn/Ende eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs ausgeführt werden sollen.<br>
Befehle die beim Beginn/Ende eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs ausgeführt werden sollen.<br>
Auslöser: Beginn eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs<br>
Auslöser: Beginn eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs<br>
Platzhalter %EVENT% und %PREVEVENT% können zusätzlich verwendet werden<br>
Platzhalter '''%EVENT%''' und '''%PREVEVENT%''' können zusätzlich verwendet werden<br>
'''Beispiel für "HomeCMDevent-FEIERTAGE-each":'''
'''Beispiel für "HomeCMDevent-FEIERTAGE-each":'''
  {
  {
   fhem "set Weihnachten off" if ("%PREVEVENT%" eq "Weihnachten");
   fhem "set Weihnachten off" if ("%PREVEVENT%" eq "Weihnachten");
  }
  }
 
'''Beispiel für "HomeCMDevent-URLAUBDAN-each":'''
====HomeCMDevent-<KALENDER>-<EVENT>-begin====
Befehle die beim Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.<br>
Auslöser: Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs<br>
Platzhalter %PREVEVENT% kann zusätzlich verwendet werden<br>
'''Beispiel für "HomeCMDevent-FEIERTAGE-Neujahr-begin":'''
set %SENSORSENERGY% meterReset
 
====HomeCMDevent-<KALENDER>-<EVENT>-end====
Befehle die bei Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.<br>
Auslöser: Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs<br>
Platzhalter %PREVEVENT% kann zusätzlich verwendet werden
 
====HomeCMDfhemDEFINED====
Befehle die ausgeführt werden sollen wenn ein neues Gerät angelegt wird (define)<br>
'''Beispiel:'''
  {
  {
   # Jedem neu definierten Gerät den Geräte-TYPE auch als Raum zuweisen
   if ("%EVENT%" =~ /urlaub/i)
  fhem "attr %DEFINED% room ".$defs{"%DEFINED%"}->{TYPE};
  {
    speak "Dan hat jetzt Urlaub!!!";
  }
  elsif ("%PREVEVENT%" =~ /urlaub/i)
  {
    speak "Der Urlaub von Dan ist nun zu Ende!!!";
  }
  }
  }


====HomeCMDfhemINITIALIZED====
'''Beispiel für "HomeCMDevent-WOHNUNG-each":'''
Befehle die ausgeführt werden sollen wenn FHEM gestartet wurde<br>
'''Beispiel:'''
msg FHEM Home wurde gestartet...
 
====HomeCMDfhemSAVE====
Befehle die ausgeführt werden sollen wenn in FHEM die Konfigurationsdatei gespeichert wird<br>
'''Beispiel (Backup von fhem.cfg und fhem.state):'''
  {
  {
   # Datum/Uhrzeit
   # Heizung an/aus schalten
   my $now = Timeow();
   my $heiz = "([bksw]z|ku)_Thermostat";
   # Leerzeichen durch Unterstriche ersetzen
   if ("%EVENT%" =~ /^heizung(..+)?$/i)
  $now =~ s/ /_/g;
  {
  # Backup der Datei fhem.cfg
    my $zeit = $1;
   `cp $attr{global}{configfile} ./backup/fhem.cfg.$now`;
    if ("%SEASON%" ne "Sommer")
   # Log-Ausgabe der gespeicherten Datei
    {
   Log3 undef,3,"saved ./backup/fhem.cfg.$now";
   # Backup der Datei fhem.state
      # morgens nicht alle Thermostaten schalten
   `cp $attr{global}{statefile} ./backup/fhem.state.$now`;
      $heiz = "([bks]z|ku)_Thermostat" if ($zeit && $zeit =~ /morgens?$/i);
   # Log-Ausgabe der gespeicherten Datei
      fhem "set $heiz:FILTER=controlMode!=day controlMode day"
   Log3 undef,3,"saved ./backup/fhem.state.$now";
    }
}
   }
 
  elsif ("%PREVEVENT%" =~ /^heizung/i)
====HomeCMDfhemUPDATE====
  {
Befehle die ausgeführt werden sollen wenn das Update von FHEM ausgeführt wurde<br>
    fhem "set $heiz:FILTER=controlMode!=night controlMode night" if ("%SEASON%" ne "Sommer");
'''Beispiel:'''
  }
  msg audio Das Update für FHEM ist beendet!
 
   # WLAN an/aus schalten
====HomeCMDicewarning====
   elsif ("%EVENT%" =~ /^wlan|wifi|wi-fi/i)
Befehle die bei Anfang/Ende der Eiswarnung ausgeführt werden sollen<br>
  {
Auslöser: icewarning 0/1<br>
    fhem "set Router wifi off";
'''Beispiel:'''
   }
{
   elsif ("%PREVEVENT%" =~ /^wlan|wifi|wi-fi/i)
   if (%ICE%)
  {
    fhem "set Router wifi on";
  }
   # G-Tag für Putzfrau (de)aktivieren
   elsif ("%EVENT%" =~ /^putz/i)
  {
    fhem "set %NAME% deviceEnable PRESENCE_rg_Inge";
  }
  elsif ("%PREVEVENT%" =~ /^putz/i)
  {
    fhem "set %NAME% deviceDisable PRESENCE_rg_Inge";
  }
   
  # G-Tag für Gast (de)aktivieren
   elsif ("%EVENT%" =~ /g([aä]|ae)st/i)
   {
   {
     fhem "msg push ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!";
     fhem "set %NAME% deviceEnable PRESENCE_rg_Gast";
   }
   }
   else
   elsif ("%PREVEVENT%" =~ /g([aä]|ae)st/i)
   {
   {
     fhem "msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!.";
     fhem "set %NAME% deviceDisable PRESENCE_rg_Gast";
   }
   }
  }
  }


====HomeCMDicewarning-off====
====HomeCMDevent-&lt;KALENDER&gt;-&lt;EVENT&gt;-begin====
Befehle die bei Ende der Eiswarnung ausgeführt werden sollen<br>
Befehle die beim Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.<br>
Auslöser: icewarning 0<br>
Auslöser: Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs<br>
'''Beispiel:'''
Platzhalter '''%PREVEVENT%''' kann zusätzlich verwendet werden<br>
  msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!
'''Beispiel für "HomeCMDevent-FEIERTAGE-Neujahr-begin":'''
  set %SENSORSENERGY% meterReset


====HomeCMDicewarning-on====
====HomeCMDevent-&lt;KALENDER&gt;-&lt;EVENT&gt;-end====
Befehle die bei Beginn der Eiswarnung ausgeführt werden sollen<br>
Befehle die bei Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.<br>
Auslöser: icewarning 1<br>
Auslöser: Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs<br>
Platzhalter '''%PREVEVENT%''' kann zusätzlich verwendet werden
 
====HomeCMDfhemDEFINED====
Befehle die ausgeführt werden sollen wenn ein neues Gerät angelegt wird (define)<br>
'''Beispiel:'''
'''Beispiel:'''
  msg audio ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!
  {
  # Jedem neu definierten Gerät den Geräte-TYPE auch als Raum im Menüpunkt Module zuweisen
  fhem "attr %DEFINED% room Module->".InternalVal("%DEFINED%","TYPE","default");
}


====HomeCMDlocation====
====HomeCMDfhemINITIALIZED====
Befehle die beim Ändern der location ausgeführt werden sollen.<br>
Befehle die ausgeführt werden sollen wenn FHEM gestartet wurde<br>
Auslöser: Änderung location
'''Beispiel:'''
msg FHEM Home wurde gestartet...


====HomeCMDlocation-<LOCATION>====
====HomeCMDfhemSAVE====
Befehle die bei Änderung auf eine bestimmte location ausgeführt werden sollen.<br>
Befehle die ausgeführt werden sollen wenn in FHEM die Konfigurationsdatei gespeichert wird<br>
Auslöser: Änderung auf bestimmte location
'''Beispiel (Backup von fhem.cfg und fhem.state):'''
 
{
====HomeCMDmode====
  # Datum/Uhrzeit
Befehle die beim Ändern von mode ausgeführt werden sollen.<br>
  my $now = TimeNow();
Auslöser: Änderung mode
  # Leerzeichen durch Unterstriche ersetzen
  $now =~ s/ /_/g;
  # Backup der Datei fhem.cfg
  `cp $attr{global}{configfile} ./backup/fhem.cfg.$now`;
  # Log-Ausgabe der gespeicherten Datei
  Log3 undef,3,"saved ./backup/fhem.cfg.$now";
  # Backup der Datei fhem.state
  `cp $attr{global}{statefile} ./backup/fhem.state.$now`;
  # Log-Ausgabe der gespeicherten Datei
  Log3 undef,3,"saved ./backup/fhem.state.$now";
}


====HomeCMDmode-absent-belated====
====HomeCMDfhemUPDATE====
Befehle die nachträglich zur Abwesenheit ausgeführt werden sollen, die Zeit kann im Atteribut "HomeModeAbsentBelatedTime" eingestellt werden<br>
Befehle die ausgeführt werden sollen wenn das Update von FHEM ausgeführt wurde<br>
Auslöser: Abwesenheit + XX min<br>
'''Beispiel:'''
'''Beispiel:'''
  set Heizungen [FILTER=controlManu!=off] controlMode night
  msg audio Das Update für FHEM ist beendet!


====HomeCMDmode-<MODE>====
====HomeCMDicewarning====
Befehle die bei Änderung auf einen bestimmten mode ausgeführt werden sollen.<br>
Befehle die bei Anfang/Ende der Eiswarnung ausgeführt werden sollen<br>
Auslöser: Änderung auf bestimmten mode<br>
Auslöser: icewarning 0/1<br>
'''Beispiel für "HomeCMDmode-absent":'''
'''Beispiel:'''
set HarmonyHub:FILTER=activity!=PowerOff activity PowerOff;
set wz_Ventilator:FILTER=speed!=0 speed 0;
set TYPE=SONOSPLAYER:FILTER=Volume>0 Volume 0;
set Sonos stopAll;
sleep 3;
set Wohnung [FILTER=state!=off] off"
'''Beispiel für "HomeCMDmode-asleep":'''
define atTmp_wz_Media_aus_%SELF% at +01:00:00 set HarmonyHub:FILTER=currentActivity!=PowerOff activity PowerOff;
define atTmp_wz_Venti_aus_%SELF% at +01:00:00 set wz_Ventilator:FILTER=speed!=0 speed 0;
define atTmp_wzLS_aus_%SELF% at +00:30:00 set wz_LS scene aus;
define atTmp_all_Sonos_vol_down_%SELF% at +00:02:00 set TYPE=SONOSPLAYER:FILTER=Volume!=0 Volume 0 1;
define atTmp_all_Sonos_off_%SELF% at +00:02:30 set Sonos stopAll;
set [sw]z_AutoLight:FILTER=state!=off off;
set [sw]z_AutoMusic:FILTER=state!=off off;
set Heizungen [FILTER=controlManu!=off] controlMode night
'''Beispiel für "HomeCMDmode-awoken":'''
set [sw]z_AutoLight:FILTER=state!=on on;
set [sw]z_AutoMusic:FILTER=state!=on on
'''Beispiel für "HomeCMDmode-gone":'''
set Heizungen [FILTER=controlManu!=off] controlManu off
 
====HomeCMDmode-<MODE>-resident====
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen beliebigen Resident, ausgeführt werden.<br>
Auslöser: Änderung mode von beliebigem Resident ausgelöst<br>
'''Beispiel für "HomeCMDmode-asleep-resident":'''
msg audio Guten Nacht und schlaf' gut %ALIAS%!
'''Beispiel für "HomeCMDmode-awoken-resident":'''
  {
  {
   my $msg = "Guten";
   if (%ICE%)
  $msg .= " %FEIERTAG%" if ("%FEIERTAG%");
   {
   $msg .= " Morgen %ALIAS%";
    fhem "msg push ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!";
   fhem "msg audio $msg";
   }
   fhem "defmod atTmp_wetter_%RESIDENT%_%SELF% at +00:07:00 msg audio Wettervorhersage für heute: %FORECASTTODAY%";
  else
   {
    fhem "msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!.";
  }
  }
  }


====HomeCMDmode-<MODE>-<ROOMMATE/GUEST>====
====HomeCMDicewarning-off====
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen bestimmten Resident, ausgeführt werden.<br>
Befehle die bei Ende der Eiswarnung ausgeführt werden sollen<br>
Auslöser: Änderung mode von bestimmten Resident ausgelöst
Auslöser: icewarning 0<br>
'''Beispiel:'''
msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!


====HomeCMDmodeAlarm====
====HomeCMDicewarning-on====
Befehle die beim Ändern von modeAlarm ausgeführt werden sollen.<br>
Befehle die bei Beginn der Eiswarnung ausgeführt werden sollen<br>
Auslöser: Änderung modeAlarm
Auslöser: icewarning 1<br>
'''Beispiel:'''
msg audio ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!


====HomeCMDmodeAlarm-<armaway/armhome/armnight/disarm>====
====HomeCMDlocation====
Befehle die bei Änderung auf einen bestimmten modeAlarm ausgeführt werden sollen.<br>
Befehle die beim Ändern der location ausgeführt werden sollen.<br>
Auslöser: Änderung auf bestimmten modeAlarm<br>
Auslöser: Änderung location
'''Beispiel für "HomeCMDmodeAlarm-armaway":'''
 
{
====HomeCMDlocation-&lt;LOCATION&gt;====
  if ("%PREVAMODE%" eq "disarm")
Befehle die bei Änderung auf eine bestimmte location ausgeführt werden sollen.<br>
  {
Auslöser: Änderung auf bestimmte location
    # Alarmanlage einschalten
 
    fhem "set AA_Arm:FILTER=level!=100 alarmLevel armAll";
====HomeCMDmode====
    # Nachricht zusammensetzen
Befehle die beim Ändern von mode ausgeführt werden sollen.<br>
    my $msg;
Auslöser: Änderung mode
    $msg .= "Die Alarmanlage ist nun scharf geschaltet!" if ("%RESIDENT%" ne "rr_Dan");
 
    my $is = "%ALARMHR%" =~ /und/ ? "sind" : "ist";
====HomeCMDmode-absent-belated====
    $msg .= " " if ($msg);
Befehle die nachträglich zur Abwesenheit ausgeführt werden sollen, die Zeit kann im Atteribut "HomeModeAbsentBelatedTime" eingestellt werden<br>
    $msg .= "ACHTUNG: %ALARMHR% $is noch offen!!!" if (%ALARMCT%);
Auslöser: Abwesenheit + XX min<br>
    # Nachricht an ROOMMATE/GUEST senden
'''Beispiel:'''
    fhem "msg \@%RESIDENT% $msg" if ($msg);
  set Heizungen [FILTER=controlManu!=off] controlMode night
  }
}
'''Beispiel für "HomeCMDmodeAlarm-armhome":'''
AA_Arm:FILTER=level!=25 alarmLevel armExtSens
'''Beispiel für "HomeCMDmodeAlarm-armnight":'''
AA_Arm:FILTER=level!=25 alarmLevel armExtSens
'''Beispiel für "HomeCMDmodeAlarm-disarm":'''
  {
  # Alarmanlage ausschalten
  fhem "set AA_Arm:FILTER=level!=0 alarmLevel disarmed";
  my $prio = "";
  # Nachrichtenpriorität auf 1 setzen bei Ankunft (höhere Lautstärke beim Abspielen damit man das auch vor der Tüt hört)
  $prio = " 1" if ("%LOCATION%" eq "arrival");
  # Nachricht an ROOMMATE/GUEST senden wenn der vorherige alarmMode nicht "armnicht" ist
  fhem "msg audio \@fl_Sonos$prio Die Alarmanlage ist nun ausgeschaltet %ALIAS%!" if ("%PREVAMODE%" ne "armnight");
}


====HomeCMDmotion====
====HomeCMDmode-&lt;MODE&gt;====
Befehle die bei Statusänderung eines beliebigen Bewegungsmelders ausgeführt werden sollen<br>
Befehle die bei Änderung auf einen bestimmten mode ausgeführt werden sollen.<br>
Auslöser: öffnen/schließen eines beliebigen Bewegungsmelders<br>
Auslöser: Änderung auf bestimmten mode<br>
'''Beispiel:'''
'''Beispiel für "HomeCMDmode-absent":'''
  {
  set HarmonyHub:FILTER=activity!=PowerOff activity PowerOff;
  # Raum aus Sensornamen ermitteln, z.B. bz_Sensor
set wz_Ventilator:FILTER=speed!=0 speed 0;
  my $room = (split /_/,"%SENSOR%")[0];
  set TYPE=SONOSPLAYER:FILTER=Volume>0 Volume 0;
   
  set Sonos stopAll;
  # Status des structure aller Lichter dieses Raums
sleep 3;
  my $lichter = Value($room."_Lichter");
set Wohnung [FILTER=state!=off] off"
   
'''Beispiel für "HomeCMDmode-asleep":'''
  # Status des dummy Tageslicht
  define atTmp_wz_Media_aus_%SELF% at +01:00:00 set HarmonyHub:FILTER=currentActivity!=PowerOff activity PowerOff;
  my $tl = Value("Tageslicht");
define atTmp_wz_Venti_aus_%SELF% at +01:00:00 set wz_Ventilator:FILTER=speed!=0 speed 0;
   
  define atTmp_wzLS_aus_%SELF% at +00:30:00 set wz_LS scene aus;
  if ("%STATE%" eq "geöffnet")
define atTmp_all_Sonos_vol_down_%SELF% at +00:02:00 set TYPE=SONOSPLAYER:FILTER=Volume!=0 Volume 0 1;
  {
define atTmp_all_Sonos_off_%SELF% at +00:02:30 set Sonos stopAll;
    # Lichtwert des Sensors
set [sw]z_Auto(Music|Light):FILTER=state!=off off;
    my $lum = ReadingsNum("%SENSOR%","luminance",100);
  set Heizungen [FILTER=controlManu!=off] controlMode night
   
'''Beispiel für "HomeCMDmode-awoken":'''
    # Löschen des evtl. schon vorhandenen "at"
set [sw]z_Auto(Music|Light):FILTER=state!=on on
    fhem "delete atTmp_Bewegungsmelder_Licht_aus_".$room."_%SELF%" if (IsDevice("atTmp_Bewegungsmelder_Licht_aus_".$room."_%SELF%"));
'''Beispiel für "HomeCMDmode-gone":'''
   
set Heizungen [FILTER=controlManu!=off] controlManu off
    # Licht nur wenn kein Tageslicht oder Lichtwert des Sensors kleiner als 10 und AutoLight eingeschaltet und modeAlarm nicht armaway
 
    if (($tl eq "off" || $lum < 10) && $lichter eq "off" && Value($room."_AutoLight") eq "on" && "%AMODE%" ne "armaway")
====HomeCMDmode-&lt;MODE&gt;-resident====
    {
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen beliebigen Resident, ausgeführt werden.<br>
      my $scene;
Auslöser: Änderung mode von beliebigem Resident ausgelöst<br>
'''Beispiel für "HomeCMDmode-asleep-resident":'''
      # verschiedene Szenen für verschiedene Modus bzw. Aussenlichtstärken
msg audio @%AUDIO% Guten Nacht und schlaf' gut %ALIAS%!
      if ("%MODE%" eq "gotosleep")
'''Beispiel für "HomeCMDmode-awoken-resident":'''
      {
{
        $scene = "Abend";
  my $msg = "Guten";
      }
  $msg .= " %FEIERTAG%" if ("%FEIERTAG%");
      elsif ("%MODE%" eq "asleep")
  $msg .= " Morgen %ALIAS%";
      {
  fhem "msg audio \@%AUDIO% $msg";
        $scene = "Nacht";
  fhem "defmod atTmp_wetter_%RESIDENT%_%SELF% at +00:07:00 msg audio Wettervorhersage für heute: %FORECASTTODAY%";
      }
}
      elsif (%LIGHT% > 3)
 
      {
====HomeCMDmode-&lt;MODE&gt;-&lt;ROOMMATE/GUEST&gt;====
        $scene = "viel";
Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen bestimmten Resident, ausgeführt werden.<br>
      }
Auslöser: Änderung mode von bestimmten Resident ausgelöst
      elsif (%LIGHT% < 4)
 
      {
====HomeCMDmodeAlarm====
        $scene = "mittel";
Befehle die beim Ändern von modeAlarm ausgeführt werden sollen.<br>
      }
Auslöser: Änderung modeAlarm
 
====HomeCMDmodeAlarm-&lt;armaway/armhome/armnight/disarm&gt;====
Befehle die bei Änderung auf einen bestimmten modeAlarm ausgeführt werden sollen.<br>
Auslöser: Änderung auf bestimmten modeAlarm<br>
'''Beispiel für "HomeCMDmodeAlarm-armaway":'''
{
  if ("%PREVAMODE%" eq "disarm")
  {
    # Alarmanlage einschalten
    fhem "set AA_Arm:FILTER=level!=100 alarmLevel armAll";
   
   
      # Schalten der entsprechenden Szene (Modul LightScene)
    # Nachricht zusammensetzen
      fhem "set ".$room."_LS scene $scene" if ($scene);
    my $msg;
     }
    $msg .= "Die Alarmanlage ist nun scharf geschaltet!";
    my $is = "%ALARMHR%" =~ /und/ ? "sind" : "ist";
    $msg .= " " if ($msg);
    $msg .= "ACHTUNG: %ALARMHR% $is noch offen!!!" if (%ALARMCT%);
    # Nachricht an ROOMMATE/GUEST senden
    fhem "msg \@%RESIDENT% $msg" if ($msg);
    # Eingangstür abschließen falls noch nicht geschehen
     fhem "set fl_Tuerschloss:FILTER=state!=locked lock";
   }
   }
  else
}
  {
'''Beispiel für "HomeCMDmodeAlarm-armhome":'''
    # unterschiedliche Ausschaltzeiten für unterschiedliche Räume
AA_Arm:FILTER=level!=25 alarmLevel armExtSens;
    my $t = 3;
set fl_Tuerschloss:FILTER=state!=locked lock
    $t = 15 if ($room eq "wz");
'''Beispiel für "HomeCMDmodeAlarm-armnight":'''
    $t = 2 if ($room eq "bz" || ($room =~ /wz|ku/ && "%MODE%" =~ /sleep/));
AA_Arm:FILTER=level!=25 alarmLevel armExtSens;
     $t = 1 if ($room eq "fl");
set fl_Tuerschloss:FILTER=state!=locked lock
'''Beispiel für "HomeCMDmodeAlarm-disarm":'''
{
  # Alarmanlage ausschalten
  fhem "set AA_Arm:FILTER=level!=0 alarmLevel disarmed";
  my $prio = "";
  # Nachrichtenpriorität auf 1 setzen bei Ankunft (höhere Lautstärke beim Abspielen damit man das auch vor der Tür hört)
  $prio = " 1" if ("%LOCATION%" eq "arrival");
  # Nachricht an ROOMMATE/GUEST senden wenn der vorherige alarmMode nicht "armnight" ist
  fhem "msg audio \@fl_Sonos$prio Die Alarmanlage ist nun ausgeschaltet %ALIAS%!" if ("%PREVAMODE%" ne "armnight");
}
 
====HomeCMDmotion====
Befehle die bei Statusänderung eines beliebigen Bewegungsmelders ausgeführt werden sollen<br>
Auslöser: öffnen/schließen eines beliebigen Bewegungsmelders<br>
'''Beispiel:'''
{
  # Raum aus Sensornamen ermitteln, z.B. bz_Sensor
  my $room = (split /_/,"%SENSOR%")[0];
  # Status des structure aller Lichter dieses Raums
  my $lichter = Value($room."_Lichter");
  # Status des dummy Tageslicht
  my $tl = Value("Tageslicht");
  if ("%STATE%" eq "geöffnet")
  {
    # Lichtwert des Sensors
     my $lum = ReadingsNum("%SENSOR%","luminance",100);
   
   
     # Zahl in Minuten umrechnen in einen Zeitpunkt für das "at"
    # Löschen des evtl. schon vorhandenen "at"
     my $d = HOMEMODE_hourMaker($t);
    fhem "delete atTmp_Bewegungsmelder_Licht_aus_".$room."_%SELF%" if (IsDevice("atTmp_Bewegungsmelder_Licht_aus_".$room."_%SELF%"));
   
     # Anlegen des "at" zum Ausschalten des Lichts wenn die Lichter angeschaltet sind und auch AutoLight eingeschaltet ist
    # Licht nur wenn kein Tageslicht oder Lichtwert des Sensors kleiner als 10 und AutoLight eingeschaltet und modeAlarm nicht armaway
     if ($lichter ne "off" && Value($room."_AutoLight") eq "on")
    if (($tl eq "off" || $lum < 10) && $lichter eq "off" && Value($room."_AutoLight") eq "on" && "%AMODE%" ne "armaway")
     {
    {
       my $cmd = "set ".$room."_LS scene aus";
      my $scene;
       fhem "defmod atTmp_Bewegungsmelder_Licht_aus_".$room."_%SELF% at +$d $cmd";
     }
      # verschiedene Szenen für verschiedene Modus bzw. Aussenlichtstärken
   }
      if ("%MODE%" eq "gotosleep")
  }
      {
        $scene = "Abend";
      }
      elsif ("%MODE%" eq "asleep")
      {
        $scene = "Nacht";
      }
      elsif (%LIGHT% > 3)
      {
        $scene = "viel";
      }
      elsif (%LIGHT% < 4)
      {
        $scene = "mittel";
      }
      # Schalten der entsprechenden Szene (Modul LightScene)
      fhem "set ".$room."_LS scene $scene" if ($scene);
    }
  }
  else
  {
    # unterschiedliche Ausschaltzeiten für unterschiedliche Räume
    my $t = 3;
    $t = 15 if ($room eq "wz");
    $t = 2 if ($room eq "bz" || ($room =~ /wz|ku/ && "%MODE%" =~ /sleep/));
    $t = 1 if ($room eq "fl");
     # Zahl in Minuten umrechnen in einen Zeitpunkt für das "at"
     my $d = HOMEMODE_hourMaker($t);
   
     # Anlegen des "at" zum Ausschalten des Lichts wenn die Lichter angeschaltet sind und auch AutoLight eingeschaltet ist
     if ($lichter ne "off" && Value($room."_AutoLight") eq "on")
     {
       my $cmd = "set ".$room."_LS scene aus";
       fhem "defmod atTmp_Bewegungsmelder_Licht_aus_".$room."_%SELF% at +$d $cmd";
     }
   }
  }
 
====HomeCMDmotion-off====
Befehle die bei Ende der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen<br>
Auslöser: Ende der Bewegung eines beliebigen Bewegungsmelders
 
====HomeCMDmotion-on====
Befehle die bei Beginn der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen<br>
Auslöser: Beginn der Bewegung eines beliebigen Bewegungsmelders
 
====HomeCMDpresence-&lt;absent/present&gt;====
Befehle die bei Änderung von presence ausgeführt werden sollen<br>
Auslöser: Änderung presence<br>
'''Beispiel für "HomeCMDpresence-present":'''
set w_Steckdosen [FILTER=state!=on] on;
set Heizungen [FILTER=controlManu!=off] controlMode auto
 
====HomeCMDpresence-&lt;absent/present&gt;-device====
Befehle die bei Änderung von presence, ausgelöst durch ein beliebiges Presence Device, ausgeführt werden sollen<br>
Auslöser: Änderung presence, ausgelöst durch beliebiges Presence Device<br>
'''Beispiel für "HomeCMDpresence-present-device":'''
{
  # mindestens 1x täglich den Batteriewert des PRESENCE Geräts bei erkannter Anwesenheit holen
  fhem '"sudo /opt/fhem/scripts/GTag-bat.sh %DEVICE% %ADDRESS% &"'
    if ("%DEVICE%" =~ /^PRESENCE_/ && (!defined ReadingsVal("%DEVICE%","battery",undef) || ReadingsAge("%DEVICE%","battery",0) > 64800));
}
 
====HomeCMDpresence-&lt;absent/present&gt;-resident====
Befehle die bei Änderung von presence, ausgelöst durch einen beliebigen Resident, ausgeführt werden sollen<br>
Auslöser: Änderung presence, ausgelöst durch beliebigen Resident<br>
'''Beispiel für "HomeCMDpresence-absent-resident":'''
{
  # Mich benachrichtigen wenn ich nicht zu hause bin und jemand anderes die Wohnung verlässt
  fhem "msg push \@rr_Dan %ALIAS% hat gerade die Wohnung verlassen!"
    if ("%RESIDENT%" ne "rr_Dan" && ReadingsVal("rr_Dan","presence","") ne "present");
  # Verabschiedungsnachricht zusammensetzen
  my $msg;
  # Alle außer mich selbst verabschieden
  $msg .= "Bis bald und auf Wiedersehen %ALIAS%..." if ("%RESIDENT%" ne "rr_Dan");
  # Glättewarnung wenn nötig
  $msg .= " ACHTUNG!!! Es ist %TEMPERATURE%°C kalt! Somit könnte es glatt werden!" if (%ICE%);
  # Nachricht senden wenn vorhanden
  fhem "msg \@%RESIDENT% $msg" if ($msg);
}
'''Beispielcode für "HomeCMDpresence-present-resident":'''
{
  # alle Ankommenden außer mir selbst
  if ("%RESIDENT%" ne "rr_Dan")
  {
    # Benachrichtigung wenn jemand kommt
    fhem "msg audio %ALIAS% kommt gerade!" if ("%LOCATION%" ne "arrival");
    # Nachricht an Ankommende(n) zusammensetzen
    my $g = "gute";
    $g .= "n" if ("%DAYTIME%" ne "Nacht);
    # Nachricht an Ankommende(n) senden
    fhem "msg \@%RESIDENT% Willkommen und $g %DAYTIME% %ALIAS%!";
  }
}
 
====HomeCMDpresence-&lt;absent/present&gt;-&lt;ROOMMATE/GUEST&gt;====
Befehle die bei Änderung von presence, ausgelöst durch einen bestimmten Resident, ausgeführt werden sollen<br>
Auslöser: Änderung presence, ausgelöst durch bestimmten Resident<br>
 
====HomeCMDpresence-&lt;absent/present&gt;-&lt;ROOMMATE/GUEST&gt;-&lt;DEVICE&gt;====
Befehle die bei Änderung von presence, ausgelöst durch ein bestimmtes Presence Device eines bestimmten Resident, ausgeführt werden sollen<br>
Dieses Attribut ist nur verfügbar wenn ein Resident mehr als ein Presence Device hat<br>
Auslöser: Änderung presence, ausgelöst durch bestimmtes Presence Device eines bestimmten Resident
 
====HomeCMDseason====
Befehle die bei Änderung der Jahreszeit ausgeführt werden sollen<br>
Auslöser: Änderung Jahreszeit<br>
'''Beispiel'''
{
  my $t = "%SEASON%";
  $t .= "s" if ($t eq "Frühling");
  fhem "msg push Die Wohnung ist nun im $t-Modus!";
  fhem "set Heizungen [FILTER=controlMode!=auto] controlMode auto" if ($t ne "Sommer");
}
 
====HomeCMDseason-&lt;SEASON&gt;====
Befehle die bei Änderung der Jahreszeit in eine bestimmte Jahreszeit ausgeführt werden sollen<br>
Auslöser: Änderung bestimmte Jahreszeit
 
====HomeCMDtwilight====
Befehle die bei Änderung der Dämmerung ausgeführt werden sollen<br>
Auslöser: Änderung Dämmerung
 
====HomeCMDtwilight-&lt;sr/sr_astro/sr_civil/sr_indoor/sr_weather/ss/ss_astro/ss_civil/ss_indoor/ss_weather&gt;====
Befehle die bei Änderung zu bestimmter Dämmerung ausgeführt werden sollen<br>
Auslöser: Änderung zu bestimmter Dämmerung
 
====HomeCMDuwz-warn====
Befehle die bei Beginn/Ende der UWZ Warnungen ausgeführt werden sollen<br>
Auslöser: Beginn/Ende der UWZ Warnungen
 
====HomeCMDuwz-warn-begin====
Befehle die bei Beginn der UWZ Warnungen ausgeführt werden sollen<br>
Auslöser: Beginn der UWZ Warnungen<br>
'''Beispiel:'''
msg %UWZLONG%
 
====HomeCMDuwz-warn-end====
Befehle die beim Ende der UWZ Warnungen ausgeführt werden sollen<br>
Auslöser: Ende der UWZ Warnungen<br>
'''Beispiel:'''
msg Alle Unwetterwarnungen sind nun beendet!
 
=Platzhalter=
==verfügbar in allen HomeCMD Attributen==
===%ADDRESS%===
MAC Adresse des zuletzt ausgelösten Presence Geräts
 
===%ALARM%===
Liste mit Namen der ausgelösten Alarm Geräte<br>
Wert ist 0 wenn kein Alarm Device ausgelöst ist
 
===%ALARMCT%===
Anzahl der ausgelösten Alarm Geräte
 
===%ALARMHR%===
Liste mit (human readable) Namen der ausgelösten Alarm Geräte<br>
Wert ist 0 wenn kein Alarm Device ausgelöst ist<br>
kann z.B. für msg benutzt werden
 
===%ALIAS%===
Alias des zuletzt ausgelösten Resident
 
===%AMODE%===
aktueller Alarm Mode
 
===%AEAH%===
Wert von anyoneElseAtHome<br>
Wert ist 1 wenn on und 0 wenn off
 
===%ARRIVERS%===
Alias-Liste der ROOMMATE/GUEST deren location auf arrival steht<br>
kann z.B. dafür benutzt werden um Residents zu begrüßen<br>
z.B. Peter, Paul und Marry
 
===%AUDIO%===
Audio Device des zuletzt ausgelösten ROOMMATE/GUEST (Attribut msgContactAudio)<br>
wenn das Attribut msgContactAudio des jeweiligen Resident keinen Wert hat, so wird versucht den Wert des Attributs aus dem globalMsg (sofern vorhanden) auszulesen<br>
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
 
===%BATTERYLOW%===
Alias des zu letzt gemeldeten Geräts mit niedrigem Batteriestand
 
===%BATTERYLOWALL%===
Wert des Reading batteryLow_hr
 
===%BATTERYLOWCT%===
Wert des Reading batteryLow_ct
 
===%CONDITION%===
Wert des Reading condition des überwachten weather Device<br>
kann z.B. für Wetter(vorhersage) benutzt werden
 
===%CONTACT%===
Wert des Reading lastContact (Name des zuletzt geöffneten Kontakt Sensor)<br>
kann z.B. dafür benutzt werden um msg zu versenden
 
===%DAYTIME%===
Wert des Reading daytime<br>
kann z.B. dafür benutzt werden um Tageszeit spezifische Aktionen zu schalten
 
===%DEVICE%===
Name des zuletzt ausgelösten Presence Gerät
 
===%DEVICEA%===
Wert des Reading lastAbsentByPresenceDevice
 
===%DEVICEP%===
Wert des Reading lastPresentByPresenceDevice
 
===%DISABLED%===
Wert des Reading devicesDisabled
 
===%DND%===
DND Status<br>
1 wenn an, 0 wenn aus
 
===%DURABSENCE%===
Wert des Reading durTimerAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST
 
===%DURABSENCELAST%===
Wert des Reading lastDurAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST
 
===%DURPRESENCE%===
Wert des Reading durTimerPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST
 
===%DURPRESENCELAST%===
Wert des Reading lastDurPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST
 
===%DURSLEEP%===
Wert des Reading durTimerSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST
 
===%DURSLEEPLAST%===
Wert des Reading lastDurSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST
 
===%<CALENDARNAME>%===
Event des benannten Kalenders<br>
0 wenn kein gerade kein Event ist
 
===%<CALENDARNAME-EVENTNAME>%===
0 wenn das benannte Event nicht aktiv ist<br>
1 wenn das benannte Event aktiv ist
 
===%FORECAST%===
Wettervorhersage für morgen
 
===%FORECASTTODAY%===
Wettervorhersage für heute
 
===%HUMIDITY%===
Wert des Reading humidity von HOMEMODE
 
===%HUMIDITYTREND%===
Wert des Reading humidityTrend von HOMEMODE
 
===%ICE%===
0 wenn keine Eiswarnung besteht<br>
1 wenn Eiswarnung besteht
 
===%IP%===
Wert des Reading publicIP von HOMEMODE
 
===%LIGHT%===
Wert des Reading light von HOMEMODE
 
===%LOCATION%===
Wert des Reading location von HOMEMODE
 
===%LOCATIONR%===
Wert des Reading location des zu letzt ausgelösten ROOMMATE/GUEST
 
===%LUMINANCE%===
Wert des Reading luminance von HOMEMODE
 
===%LUMINANCETREND%===
Wert des Reading luminanceTrend von HOMEMODE
 
===%MODE%===
gerade aktiver Modus von HOMEMODE (Reading mode)
 
===%MODEALARM%===
aktueller Alarm Mode (wie %AMODE%)
 
===%MOTION%===
Wert des Reading lastMotion von HOMEMODE
 
===%NAME%===
Name des HOMEMODE Geräts selbst (identisch zu %SELF%)
 
===%OPEN%===
Wert des Reading contactsOutsideOpen von HOMEMODE
 
===%OPENCT%===
Wert des Reading contactsOutsideOpen_ct von HOMEMODE
 
===%OPENHR%===
Wert des Reading contactsOutsideOpen_hr von HOMEMODE
 
===%PANIC%===
0 wenn panic ausgeschaltet ist<br>
1 wenn panic eingeschaltet ist
 
===%RESIDENT%===
Name des zu letzt ausgelösten ROOMMATE/GUEST
 
===%PRESENT%===
presence von HOMEMODE
0 wenn absent
1 wenn present
 
===%PRESENTR%===
presence des zu letzt ausgelösten ROOMMATE/GUEST
0 wenn absent
1 wenn present
 
===%PRESSURE%===
Wert des Reading pressure von HOMEMODE
 
===%PREVAMODE%===
vorheriger modeAlarm von HOMEMODE
 
===%PREVCONTACT%===
vorheriger geöffneter Kontaktsensor
 
===%PREVMODE%===
vorheriger mode von HOMEMODE
 
===%PREVMODER%===
vorheriger state des zu letzt ausgelösten ROOMMATE/GUEST
 
===%PREVMOTION%===
vorheriger geöffneter Bewegungsmelder
 
===%SEASON%===
Wert des Reading season von HOMEMODE
 
===%SELF%===
Name des HOMEMODE Geräts selbst (identisch zu %NAME%)
 
===%SENSORSBATTERY%===
Liste aus Internal SENSORSBATTERY
 
===%SENSORSCONTACT%===
Liste aus Internal SENSORSCONTACT
 
===%SENSORSENERGY%===
Liste aus Internal SENSORSENERGY
 
===%SENSORSMOTION%===
Liste aus Internal SENSORSMOTION
 
===%SENSORSSMOKE%===
Liste aus Internal SENSORSSMOKE
 
===%SMOKE%===
Wert des Reading alarmSmoke von HOMEMODE
0 wenn kein Alarm
 
===%SMOKECT%===
Wert des Reading alarmSmoke_ct von HOMEMODE
 
===%SMOKEHR%===
Wert des Reading alarmSmoke_hr von HOMEMODE
 
===%TAMPERED%===
Wert des Reading sensorsTampered von HOMEMODE
 
===%TAMPEREDCT%===
Wert des Reading sensorsTampered_ct von HOMEMODE
 
===%TAMPEREDHR%===
Wert des Reading sensorsTampered_hr von HOMEMODE
 
===%TEMPERATURE%===
Wert des Reading temperature von HOMEMODE
 
===%TEMPERATURETREND%===
Wert des Reading temperatureTrend von HOMEMODE
 
===%TOBE%===
are/sind oder is/ist der Wetterkondition
 
===%TWILIGHT%===
Wert des Reading twilight von HOMEMODE
 
===%TWILIGHTEVENT%===
aktuelles twilight Event
 
===%UWZ%===
UWZ Warnlevel
 
===%UWZLONG%===
alle aktuellen UWZ Warnungen (lange Version)
 
===%UWZSHORT%===
alle aktuellen UWZ Warnungen (kurze Version)
 
===%WEATHER%===
Wert von "get <HOMEMODE> weather short"
 
===%WEATHERLONG%===
Wert von "get <HOMEMODE> weather long"


====HomeCMDmotion-off====
===%WIND%===
Befehle die bei Ende der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen<br>
Wert des Reading wind von HOMEMODE
Auslöser: Ende der Bewegung eines beliebigen Bewegungsmelders


====HomeCMDmotion-on====
===%WINDCHILL%===
Befehle die bei Beginn der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen<br>
Wert des Reading wind_chill vom eingebundenen Wetter Gerät
Auslöser: Beginn der Bewegung eines beliebigen Bewegungsmelders


====HomeCMDpresence-<absent/present>====
==verfügbar in den HomeCMDcontact, HomeCMDmotion und HomeCMDalarm Attributen==
Befehle die bei Änderung von presence ausgeführt werden sollen<br>
===%ALIAS%===
Auslöser: Änderung presence<br>
alias des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors
'''Beispiel für "HomeCMDpresence-present":'''
set w_Steckdosen [FILTER=state!=on] on;
set Heizungen [FILTER=controlManu!=off] controlMode auto


====HomeCMDpresence-<absent/present>-device====
===%SENSOR%===
Befehle die bei Änderung von presence, ausgelöst durch ein beliebiges Presence Device, ausgeführt werden sollen<br>
name des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors
Auslöser: Änderung presence, ausgelöst durch beliebiges Presence Device<br>
'''Beispiel für "HomeCMDpresence-present-device":'''
{
  # mindestens 1x täglich den Batteriewert des PRESENCE Geräts bei erkannter Anwesenheit holen
  `sudo /opt/fhem/scripts/GTag-bat.sh %DEVICE% %ADDRESS% &`
    if ("%DEVICE%" =~ /^PRESENCE_/ && (!defined ReadingsVal("%DEVICE%","battery",undef) || ReadingsAge("%DEVICE%","battery",0) > 64800));
}


====HomeCMDpresence-<absent/present>-resident====
===%STATE%===
Befehle die bei Änderung von presence, ausgelöst durch einen beliebigen Resident, ausgeführt werden sollen<br>
state des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors
Auslöser: Änderung presence, ausgelöst durch beliebigen Resident<br>
'''Beispiel für "HomeCMDpresence-absent-resident":'''
{
  fhem "msg %ALIAS% hat gerade die Wohnung verlassen!"
    if ("%RESIDENT%" ne "rr_Dan" && ReadingsVal("rr_Dan","presence","") ne "present");
  my $t;
  $t .= "Bis bald und auf Wiedersehen %ALIAS%..." if ("%RESIDENT%" ne "rr_Dan");
  $t .= " ACHTUNG!!! Es ist %TEMPERATURE%°C kalt! Somit könnte es glatt werden!" if (%ICE%);
  fhem "msg \@%RESIDENT% $t" if ($t);
}
'''Beispielcode für "HomeCMDpresence-present-resident":'''
{
  if ("%RESIDENT%" ne "rr_Dan")
  {
    fhem "msg audio %ALIAS% kommt gerade!" if ("%LOCATION%" ne "arrival");
    my $dt = "%DAYTIME%";
    my $g = $d eq "Nacht" ? "gute" : "guten";
    fhem "msg \@%RESIDENT% Willkommen und $g $d %ALIAS%!";
  }
}


==verfügbar in den HomeTextWeatherForecast Attributen==
===%CONDITION%===
Wert des Readings condition des eather Geräts


====HomeCMDpresence-<absent/present>-<ROOMMATE/GUEST>====
===%DAY%===
Befehle die bei Änderung von presence, ausgelöst durch einen bestimmten Resident, ausgeführt werden sollen<br>
Tag der Wettervorhersage (1 - heute, 2 - morgen)
Auslöser: Änderung presence, ausgelöst durch bestimmten Resident<br>


====HomeCMDpresence-<absent/present>-<ROOMMATE/GUEST-NAME>-<DEVICE-NAME>====
===%HIGH%===
Befehle die bei Änderung von presence, ausgelöst durch ein bestimmtes Presence Device eines bestimmten Resident, ausgeführt werden sollen<br>
maximale Temperatur der Wettervorhersage
Dieses Attribut ist nur verfügbar wenn ein Resident mehr als ein Presence Device hat<br>
Auslöser: Änderung presence, ausgelöst durch bestimmtes Presence Device eines bestimmten Resident


====HomeCMDseason====
===%LOW%===
Befehle die bei Änderung der Jahreszeit ausgeführt werden sollen<br>
minimale Temperatur der Wettervorhersage
Auslöser: Änderung Jahreszeit<br>
'''Beispiel'''
{
  my $t = "%SEASON%";
  $t .= "s" if ($t eq "Frühling");
  fhem "msg push Die Wohnung ist nun im $t-Modus!";
  fhem "set Heizungen [FILTER=controlMode!=auto] controlMode auto" if ($t ne "Sommer");
}


====HomeCMDseason-<SEASON>====
==verfügbar in den HomeCMDevent Attributen==
Befehle die bei Änderung der Jahreszeit in eine bestimmte Jahreszeit ausgeführt werden sollen<br>
===%CALENDAR%===
Auslöser: Änderung bestimmte Jahreszeit
Name der Kalenders


====HomeCMDtwilight====
===%DESCRIPTION%===
Befehle die bei Änderung der Dämmerung ausgeführt werden sollen<br>
Beschreibung des aktuellen Event des Kalenders (nicht verfügbar bei holiday Geräten)
Auslöser: Änderung Dämmerung


====HomeCMDtwilight-<sr/sr_astro/sr_civil/sr_indoor/sr_weather/ss/ss_astro/ss_civil/ss_indoor/ss_weather>====
===%EVENT%===
Befehle die bei Änderung zu bestimmter Dämmerung ausgeführt werden sollen<br>
Name/Titel des aktuellen Event des Kalenders
Auslöser: Änderung zu bestimmter Dämmerung


====HomeCMDuwz-warn====
===%PREVEVENT%===
Befehle die bei Beginn/Ende der UWZ Warnungen ausgeführt werden sollen<br>
Name/Titel des vorherigen Event des Kalenders
Auslöser: Beginn/Ende der UWZ Warnungen


====HomeCMDuwz-warn-begin====
==verfügbar in den HomeCMDdevice Attributen==
Befehle die bei Beginn der UWZ Warnungen ausgeführt werden sollen<br>
===%DEVICE%===
Auslöser: Beginn der UWZ Warnungen<br>
name der deaktivierten Geräts
'''Beispiel:'''
msg %UWZLONG%


====HomeCMDuwz-warn-end====
===%ALIAS%===
Befehle die beim Ende der UWZ Warnungen ausgeführt werden sollen<br>
alias der deaktivierten Geräts
Auslöser: Ende der UWZ Warnungen<br>
'''Beispiel:'''
msg Alle Unwetterwarnungen sind nun beendet!


==Benötigte Events==
=Benötigte Events=
Folgende Events werden von HOMEMODE ausgewertet bzw. werden benötigt damit HOMEMODE vollumfänglich funktionieren kann.
Folgende Events werden von HOMEMODE ausgewertet bzw. werden benötigt damit HOMEMODE vollumfänglich funktionieren kann.


Zeile 1.416: Zeile 1.887:
   </tr>
   </tr>
   <tr>
   <tr>
     <td>"HomeYahooWeatherDevice"</td>
     <td>"HomeWeatherDevice"</td>
     <td>humidity</td>
     <td>humidity</td>
   </tr>
   </tr>
Zeile 1.476: Zeile 1.947:
   </tr>
   </tr>
</table>
</table>
==verfügbare Platzhalter==
''noch zu befüllen''

Aktuelle Version vom 28. Mai 2021, 09:39 Uhr

HOMEMODE
Zweck / Funktion
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.
Allgemein
Typ Hilfsmodul
Details
Dokumentation EN / DE
Thema
Support (Forum) Automatisierung
Modulname 22_HOMEMODE.pm
Ersteller DeeSPe
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!

Diese Seite beschreibt die Konfiguration und Verwendung des Moduls 22_HOMEMODE.pm.

Allgemeines

Das Modul 22_HOMEMODE.pm wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden.
Die hier aufgeführte Anleitung entspricht dem Modul in Version 1.4.2.

Viele allgemein typische Automationen sind bereits fertig integriert.

Die jeweils per Event auszuführenden Befehle können in den entsprechenden HomeCMD... Atributen hinterlegt werden und so in der Detail Ansicht des HOMEMODE Geräts übersichtlich angezeigt und bearbeitet werden.

Das Anlegen vieler notify/DOIF ist durch den Einsatz von HOMEMODE unnötig.

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.

HOMEMODE Device.png

Voraussetzungen

Um Modul 22_HOMEMODE.pm benutzen zu können benötigt man als Mindestvoraussetzung ein bereits angelegtes RESIDENTS Gerät mit entsprechenden ROOMMATE/GUEST Geräten.

Mögliche Automationen

Alle Automationen sind optional.

Hier ein paar Beispiele:

  • Änderung des Zustands von ROOMMATE/GUEST Geräten anhand von PRESENCE Geräten
  • Bereitstellung von CMD Attributen für mögliche Events rund um den Heim-/Hausstatus
  • Bereitstellung von Platzhaltern innerhalb der CMD Attribute, z.B. %MODE%, %SEASON% oder %PREVMODE% für die Werte der Readings mode, season und prevMode
  • 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
  • Einbindung von Bewegungs Sensoren, für z.B. automatische Licht Schaltungen oder Alarm Meldungen in bestimmten Alarm Modus - kann pro Bewegungs Sensor konfiguriert werden
  • Darstellungen und Auslösen von Sabotage Alarmen der eingebundenen Kontakt- und Bewegungssensoren
  • Einbindung von jeweils einem Temperatur und Luftfeuchtigkeitssensor
  • Einbindung eines lokalen Wetter Devices zur Ermittlung und Ausgabe der lokalen Wetterdaten und Erzeugung der Wettervorhersage
  • Einbindung von Power und Energy Sensoren zur Ermittlung der Gesamtmengen
  • Einbindung von Calendar/holiday Devices für spezielle im HOMEMODE Device verfügbar zu machende Events
  • von Uhrzeit abhängiger Anwesend-Modus
  • Bewohner unabhängige Tageszeit-Modus
  • Alarm-Modus
  • DND-Modus
  • Überwachung von Batteriewerten

HOMEMODE-Gerät

Definition

Das HOMEMODE Gerät - hier mit dem Namen Home versehen - selbst wird über

define Home HOMEMODE

bei Vorhandensein nur eines RESIDENTS Geräts definiert.

Bei Verwendung mehrerer RESIDENTS Geräte muss das Master RESIDENTS Gerät beim Definieren mit angegeben werden

define Home HOMEMODE rgr_Residents

Dieses Modul verwendet das globale Attribut language zur Bestimmung der Anzeigedaten (Standard: EN=english). Für deutsche Ausgabedaten kann das Attribut

attr global language DE

gesetzt werden.
Alternativ kann auch nur das HOMEMODE Gerät auf deutsch geändert werden

attr Home HomeLanguage DE

Set-Befehle

set <required> [optional]

set Home anyoneElseAtHome <on/off>

einschalten wenn jemand anderes zu Hause ist der kein registrierter ROOMMATE/GUEST ist, z.B. Hund/Katze oder unregistrierte Gäste
wenn eingeschaltet, dann wird der Alarm Mode beim Verlassen statt auf armaway nur auf armhome gestellt
schaltet man ein und hat schon Haus/Wohnung verlassen, so wird der Alarm Mode von armaway auf armhome gestellt
Platzhalter %AEAH% ist in allen HomeCMD Attributen verfügbar

set Home dnd <on/off>

schaltet den "Bitte nicht stören" Modus ein
z.B. um Benachrichtigungen zu deaktivieren
Platzhalter %DND% ist in allen HomeCMD Attributen verfügbar

set Home dnd-for-minutes <MINUTES>

schaltet den "Bitte nicht stören" Modus für die angegebenen Minuten ein
kehrt danach zum vorherigen (tageszeitabhängigen) Modus zurück

set Home deviceDisable <DEVICE>

deaktiviert das Gerät für sämtliche HOMEMODE Automationen
Platzhalter %DISABLED% ist in allen HomeCMD Attributen verfügbar
Platzhalter %DEVICE% und %ALIAS% sind in allen HomeCMD Attributen verfügbar

set Home deviceEnable <DEVICE>

reaktiviert das Gerät für sämtliche HOMEMODE Automationen
Platzhalter %DISABLED% ist in allen HomeCMD Attributen verfügbar
Platzhalter %DEVICE% und %ALIAS% sind in allen HomeCMD Attributen verfügbar

set Home location <arrival/home/bed/underway/wayhome>

manueller Ortswechsel
Platzhalter %LOCATION% ist in allen HomeCMD Attributen verfügbar

set Home mode <morning/day/afternoon/evening/night/gotosleep/asleep/absent/gone/home>

manueller Moduswechsel
Platzhalter %MODE% und %PREVMODE% sind in allen HomeCMD Attributen verfügbar

set Home modeAlarm <armaway/armhome/armnight/disarm>

schaltet den angegebenen Alarm Modus ein
Platzhalter %AMODE% und %PREVAMODE% sind in allen HomeCMD Attributen verfügbar

set Home modeAlarm-for-minutes <armaway/armhome/armnight/disarm> <MINUTES>

schaltet den angegebenen Alarm Modus für die angegebenen Minuten ein kehrt danach zum vorherigen Alarm Modus zurück

set Home updateHomebridgeMapping

aktualisiert das Attribut homebridgeMapping des HOMEMODDE Device abhängig von den verfügbaren Informationen

set Home updateInternalForce

führt eine Aktualisierung der Internals des HOMEMODE Device aus
das sollte manuell benutzt werden nachdem das Modul aktualisiert und nur ein reload statt restart gemacht wurde
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)

Get-Befehle

get <required> [optional]

get Home contactsOpen <all/doorsinside/doorsoutside/doorsmain/outside/windows>

Liste von all/doorsinside/doorsoutside/doorsmain/outside/windows offenen Kontakten
Platzhalter %OPEN%, %OPENCT% und %OPENHR% sind in allen HomeCMD Attributen verfügbar

get Home devicesDisabled

Anzeige der für HOMEMODE deaktivierten Geräte
Platzhalter %DISABLED% ist in allen HomeCMD Attributen verfügbar

get Home mode

Anzeige von mode
Platzhalter %MODE% ist in allen HomeCMD Attributen verfügbar

get Home modeAlarm

Anzeige von modeAlarm
Platzhalter %AMODE% und %MODEALARM% sind in allen HomeCMD Attributen verfügbar

get Home publicIP

holen der öffentlichen IP Adresse
Platzhalter %IP% ist in allen HomeCMD Attributen verfügbar

get Home sensorsTampered

Liste aller sabotierten Sensoren
Platzhalter %TAMPERED%, %TAMPEREDCT% und %TAMPEREDHR% sind in allen HomeCMD Attributen verfügbar

get Home weather <long/short>

Wetterinfo im angegebenen Format anzeigen
Platzhalter %WEATHER% und %WEATHERLONG% sind in allen HomeCMD Attributen verfügbar

get Home weatherForecast [TAG]

Wettervorhersage für angegebenen Tag
wenn kein Tag angegeben wird, so wird die Vorhersage für morgen (2) ausgegeben
Platzhalter %FORECAST% (morgen) und %FORECASTTODAY% (heute) sind in allen HomeCMD Attributen verfügbar

webCmd

Die Schaltmöglichkeiten sind absichtlich gering gehalten, denn im normalen Betrieb sollte nicht mehr benötigt werden als die hier gebotenen.
Es lässt sich der Alarm Mode manuell umschalten und beim Klick auf das devStateIcon wird der DND Mode an- und ausgeschaltet.

Konfiguration

Grundkonfiguration

Diese Grundkonfiguration sollte immer als erstes erfolgen um entsprechend darauf weiter aufzubauen. Als zweiter Schritt ist dann die erweiterte Konfiguration angedacht.

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 "Home" 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.

Attribute

HomeAdvancedUserAttr

Als Erstes wird empfohlen, gerade für Anfänger, das Attribut "HomeAdvancedUserAttr" auf 1 zu setzen. Dadurch werden viel mehr HomeCMD Attribute freigeschaltet. Diese werden im Attribut userattr des HOMEMODE Device hinzugefügt.
Standardwert: 0

HomeAutoAlarmModes

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.
Bei Modus "absent" des HOMEMODE Device wird automatisch auf "armaway" geschaltet.
Bei Modus "home" des HOMEMODE Device wird automatisch auf "disarm" geschaltet.
Bei Modus "asleep" des HOMEMODE Device wird automatisch auf "armnight" geschaltet.
Alarm Modus "armhome" kann nur manuell gesetzt werden.
Werte: 0 oder 1
Standardwert: 1

HomeAutoArrival

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 "arrival" 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 "arrival" gesetzt.
Nach Ablauf der hier eingestellten Minuten wechselt das jeweilige Device von "arrival" auf "home", sofern es noch die location "arrival" hat.
Werte: 0 bis 5999.9
Standardwert: 0

HomeAutoAsleep

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 "asleep" setzt.
Werte: 0 bis 5999.9
Standardwert: 0

HomeAutoAwoken

Ist hier ein Wert größer 0 angegeben, so wird beim Erwachen ("awoken" oder "home nach asleep") jedes ROOMMATE/GUEST dieser auf "awoken" gesetzt und ein Timer gestartet, der den jeweiligen ROOMMATE/GUEST nach der hier angegeben Zeit in Minuten auf "home" setzt.
Werte: 0 bis 5999.9
Standardwert: 0

HomeAutoDaytime

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.
Werte: 0 oder 1
Standardwert: 1

HomeResidentCmdDelay

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.
Je genauer der Name des jeweiligen HomeCMD Attributs beschrieben wird, desto später wird dieser ausgeführt.
Das heißt z.B. dass HomeCMDmode vor HomeCMDmode-absent und dieser wiederrum vor HomeCMDmode-absent-ROOMMATE/GUEST-NAME ausgeführt wird usw.
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.
Werte: 0 bis unendlich in Sekunden
Standardwert: 1

Konfiguration Presence Devices (automatische anwesend/abwesend Umschaltung von ROOMMATE/GUEST)

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.
Im Attribut HomePresenceDeviceType kann man den zu suchenden TYPE von Presence Device vorgeben.
Per Default werden nur Devices vom TYPE PRESENCE gesucht und versucht den ROOMMATE/GUEST zuzuweisen.
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 "presence" Reading mit den Werten "present/appeared" und "absent/disappeared" 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.

Beispiel

Der Device Name meines ROOMMATE ist "rr_Dan".
Auf der Suche nach dem zugehörigen Presence Device wird der erste Teil (rr_ oder rg_) weggeschnitten und der Rest in Kleinbuchstaben umgewandelt.
Mit dem was übrig bleibt, bei mir also nur dan, werden die möglichen Presence Devices versucht zu erkennen.
Mein zugehöriges Presence Device heißt, historisch gewachsen, PRESENCE_rr_Dan und würde somit problemlos zugeordnet werden können.
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:

pdan
danp
ZDan
DANZ
wenndannsonst

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 "pdani", 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.
Wenn die Namen wirklich absolut eindeutig sind, dann könnte man den Regex im Attribut HomePresenceDeviceType sogar auf ".*" setzen.

Werden pro ROOMMATE/GUEST mehrere Presence Devices gefunden und zugeordnet, so wird automatisch dass Attribut HomePresenceDeviceAbsentCount-<NAME-ROOMMATE/GUEST> 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-<NAME-ROOMMATE/GUEST>.

Attribute

HomeAutoPresence

Ist dieses Attribut auf 1 gesetzt, so werden die ROOMMATE/GUEST Devices automatisch zum Status ihrer zugehörigen PRESENCE Devices geschaltet.
PRESENCE Device present - ROOMMATE/GUEST home
PRESENCE Device absent - ROOMMATE/GUEST absent
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
Damit ein Device als Presence Device erkannt werden kann, muss dieses über ein presence Reading verfügen.
Werte: 0 oder 1
Standardwert: 0

HomeAutoPresenceSuppressState

unterdrücke Anwesenheitsänderung in angegebenen State(s) der RESIDENTS
z.B. für "mysteriös" verschwindende Anwesenheitsgeräte in der Nacht
Werte: asleep|awoken|gotosleep
Standardwert:

HomePresenceDeviceType

Regex des TYPEs/der TYPEn von Presence Devices
Werte: Regex der Device TYPEn
Standardwert: PRESENCE

Erweiterte Konfiguration

Um das HOMEMODE Device vollumfänglich zu benutzen ist es sinnvoll weitere Devices (zur Überwachung) hinzuzufügen.

Die bereits möglichen hinzuzufügenden Devices werden hier folgend nach Attributnamen erklärt.

Attribute zum Hinzufügen weiterer Geräte

HomeEventsCalendarDevices

Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.
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.
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.
Diese Devices stellen zusätzlich die Platzhalter %CALENDAR%, %EVENT% und %PREVEVENT% in den HomeCMDevent Attributen zur Verfügung. %CALENDAR% wird dann durch den Namen, %EVENT% durch das aktuelle Event und %PREVEVENT% durch das vorherige Event des jeweiligen Kalenders ersetzt.
Werte: frei wählbar
Werteformat: Devspec von holiday/Calendar Geräten
Standardwert:

HomeEventsHolidayDevices

Hier ist ein Devspec von holiday/Calendar Device(s) anzugeben.
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.
Es werden alle Typen von holiday Events (1,2,3,4,5) unterstützt.
Bei Calendar sind auch gleichzeitig startende/laufende Events möglich, sie müssen nur unterschiedliche Titel haben (summary).
Der jeweilige Event Text kann auch Leerzeichen enthalten, welche in den HomeCMD Attributen durch Bindestriche (-) ersetzt werden.
Diese Devices stellen zusätzlich die Platzhalter %CALENDAR%, %EVENT% und %PREVEVENT% in den HomeCMDevent Attributen zur Verfügung. %CALENDAR% wird dann durch den Namen, %EVENT% durch das aktuelle Event und %PREVEVENT% durch das vorherige Event des jeweiligen Kalenders ersetzt.
Werte: frei wählbar
Werteformat: Devspec von holiday/Calendar Geräten
Standardwert:

HomeSensorAirpressure

Luftdrucksensor aussen
Werte: frei wählbar
Werteformat: Name des Sensors
Standardwert:

HomeSensorHumidityOutside

Hier ist der Name des (Haupt)Aussensensors für Luftfeuchtigkeit anzugeben. Dieser muss ein Reading humidity besitzen.
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.
Dieser Sensor stellt den Platzhalter %HUMIDITY% für den Wert des Readings humidity zur Verfügung.
Werte: frei wählbar
Werteformat: Device Name mit Reading humidity
Standardwert:

HomeSensorTemperatureOutside

Hier ist der Name des (Haupt)Aussentemperatursensors anzugeben. Dieser muss mindestens ein Reading temperature besitzen.
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.
Dieser Sensor stellt den Platzhalter %TEMPERATURE% für den Wert des Readings temperature zur Verfügung.
Werte: frei wählbar
Werteformat: Device Name mit Reading temperature und optional humidity
Standardwert:

HomeSensorsContact

Hier können alle Kontakt Sensoren als Devspec hinterlegt werden.
Diese Devices stellen zusätzlich die Platzhalter %ALIAS%, %SENSOR% und %STATE% in den HomeCMDcontact Attributen zur Verfügung. %ALIAS% wird dann durch den Alias, %SENSOR% durch den Namen und %STATE% durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.
Werte: frei wählbar
Werteformat: Devspec
Standardwert:
In meinem Falle sind das optische und magnetische Kontaktsensoren vom HomeMatic. HM-SEC-SCO und HM-SEC-SC-2.
Darum ist bei mir als Devspec model=HM-SEC-SC(O|-2) eingetragen um alle diese Kontaktsensoren zu erfassen.
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.
Des weiteren werden beim Übernehmen dieses Attributs jedem Kontaktsensor folgende Attribute im Attribut userattr hinzugefügt:

HomeContactType

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
Werte: doorinside,dooroutside,doormain,window
Werteformat: vorgegebene Werteauswahl
Standardwert: window

HomeModeAlarmActive

Regex der Alarm Mode(s) in denen der Kontaktsensor eine erfolgte Öffnung als Alarm melden soll.
Werte: armaway|armhome|armnight
Werteformat: Regex von Alarm Modes
Standardwert: armaway

HomeOpenDontTriggerModes

Regex der Mode(s) des HOMEMODE Device in denen keine Offen Warnungen erfolgen sollen.
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.
Ist hier z.B. "gotosleep|asleep" 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.
Werte: alle Modes des HOMEMODE Device
Werteformat: Regex von Modes
Standardwert:

HomeOpenDontTriggerModesResidents

Devspec der ROOMMATE/GUEST Devices deren Status statt der Modes des HOMEMODE Device für Attribut HomeOpenDontTriggerModes benutzt werden soll.
Werte: alle überwachten ROOMMATE/GUEST
Werteformat: Devspec
Standardwert:

HomeOpenMaxTrigger

Maximale Anzahl an Warnmeldungen
Werte: 0 bis ~
Werteformat: ganze Zahl
Standardwert:

HomeOpenTimes

Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.
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.
Werte: frei wählbar
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2.5
Standardwert: 10

HomeOpenTimesDividers

Leerzeichenseparierte Liste von Offenwarnzeit Teilern.
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. "2 1 2 3" ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactOpenTimeDividers des HOMEMODE Device.
Werte: frei wählbar
Werteformat: leerzeichenseparierte Liste von Zahlen mit einer Kommmastelle, z.B. 2 1 2 2.5
Standardwert:

HomeReadings

Zwei leerzeichenseparierte Readings für open und sabotage Status.
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsContactReadings des HOMEMODE Device.
Werte: frei wählbar
Werteformat: zwei Wörter
Standardwert: state sabotageError

HomeValues

Regex der Werte die für offen und sabotiert stehen.
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactValues des HOMEMODE Device.
Werte: frei wählbar
Werteformat: Regex
Standardwert: open|tilted|on

HomeSensorsContactReadings

Zwei leerzeichenseparierte Readings für open und sabotage Status.
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.
Werte: frei wählbar
Werteformat: zwei Wörter
Standardwert: state sabotageError

HomeSensorsContactValues

Regex der Werte die für offen und sabotiert stehen.
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.
Werte: frei wählbar
Werteformat: Regex
Standardwert: open|tilted|on

HomeSensorsContactOpenTimeDividers

Leerzeichenseparierte Liste von Offenwarnzeit Teilern.
Es müssen so viele Werte angegeben werden wie in HomeSeasons Jahreszeiten hinterlegt worden sind (Default 4).
Bei einer normalen Offenwarnzeit von 10 Minuten und den hier anzugebenen Teilern z.B. "2 1 2 3" ergeben sich für Frühling und Herbst Offenwarnzeiten von jeweils 5 Minuten und im Winter 3.3 Minuten.
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeOpenTimesDividers in jedem Sensor überschrieben werden.
Werte: frei wählbar
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 2 1 2 2.5 (für 4 Jahreszeiten)
Standardwert:

HomeSensorsContactOpenTimeMin

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.
Werte: frei wählbar
Werteformat: eine Zahle mit max. einer Kommmastelle, z.B. 2.5
Standardwert:

HomeSensorsContactOpenTimes

Leerzeichenseparierte Liste von Offen Warnung Zeiten in Minuten.
Der erste Wert entspricht der ersten Zeit, der zweite Wert der zweiten Zeit usw.
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.
Werte: frei wählbar
Werteformat: leerzeichenseparierte Liste von Zahlen mit max. einer Kommmastelle, z.B. 7.5
Standardwert: 10

HomeSensorsLuminance

Devspec von (Innen-)Lichtsensoren deren Durchschnittswert berechnet werden soll
Werte: frei wählbar
Werteformat: Devspec
Standardwert:

HomeSensorsMotion

Hier können alle Bewegungs Sensoren als Devspec hinterlegt werden.
Diese Devices stellen zusätzlich die Platzhalter %ALIAS%, %SENSOR% und %STATE% in den HomeCMDmotion Attributen zur Verfügung. %ALIAS% wird dann durch den Alias, %SENSOR% durch den Namen und %STATE% durch den aktuellen state des zuletzt ausgelösten Kontakts ersetzt.
Werte: frei wählbar
Werteformat: Devspec
Standardwert:

In meinem Falle sind das Fibaro Motion Sensor Gen4/5.
Darum ist bei mir als Devspec modelId=010f-0801-1001|010f-0800-1001 eingetragen um alle diese Bewegungssensoren zu erfassen.
Damit bei den Gen5 Sensoren auch das open im reading state steht, habe ich mir bei diesen Sensoren ein userReading angelegt.
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.
Des weiteren werden beim Übernehmen dieses Attributs jedem Bewegungssensor folgende Attribute im Attribut userattr hinzugefügt:

HomeModeAlarmActive

Regex der Alarm Mode(s) in denen der Bewegungssensor eine erfolgte Öffnung als Alarm melden soll.
Werte: armaway|armhome|armnight
Werteformat: Regex von Alarm Modes
Standardwert: armaway

HomeReadings

2 leerzeichenseparierte Readings für open und sabotage.
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsMotionReadings des HOMEMODE Device.
Werte: frei wählbar
Werteformat: zwei Wörter
Standardwert: state sabotageError

HomeSensorLocation

Standort des Bewegungssensors (außen oder innen) - wird standardmäßig beim Hinzufügen zum HOMEMODE Device auf "inside" gesetzt, sollte jedoch für jeden Kontaktsensor einzeln überprüft werden
Werte: inside,outside
Werteformat: vorgegebene Werteauswahl
Standardwert: inside

HomeValues

Regex der Werte die für offen und sabotiert stehen.
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsMotionValues des HOMEMODE Device.
Werte: frei wählbar
Werteformat: Regex
Standardwert: open|on

HomeSensorsMotionReadings

2 leerzeichenseparierte Readings für open und sabotage.
Die hier eingetragenen Readings sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeReadings in jedem Sensor überschrieben werden.
Werte: frei wählbar
Werteformat: zwei Wörter
Standardwert: state sabotageError

HomeSensorsMotionValues

Regex der Werte die für offen und sabotiert stehen.
Die hier eingetragenen Werte sind global für alle Kontaktsensoren, können aber durch setzen des Attributs HomeValues in jedem Sensor überschrieben werden.
Werte: frei wählbar
Werteformat: Regex
Standardwert: open|on

HomeSensorsPowerEnergy

Hier können alle Energie Sensoren als Devspec hinterlegt werden. Diese müssen die beiden Readings power und energy besitzen.
Anhand dieser Readings wird dann der Gesamtverbrauch und die derzeitige gesamte Leistungsaufnahme berechnet.
In meinem Falle sind das Fibaro Wall Plugs Gen4/5.
Darum ist bei mir als Devspec modelId=010f-0600-1000|010f-0602-1001 eingetragen um alle diese Energie Sensoren zu erfassen.
Werte: frei wählbar
Werteformat: Devspec mit vorhandenen energy und power Readings
Standardwert:

HomeSensorsSmoke

Devspec mit Rauchmeldern
Werte: frei wählbar
Werteformat: Devspec
Standardwert:

HomeSensorWindspeed

Sensor für Windgeschwindigkeit
Werte: frei wählbar
Werteformat: Name des Sensors und Reading der Windgeschwindigkeit separiert mit : (z.B. ga_Windsensor:wind)
Standardwert:

HomeSensorsBattery

Devspec von Batteriesensoren mit einem Reading "battery"
Werte: frei wählbar
Werteformat: Devspec
Standardwert:

HomeTriggerAnyoneElseAtHome

auslösendes Gerät für anyoneElseAtHome
Werte: frei wählbar
Werteformat: device:reading:valueOn:valueOff
Standardwert:

HomeTriggerPanic

auslösendes Gerät für Panikalarm
valueOff ist optional, wird es weggelassen, so fungiert valueOn als toggle
Werte: frei wählbar
Werteformat: device:reading:valueOn[:valueOff]
Standardwert:

HomeTwilightDevice

Hier ist der Name des lokalen Twilight Device anzugeben.
Diese Device stellt zusätzlich die Platzhalter %LIGHT%, %TWILIGHT% und %TWILIGHTEVENT% in den HomeCMD Attributen zur Verfügung. %LIGHT% wird dann durch das Reading light, %TWILIGHT% durch das Reading twilight und %TWILIGHTEVENT% durch das aktuelle Twilight Event ersetzt.
Werte: frei wählbar
Werteformat: Devspec
Standardwert:

HomeUWZ

Hier ist der Name des lokalen UWZ Geräts anzugeben.
Platzhalter %UWZ%, %UWZSHORT% und %UWZLONG% sind verfügbar in allen HomeCMD Attributen
Werte: frei wählbar
Werteformat: Name des UWZ Geräts
Standardwert:

HomeWeatherDevice

Hier ist der Name des lokalen Weather Geräts anzugeben.
Diese Device stellt zusätzlich einige Platzhalter zur Verfügung. Für die genaue Beschreibung derer siehe "Platzhalter".
Werte: frei wählbar
Werteformat: Devspec
Standardwert:

HomeText Attribute

Die HomeText Attribute sind größtenteils zur Übersetzung einiger benötigter Begriffe gedacht.
In den speziellen Attributen die mit HomeTextWeather anfangen, sind ganze Texte mit entsprechenden Platzhaltern einzufügen.

HomeTextAndAreIs

Übersetzung für "and", "are" und "is"
Werte: frei wählbar separiert mit |
Werteformat: Wort/Wörter
Standardwert: and|are|is
Beispiel:

und|sind|ist

HomeTextClosedOpen

Übersetzung für "closed" und "open"
Werte: frei wählbar separiert mit |
Werteformat: Wort
Standardwert: closed|open
Beispiel:

geschlossen|geöffnet

HomeTextNosmokeSmoke

Übersetzung für "no smoke" und "smoke"
Werte: frei wählbar separiert mit |
Werteformat: Wort
Standardwert: no smoke|smoke
Beispiel:

kein Rauch|Rauch

HomeTextRisingConstantFalling

Übersetzung für "rising", "constant" und "falling"
Werte: frei wählbar separiert mit |
Werteformat: Wort
Standardwert: rising|constant|falling
Beispiel:

steigend|gleichbleibend|fallend

HomeTextTodayTomorrowAfterTomorrow

Übersetzung für "today", "tomorrow" und "day after tomorrow"
Werte: frei wählbar separiert mit |
Werteformat: Wort
Standardwert: today|tomorrow|day after tomorrow
Beispiel:

Heute|Morgen|Übermorgen

HomeTextWeatherNoForecast

Übersetzung für "No forecast available" - Text wenn keine Wettervorhersage verfügbar ist
Werte: frei wählbar
Werteformat: Text
Standardwert: No forecast available
Beispiel:

Es ist leider keine Wettervorhersage für den angegebenen Tag verfügbar!

HomeTextWeatherForecastInSpecDays

Text mit Platzhaltern für Wettervorhersage in 4-10 Tagen
spezielle Platzhalter die nur in diesem Attribut gültig sind: %CONDITION%, %DAY%, %HIGH% und %LOW%
Werte: frei wählbar
Werteformat: Text mit Platzhaltern
Standardwert:
Beispiel:

In %DAY% Tagen %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.

HomeTextWeatherForecastToday

Text mit Platzhaltern für Wettervorhersage für heute
spezielle Platzhalter die nur in diesem Attribut gültig sind: %CONDITION%, %DAY%, %HIGH% und %LOW%
Werte: frei wählbar
Werteformat: Text mit Platzhaltern
Standardwert:
Beispiel:

%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.

HomeTextWeatherForecastTomorrow

Text mit Platzhaltern für Wettervorhersage für morgen/übermorgen
spezielle Platzhalter die nur in diesem Attribut gültig sind: %CONDITION%, %DAY%, %HIGH% und %LOW%
Werte: frei wählbar
Werteformat: Text mit Platzhaltern
Standardwert:
Beispiel:

%DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.

HomeTextWeatherLong

Langer Text mit Platzhaltern für aktuelle Wetterdaten
Werte: frei wählbar
Werteformat: Text mit Platzhaltern
Standardwert:
Beispiel:

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.

HomeTextWeatherShort

Kurzer Text mit Platzhaltern für aktuelle Wetterdaten
Werte: frei wählbar
Werteformat: Text mit Platzhaltern
Standardwert:
Beispiel:

%CONDITION%, %TEMPERATURE%°C, %HUMIDITY%% Luftfeuchtigkeit, Luftdruck %PRESSURE%hPa

weitere Attribute

Viele weitere Dinge lassen sich anpassen.

HomeAdvancedDetails

mehr Details anzeigen, abhängig von den zu HOMEMODE hinzugefügten Geräten
Werte: none, detail, both, room
Werteformat: Auswahlliste
Standardwert: none

HomeDaytimes

Eigene Tageszeiten als Paare aus Zeit|Wort
Werte: Zeit|Wort Paare separiert mit Leerzeichen
Werteformat: Zeit|Wort
Standardwert: 05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night
Beispiel:

00:00|Mitternacht
00:05|Nacht
06:30|Morgen
10:00|Vormittag
13:00|Mittag
14:30|Nachmittag
17:30|Vorabend
19:00|Abend
23:00|Spätabend

HomeIcewarningOnOffTemps

2 leerzeichenseparierte Temperaturen für das Ein- und Ausschalten der Eiswarnung.
Werte: frei wählbar
Werteformat: zwei leerzeichenseparierte Temperaturen mit maximal einer Kommastelle
Standardwert: 2 3

HomeModeAlarmArmDelay

Zeit in Sekunden um das aktivieren der Alarmschaltung zu verzögern.
Werte: 0 bis 99999
Werteformat: einzelne Zahl (gleiche Verzögerung für alle modeAlarm) oder 3 leerzeichenseparierte Zahlen für jeden modeAlarm (Reihenfolge: armaway armnight armhome)
Standardwert: 0

HomeAtTmpRoom

Diesen Raum zu temporäre at(s) hinzufügen die von HOMEMODE generiert werden
Werte: frei wählbar
Werteformat: Wort
Standardwert:

HomePresenceDeviceAbsentCount-<ROOMMATE/GUEST>

Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf "absent" zu setzen
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde
Werte: 0 bis ~
Werteformat: einzelne Zahl
Standardwert: maximale Anzahl von verfügbaren Presence Geräten für jeden ROOMMATE/GUEST

HomePresenceDevicePresentCount-<ROOMMATE/GUEST>

Anzahl der dem ROOMMATE/GUEST zugeordneten Presence Geräte um den jeweiligen ROOMMATE/GUEST auf "present" zu setzen
Das Attribut ist nur verfügbar wenn mehr als ein Presence Gerät pro ROOMMATE/GUEST gefunden/zugeordnet wurde
Werte: 0 bis ~
Werteformat: einzelne Zahl
Standardwert: 1

HomePublicIpCheckInterval

Interval in Minuten für die Überprüfung der öffentlichen IP-Adresse
Werte: 0 bis 99999
Werteformat: einzelne Zahl
Standardwert: 0 (deaktiviert)

HomeSeasons

Eigene Jahreszeiten als Paare aus Datum|Wort
Werte: Datum|Wort Paare separiert mit Leerzeichen
Werteformat: Datum|Wort
Standardwert: 03.01|spring 06.01|summer 09.01|autumn 12.01|winter
Beispiel:

03.01|Frühling
06.01|Sommer
09.01|Herbst
12.01|Winter

HomeSensorsBatteryLowPercentage

Prozentsatz um einen Batteriesensor mit geringer Batterie anzuzeigen (nur bei Sensoren die ihren Batteriewert prozentual angeben)
Werte: frei wählbar
Werteformat: Zahl
Standardwert: 50

HomeSensorsBatteryReading

Reading der Batteriesensoren welches statt "battery" benutzt werden soll
Werte: frei wählbar
Werteformat: einzelnes Wort
Standardwert: battery

HomeSensorsLuminanceReading

Reading der Lichtsensoren welches statt "luminance" benutzt werden soll
Werte: frei wählbar
Werteformat: einzelnes Wort
Standardwert: luminance

HomeSensorsPowerEnergyReadings

Readings der Power/Energy Sensoren welche statt "power" und "energy" benutzt werden sollen
Werte: frei wählbar
Werteformat: 2 leerzeichenseparierte Wörter
Standardwert: power energy

HomeSensorsSmokeReading

Readings der Rauchmelder welche statt "state" benutzt werden sollen
Werte: frei wählbar
Werteformat: ein Wort
Standardwert: state

HomeSensorsSmokeValue

Regex der Auslösewerte von Rauchmeldern
Werte: frei wählbar
Werteformat: RegEx
Standardwert: on

HomeSpecialLocation

Hier können eigene zusätzliche location(s) als kommaseparierte Liste angegeben werden.
Diese können dann über "set <HOMEMODE> location <LOCATION>" gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.
Werte: frei wählbar
Werteformat: kommaseparierte Liste von Wörtern
Standardwert:

HomeSpecialModes

Hier können eigene zusätzliche mode(s) als kommaseparierte Liste angegeben werden.
Diese können dann über "set <HOMEMODE> mode <MODE>" gesetzt werden. Dazu passend werden HomeCMD Attribute erstellt.
Werte: frei wählbar
Werteformat: kommaseparierte Liste von Wörtern
Standardwert:

HomeTrendCalcAge

Zeit in Sekunden für das Maximalalter des vorherigen Wertes für die Trendberechnung
Werte: frei wählbar
Werteformat: Zeit in Sekunden
Standardwert: 900

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.

HomeCMD Attribute (mit Beispielen)

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.

Bei Perl-Code innerhalb der HomeCMD Attribute gibt es hier Besonderheiten.

  • Im Gegensatz zur FHEM-Eingabezeile müssen hier keine Semikolon verdoppelt werden
  • Kommetarzeilen sind zulässig
  • Kommentare am Ende einer Perl-Zeile sind nicht zulässig

Typischer Weise werden in den HomeCMD Attributen weitere Module angesprochen.
Z.B. benutze ich für jegliche Form der Benachrichtigung den msg Befehl.

Keines der HomeCMD Attribute hat einen Standardwert. Es müssen alle Befehle selbst programmiert werden.

Platzhalter die Text(e) (string) beinhalten, müssen im Perl-Code in Anführungszeichen gesetzt werden (Beispiel %SENSOR%).
Platzhalter die Zahlen beinhalten (int,float) sollten nicht in Anführungszeichen gesetzt werden damit Zahlenvergleiche (mittels ==, <=, >=, >, <) funktionieren (Beispiel %LIGHT%, %ICE% oder %TEMPERATURE%).

HomeCMDalarmSmoke

Befehle die beim Anfang/Ende eines Rauchalarms ausgeführt werden sollen.

HomeCMDalarmSmoke-off

Befehle die beim Ende eines Rauchalarms ausgeführt werden sollen.
Auslöser: Ende Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders
Beispiel:

msg push ENTWARNUNG: Alle Rauchalarme sind beendet!

HomeCMDalarmSmoke-on

Befehle die bei einem Rauchalarm ausgeführt werden sollen.
Auslöser: Rauchalarm eines beliebigen (von HOMEMODE überwachten) Rauchmelders
Beispiel:

{
  my $is = "meldet";
  $is = "melden" if (%SMOKECT% > 1);
  fhem "msg push ACHTUNG: %SMOKEHR% $is Rauchalarm!";
}

HomeCMDalarmTampered

Befehle die beim Anfang/Ende eines Sabotage Alarms ausgeführt werden sollen.

HomeCMDalarmTampered-off

Befehle die beim Ende eines Sabotage Alarms ausgeführt werden sollen.
Auslöser: Ende Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors
Beispiel:

msg push ENTWARNUNG: Alle Manipulationen wurden beseitigt!

HomeCMDalarmTampered-on

Befehle die bei einem Sabotage Alarm ausgeführt werden sollen.
Auslöser: Sabotage Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors
Beispiel:

{
  my $is = "ist";
  $is = "sind" if (%TAMPEREDCT% > 1);
  fhem "msg push ACHTUNG: %TAMPEREDHR% $is sabotiert!";
}

HomeCMDalarmTriggered

Befehle die beim Anfang/Ende eines Alarms ausgeführt werden sollen.

HomeCMDalarmTriggered-off

Befehle die beim Ende eines Alarms ausgeführt werden sollen.
Auslöser: Ende Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors
Beispiel:

msg ENTWARNUNG: Alle Alarme sind beendet!

HomeCMDalarmTriggered-on

Befehle die bei einem Alarm ausgeführt werden sollen.
Auslöser: Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors
Beispiel:

{
  my $is = "ist";
  $is = "sind" if (%ALARMCT% > 1);
  fhem "msg audio,push,light 3 !!! ALARM !!! %ALARMHR% $is ausgelöst!";
}

HomeCMDanyoneElseAtHome

Befehle die beim on/off von anyoneElseAtHome ausgeführt werden sollen.

HomeCMDanyoneElseAtHome-off

Befehle die ausgeführt werden sollen sobald anyoneElseAtHome deaktiviert wird.
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von "armaway" auf "armhome" umgeschaltet damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.
Auslöser: anyoneElseAtHome on
Beispiel:

msg HINWEIS: Es ist nun niemand anderes mehr zu Hause!

HomeCMDanyoneElseAtHome-on

Befehle die ausgeführt werden sollen sobald anyoneElseAtHome aktiviert wird.
Bei Abwesenheit und nicht deaktiviertem HomeAutoAlarmModes wird der Alarm Mode von "armhome" auf "armaway" umgeschaltet damit evtl. vorhandene Bewegungsmelder wieder Alarme melden können.
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 "armhome" statt auf "armaway" damit evtl. vorhandene Bewegungsmelder keinen Alarm mehr melden.
Auslöser: anyoneElseAtHome off
Beispiel:

msg HINWEIS: Es ist nun noch jemand anderes zu Hause!

HomeCMDbatteryLow

Befehle die ausgeführt werden sollen sobald ein Sensor einen niedrigen Batteriewert meldet.
Beispiel:

{
  my $msg;
  $msg = "Die Batterien von %BATTERYLOW% gehen zur Neige und sollten ausgetauscht werden!" if (%BATTERYLOWCT% == 1);
  $msg = "Die Batterien bei folgenden Geräten sollten ausgetauscht werden: %BATTERYLOWALL%" if (%BATTERYLOWCT% > 1);
  fhem "msg push $msg";
}

HomeCMDcontact

Befehle die ausgeführt werden sollen sobald ein Kontaktsensor open/tilted/closed meldet.
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.
Auslöser: Kontaktsensor open/tilted/closed
Beispiel:

{
  my $a = "%ALIAS%";
  $a =~ s/d/D/;
  fhem "msg $a ist nun %STATE%!";
}

HomeCMDcontactClosed

Befehle die ausgeführt werden sollen sobald ein Kontaktsensor geschlossen meldet.
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.
Auslöser: Kontaktsensor closed
Beispiel:

{
  my $a = "%ALIAS%";
  $a =~ s/d/D/;
  fhem "msg $a ist nun geschlossen!";
}

HomeCMDcontactOpen

Befehle die ausgeführt werden sollen sobald ein Kontaktsensor offen meldet.
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.
Auslöser: Kontaktsensor open/tilted
Beispiel:

{
  my $a = "%ALIAS%";
  $a =~ s/d/D/;
  fhem "msg $a ist nun offen!";
}

HomeCMDcontactDoormain

Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted/closed meldet.
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.
Auslöser: Kontaktsensor Type doormain open/tilted/closed
Beispiel:

{
  my $a = "%ALIAS%";
  $a =~ s/d/D/;
  fhem "msg $a ist nun %STATE%!";
}

HomeCMDcontactDoormainClosed

Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain closed meldet.
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.
Auslöser: Kontaktsensor vom Typ doormain wird geschlossen
Beispiel:

{ 
  # Wenn es Ankommende gibt
  if ("%ARRIVERS%")
  {
    # Zusammenstellen der Begrüßung
    my $msg = "Gute";

    # "n" anhängen wenn Tageszeit nicht Nacht ist
    $msg .= "n" if ("%DAYTIME%" ne "Nacht");

    # Leerzeichen einfügen
    $msg .= " ";

    # den Feiertag der Tageszeit voranstellen wenn ein Feiertag im Kalender FEIERTAG ist
    $msg .= "%FEIERTAG%-" if ("%FEIERTAG%");

    # Tageszeit einfügen
    $msg .= "%DAYTIME% ";

    # bei ROOMMATE "zu Hause" in Begrüßung einfügen
    $msg .= "zu Hause " if ("%RESIDENT%" =~ /^rr_/);

    # Ankommende einfügen
    $msg .= "%ARRIVERS%";

    # Begrüßung am Sonos im Flur ausgeben bei Abwesenheit über 60 min
    fhem "msg audio \@fl_Sonos $msg!" if (%DURABSENCELAST% > 60);
  }
}

HomeCMDcontactDoormainOpen

Befehle die ausgeführt werden sollen sobald ein Kontaktsensor des Types doormain open/tilted meldet.
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.
Auslöser: Kontaktsensor vom Typ doormain geöffnet
Beispiel:

{
  my $a = "%ALIAS%";
  $a =~ s/d/D/;
  fhem "msg $a ist nun geöffnet!";
}

HomeCMDcontactOpenWarning1

Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die erste Offenwarnzeit erreicht hat.
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.
Auslöser: erste Offenwarnzeit des Kontakts erreicht
Beispiel:

msg audio %ALIAS% steht noch offen!

HomeCMDcontactOpenWarning2

Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die zweite Offenwarnzeit erreicht hat.
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.
Auslöser: ab Erreichen der zweiten Offenwarnzeit des Kontakts
Beispiel:

msg audio %ALIAS% steht immer noch offen!

HomeCMDcontactOpenWarningLast

Befehle die ausgeführt werden sollen sobald ein Kontaktsensor die letzte Offenwarnzeit erreicht hat.
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.
Auslöser: Erreichen der letzten Offenwarnzeit des Kontakts
Beispiel:

msg audio Das ist der letzte Hinweis %ALIAS% endlich zu schliessen!

HomeCMDdaytime

Befehle die ausgeführt werden sollen sobald sich die Tageszeit (daytime) auf einen beliebigen Wert ändert.
Um die jeweilige eingetretene Tageszeit zu ermitteln ist der Platzhalter %DAYTIME% vorgesehen.
Auslöser: Änderung der Tageszeit (daytime)

HomeCMDdaytime-<DAYTIME>

Befehle die ausgeführt werden sollen sobald die jeweilige Tageszeit (daytime) erreicht ist.
Auslöser: Änderung der Tageszeit (daytime) auf bestimmten Wert
Bei "night" könnte man z.B. die Heizung bewohnerunabhängig ausschalten, bei "morning" wieder ein.

HomeCMDdeviceDisable

Befehle die ausgeführt werden sollen sobald ein Gerät deaktiviert wird.
Auslöser: 'set deviceDisable <DEVICE>'
Beispiel:

{
  speak "Das Gerät %ALIAS% ist nun deaktiviert!";

  # optional wirklich attr disable für Device setzen und Konfig speichern
  #fhem "attr %DEVICE%:FILTER=disable!=1 disable 1; save";

  # ROOMMATE/GUEST auf gone/none setzen wenn Presence Devices deaktiviert werden
  if ("%DEVICE%" =~ /^PRESENCE\d?_(r[rg]_.*)/)
  {
    my $resident = $1;
    my $gone = $resident =~ /^rr_/ ? "gone" : "none";
    fhem "set $resident:FILTER=state!=$gone state $gone";
  }
}

HomeCMDdeviceEnable

Befehle die ausgeführt werden sollen sobald ein Gerät aktiviert wird.
Auslöser: 'set deviceEnable <DEVICE>'
Beispiel:

{
  speak "Das Gerät %ALIAS% ist nun aktiviert!";

  # optional attr disable für Device entfernen und Konfig speichern
  #fhem "deleteattr %DEVICE%:FILTER=disable=1 disable; save";

  # ROOMMATE/GUEST auf home setzen wenn Presence Devices aktiviert werden und anwesend sind
  if ("%DEVICE%" =~ /^PRESENCE\d?_(r[rg]_.*)/)
  {
    fhem "set $1:FILTER=state!=home state home" if (ReadingsVal("%DEVICE%","presence","") eq "present");
  }
}

HomeCMDdnd

Befehle die beim Anfang/Ende des DND Modus ausgeführt werden sollen.
Auslöser: Ende des DND Modus
Beispiel:

{
  if (%DND%)
  {
    fhem "msg audio Der DND Modus ist nun eingeschaltet!";
  }
  else
  {
    fhem "msg audio Der DND Modus ist nun beendet!";
  }
}

HomeCMDdnd-off

Befehle die beim Ende des DND Modus ausgeführt werden sollen.
Auslöser: Ende des DND Modus
Beispiel:

msg audio Der DND Modus ist nun beendet!

HomeCMDdnd-on

Befehle die beim Beginn des DND Modus ausgeführt werden sollen.
Auslöser: Beginn des DND Modus
Beispiel:

msg audio Der DND Modus ist nun eingeschaltet!

HomeCMDevent

Befehle die beim Beginn eines beliebigen (holiday)Kalender Events ausgeführt werden sollen.
Auslöser: Beginn eines beliebigen (holiday)Kalender Events
Platzhalter %CALENDAR%, %EVENT% und %PREVEVENT% können zusätzlich verwendet werden
Beispiel:

{
  fhem "set Weihnachten on" if ("%EVENT%" eq "Weihnachten");
  fhem "set Weihnachten off" if ("%PREVEVENT%" eq "Weihnachten");
}

HomeCMDevent-<KALENDER>-each

Befehle die beim Beginn/Ende eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs ausgeführt werden sollen.
Auslöser: Beginn eines beliebigen (holiday)Kalender Events eines bestimmten KALENDERs
Platzhalter %EVENT% und %PREVEVENT% können zusätzlich verwendet werden
Beispiel für "HomeCMDevent-FEIERTAGE-each":

{
  fhem "set Weihnachten off" if ("%PREVEVENT%" eq "Weihnachten");
}

Beispiel für "HomeCMDevent-URLAUBDAN-each":

{
  if ("%EVENT%" =~ /urlaub/i)
  {
    speak "Dan hat jetzt Urlaub!!!";
  }
  elsif ("%PREVEVENT%" =~ /urlaub/i)
  {
    speak "Der Urlaub von Dan ist nun zu Ende!!!";
  }
}

Beispiel für "HomeCMDevent-WOHNUNG-each":

{
  # Heizung an/aus schalten
  my $heiz = "([bksw]z|ku)_Thermostat";
  if ("%EVENT%" =~ /^heizung(..+)?$/i)
  {
    my $zeit = $1;
    if ("%SEASON%" ne "Sommer")
    {

      # morgens nicht alle Thermostaten schalten
      $heiz = "([bks]z|ku)_Thermostat" if ($zeit && $zeit =~ /morgens?$/i);
      fhem "set $heiz:FILTER=controlMode!=day controlMode day"
    }
  }
  elsif ("%PREVEVENT%" =~ /^heizung/i)
  {
    fhem "set $heiz:FILTER=controlMode!=night controlMode night" if ("%SEASON%" ne "Sommer");
  }

  # WLAN an/aus schalten
  elsif ("%EVENT%" =~ /^wlan|wifi|wi-fi/i)
  {
    fhem "set Router wifi off";
  }
  elsif ("%PREVEVENT%" =~ /^wlan|wifi|wi-fi/i)
  {
    fhem "set Router wifi on";
  }

  # G-Tag für Putzfrau (de)aktivieren
  elsif ("%EVENT%" =~ /^putz/i)
  {
    fhem "set %NAME% deviceEnable PRESENCE_rg_Inge";
  }
  elsif ("%PREVEVENT%" =~ /^putz/i)
  {
    fhem "set %NAME% deviceDisable PRESENCE_rg_Inge";
  }

  # G-Tag für Gast (de)aktivieren
  elsif ("%EVENT%" =~ /g([aä]|ae)st/i)
  {
    fhem "set %NAME% deviceEnable PRESENCE_rg_Gast";
  }
  elsif ("%PREVEVENT%" =~ /g([aä]|ae)st/i)
  {
    fhem "set %NAME% deviceDisable PRESENCE_rg_Gast";
  }
}

HomeCMDevent-<KALENDER>-<EVENT>-begin

Befehle die beim Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.
Auslöser: Beginn eines bestimmten (holiday)Kalender EVENTs eines bestimmten KALENDERs
Platzhalter %PREVEVENT% kann zusätzlich verwendet werden
Beispiel für "HomeCMDevent-FEIERTAGE-Neujahr-begin":

set %SENSORSENERGY% meterReset

HomeCMDevent-<KALENDER>-<EVENT>-end

Befehle die bei Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.
Auslöser: Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs
Platzhalter %PREVEVENT% kann zusätzlich verwendet werden

HomeCMDfhemDEFINED

Befehle die ausgeführt werden sollen wenn ein neues Gerät angelegt wird (define)
Beispiel:

{
  # Jedem neu definierten Gerät den Geräte-TYPE auch als Raum im Menüpunkt Module zuweisen
  fhem "attr %DEFINED% room Module->".InternalVal("%DEFINED%","TYPE","default");
}

HomeCMDfhemINITIALIZED

Befehle die ausgeführt werden sollen wenn FHEM gestartet wurde
Beispiel:

msg FHEM Home wurde gestartet...

HomeCMDfhemSAVE

Befehle die ausgeführt werden sollen wenn in FHEM die Konfigurationsdatei gespeichert wird
Beispiel (Backup von fhem.cfg und fhem.state):

{
  # Datum/Uhrzeit
  my $now = TimeNow();
  # Leerzeichen durch Unterstriche ersetzen
  $now =~ s/ /_/g;
  # Backup der Datei fhem.cfg
  `cp $attr{global}{configfile} ./backup/fhem.cfg.$now`;
  # Log-Ausgabe der gespeicherten Datei
  Log3 undef,3,"saved ./backup/fhem.cfg.$now";
  # Backup der Datei fhem.state
  `cp $attr{global}{statefile} ./backup/fhem.state.$now`;
  # Log-Ausgabe der gespeicherten Datei
  Log3 undef,3,"saved ./backup/fhem.state.$now";
}

HomeCMDfhemUPDATE

Befehle die ausgeführt werden sollen wenn das Update von FHEM ausgeführt wurde
Beispiel:

msg audio Das Update für FHEM ist beendet!

HomeCMDicewarning

Befehle die bei Anfang/Ende der Eiswarnung ausgeführt werden sollen
Auslöser: icewarning 0/1
Beispiel:

{
  if (%ICE%)
  {
    fhem "msg push ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!";
  }
  else
  {
    fhem "msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!.";
  }
}

HomeCMDicewarning-off

Befehle die bei Ende der Eiswarnung ausgeführt werden sollen
Auslöser: icewarning 0
Beispiel:

msg audio Es sind wieder %TEMPERATURE%°C! Die Glättewarnung ist damit beendet!

HomeCMDicewarning-on

Befehle die bei Beginn der Eiswarnung ausgeführt werden sollen
Auslöser: icewarning 1
Beispiel:

msg audio ACHTUNG!!! Es sind nur noch %TEMPERATURE%°C! Somit könnte es glatt werden!

HomeCMDlocation

Befehle die beim Ändern der location ausgeführt werden sollen.
Auslöser: Änderung location

HomeCMDlocation-<LOCATION>

Befehle die bei Änderung auf eine bestimmte location ausgeführt werden sollen.
Auslöser: Änderung auf bestimmte location

HomeCMDmode

Befehle die beim Ändern von mode ausgeführt werden sollen.
Auslöser: Änderung mode

HomeCMDmode-absent-belated

Befehle die nachträglich zur Abwesenheit ausgeführt werden sollen, die Zeit kann im Atteribut "HomeModeAbsentBelatedTime" eingestellt werden
Auslöser: Abwesenheit + XX min
Beispiel:

set Heizungen [FILTER=controlManu!=off] controlMode night

HomeCMDmode-<MODE>

Befehle die bei Änderung auf einen bestimmten mode ausgeführt werden sollen.
Auslöser: Änderung auf bestimmten mode
Beispiel für "HomeCMDmode-absent":

set HarmonyHub:FILTER=activity!=PowerOff activity PowerOff;
set wz_Ventilator:FILTER=speed!=0 speed 0;
set TYPE=SONOSPLAYER:FILTER=Volume>0 Volume 0;
set Sonos stopAll;
sleep 3;
set Wohnung [FILTER=state!=off] off"

Beispiel für "HomeCMDmode-asleep":

define atTmp_wz_Media_aus_%SELF% at +01:00:00 set HarmonyHub:FILTER=currentActivity!=PowerOff activity PowerOff;
define atTmp_wz_Venti_aus_%SELF% at +01:00:00 set wz_Ventilator:FILTER=speed!=0 speed 0;
define atTmp_wzLS_aus_%SELF% at +00:30:00 set wz_LS scene aus;
define atTmp_all_Sonos_vol_down_%SELF% at +00:02:00 set TYPE=SONOSPLAYER:FILTER=Volume!=0 Volume 0 1;
define atTmp_all_Sonos_off_%SELF% at +00:02:30 set Sonos stopAll;
set [sw]z_Auto(Music|Light):FILTER=state!=off off;
set Heizungen [FILTER=controlManu!=off] controlMode night

Beispiel für "HomeCMDmode-awoken":

set [sw]z_Auto(Music|Light):FILTER=state!=on on

Beispiel für "HomeCMDmode-gone":

set Heizungen [FILTER=controlManu!=off] controlManu off

HomeCMDmode-<MODE>-resident

Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen beliebigen Resident, ausgeführt werden.
Auslöser: Änderung mode von beliebigem Resident ausgelöst
Beispiel für "HomeCMDmode-asleep-resident":

msg audio @%AUDIO% Guten Nacht und schlaf' gut %ALIAS%!

Beispiel für "HomeCMDmode-awoken-resident":

{
  my $msg = "Guten";
  $msg .= " %FEIERTAG%" if ("%FEIERTAG%");
  $msg .= " Morgen %ALIAS%";
  fhem "msg audio \@%AUDIO% $msg";
  fhem "defmod atTmp_wetter_%RESIDENT%_%SELF% at +00:07:00 msg audio Wettervorhersage für heute: %FORECASTTODAY%";
}

HomeCMDmode-<MODE>-<ROOMMATE/GUEST>

Befehle die bei Änderung auf einen bestimmten mode, ausgelöst durch einen bestimmten Resident, ausgeführt werden.
Auslöser: Änderung mode von bestimmten Resident ausgelöst

HomeCMDmodeAlarm

Befehle die beim Ändern von modeAlarm ausgeführt werden sollen.
Auslöser: Änderung modeAlarm

HomeCMDmodeAlarm-<armaway/armhome/armnight/disarm>

Befehle die bei Änderung auf einen bestimmten modeAlarm ausgeführt werden sollen.
Auslöser: Änderung auf bestimmten modeAlarm
Beispiel für "HomeCMDmodeAlarm-armaway":

{
  if ("%PREVAMODE%" eq "disarm")
  {
    # Alarmanlage einschalten
    fhem "set AA_Arm:FILTER=level!=100 alarmLevel armAll";

    # Nachricht zusammensetzen
    my $msg;
    $msg .= "Die Alarmanlage ist nun scharf geschaltet!";
    my $is = "%ALARMHR%" =~ /und/ ? "sind" : "ist";
    $msg .= " " if ($msg);
    $msg .= "ACHTUNG: %ALARMHR% $is noch offen!!!" if (%ALARMCT%);

    # Nachricht an ROOMMATE/GUEST senden
    fhem "msg \@%RESIDENT% $msg" if ($msg);

    # Eingangstür abschließen falls noch nicht geschehen
    fhem "set fl_Tuerschloss:FILTER=state!=locked lock";
  }
}

Beispiel für "HomeCMDmodeAlarm-armhome":

AA_Arm:FILTER=level!=25 alarmLevel armExtSens;
set fl_Tuerschloss:FILTER=state!=locked lock

Beispiel für "HomeCMDmodeAlarm-armnight":

AA_Arm:FILTER=level!=25 alarmLevel armExtSens;
set fl_Tuerschloss:FILTER=state!=locked lock

Beispiel für "HomeCMDmodeAlarm-disarm":

{
  # Alarmanlage ausschalten
  fhem "set AA_Arm:FILTER=level!=0 alarmLevel disarmed";
  my $prio = "";

  # Nachrichtenpriorität auf 1 setzen bei Ankunft (höhere Lautstärke beim Abspielen damit man das auch vor der Tür hört)
  $prio = " 1" if ("%LOCATION%" eq "arrival");

  # Nachricht an ROOMMATE/GUEST senden wenn der vorherige alarmMode nicht "armnight" ist
  fhem "msg audio \@fl_Sonos$prio Die Alarmanlage ist nun ausgeschaltet %ALIAS%!" if ("%PREVAMODE%" ne "armnight");
}

HomeCMDmotion

Befehle die bei Statusänderung eines beliebigen Bewegungsmelders ausgeführt werden sollen
Auslöser: öffnen/schließen eines beliebigen Bewegungsmelders
Beispiel:

{
  # Raum aus Sensornamen ermitteln, z.B. bz_Sensor
  my $room = (split /_/,"%SENSOR%")[0];

  # Status des structure aller Lichter dieses Raums
  my $lichter = Value($room."_Lichter");

  # Status des dummy Tageslicht
  my $tl = Value("Tageslicht");

  if ("%STATE%" eq "geöffnet")
  {
    # Lichtwert des Sensors
    my $lum = ReadingsNum("%SENSOR%","luminance",100);

    # Löschen des evtl. schon vorhandenen "at"
    fhem "delete atTmp_Bewegungsmelder_Licht_aus_".$room."_%SELF%" if (IsDevice("atTmp_Bewegungsmelder_Licht_aus_".$room."_%SELF%"));

    # Licht nur wenn kein Tageslicht oder Lichtwert des Sensors kleiner als 10 und AutoLight eingeschaltet und modeAlarm nicht armaway
    if (($tl eq "off" || $lum < 10) && $lichter eq "off" && Value($room."_AutoLight") eq "on" && "%AMODE%" ne "armaway")
    {
      my $scene;

      # verschiedene Szenen für verschiedene Modus bzw. Aussenlichtstärken
      if ("%MODE%" eq "gotosleep")
      {
        $scene = "Abend";
      }
      elsif ("%MODE%" eq "asleep")
      {
        $scene = "Nacht";
      }
      elsif (%LIGHT% > 3)
      {
        $scene = "viel";
      }
      elsif (%LIGHT% < 4)
      {
        $scene = "mittel";
      }

      # Schalten der entsprechenden Szene (Modul LightScene)
      fhem "set ".$room."_LS scene $scene" if ($scene);
    }
  }
  else
  {
    # unterschiedliche Ausschaltzeiten für unterschiedliche Räume
    my $t = 3;
    $t = 15 if ($room eq "wz");
    $t = 2 if ($room eq "bz" || ($room =~ /wz|ku/ && "%MODE%" =~ /sleep/));
    $t = 1 if ($room eq "fl");

    # Zahl in Minuten umrechnen in einen Zeitpunkt für das "at"
    my $d = HOMEMODE_hourMaker($t);

    # Anlegen des "at" zum Ausschalten des Lichts wenn die Lichter angeschaltet sind und auch AutoLight eingeschaltet ist
    if ($lichter ne "off" && Value($room."_AutoLight") eq "on")
    {
      my $cmd = "set ".$room."_LS scene aus";
      fhem "defmod atTmp_Bewegungsmelder_Licht_aus_".$room."_%SELF% at +$d $cmd";
    }
  }
}

HomeCMDmotion-off

Befehle die bei Ende der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen
Auslöser: Ende der Bewegung eines beliebigen Bewegungsmelders

HomeCMDmotion-on

Befehle die bei Beginn der Bewegung eines beliebigen Bewegungsmelders ausgeführt werden sollen
Auslöser: Beginn der Bewegung eines beliebigen Bewegungsmelders

HomeCMDpresence-<absent/present>

Befehle die bei Änderung von presence ausgeführt werden sollen
Auslöser: Änderung presence
Beispiel für "HomeCMDpresence-present":

set w_Steckdosen [FILTER=state!=on] on;
set Heizungen [FILTER=controlManu!=off] controlMode auto

HomeCMDpresence-<absent/present>-device

Befehle die bei Änderung von presence, ausgelöst durch ein beliebiges Presence Device, ausgeführt werden sollen
Auslöser: Änderung presence, ausgelöst durch beliebiges Presence Device
Beispiel für "HomeCMDpresence-present-device":

{
  # mindestens 1x täglich den Batteriewert des PRESENCE Geräts bei erkannter Anwesenheit holen
  fhem '"sudo /opt/fhem/scripts/GTag-bat.sh %DEVICE% %ADDRESS% &"'
    if ("%DEVICE%" =~ /^PRESENCE_/ && (!defined ReadingsVal("%DEVICE%","battery",undef) || ReadingsAge("%DEVICE%","battery",0) > 64800));
}

HomeCMDpresence-<absent/present>-resident

Befehle die bei Änderung von presence, ausgelöst durch einen beliebigen Resident, ausgeführt werden sollen
Auslöser: Änderung presence, ausgelöst durch beliebigen Resident
Beispiel für "HomeCMDpresence-absent-resident":

{
  # Mich benachrichtigen wenn ich nicht zu hause bin und jemand anderes die Wohnung verlässt
  fhem "msg push \@rr_Dan %ALIAS% hat gerade die Wohnung verlassen!"
    if ("%RESIDENT%" ne "rr_Dan" && ReadingsVal("rr_Dan","presence","") ne "present");

  # Verabschiedungsnachricht zusammensetzen
  my $msg;

  # Alle außer mich selbst verabschieden
  $msg .= "Bis bald und auf Wiedersehen %ALIAS%..." if ("%RESIDENT%" ne "rr_Dan");

  # Glättewarnung wenn nötig
  $msg .= " ACHTUNG!!! Es ist %TEMPERATURE%°C kalt! Somit könnte es glatt werden!" if (%ICE%);

  # Nachricht senden wenn vorhanden
  fhem "msg \@%RESIDENT% $msg" if ($msg);
}

Beispielcode für "HomeCMDpresence-present-resident":

{
  # alle Ankommenden außer mir selbst
  if ("%RESIDENT%" ne "rr_Dan")
  {
    # Benachrichtigung wenn jemand kommt
    fhem "msg audio %ALIAS% kommt gerade!" if ("%LOCATION%" ne "arrival");

    # Nachricht an Ankommende(n) zusammensetzen
    my $g = "gute";
    $g .= "n" if ("%DAYTIME%" ne "Nacht);

    # Nachricht an Ankommende(n) senden 
    fhem "msg \@%RESIDENT% Willkommen und $g %DAYTIME% %ALIAS%!";
  }
}

HomeCMDpresence-<absent/present>-<ROOMMATE/GUEST>

Befehle die bei Änderung von presence, ausgelöst durch einen bestimmten Resident, ausgeführt werden sollen
Auslöser: Änderung presence, ausgelöst durch bestimmten Resident

HomeCMDpresence-<absent/present>-<ROOMMATE/GUEST>-<DEVICE>

Befehle die bei Änderung von presence, ausgelöst durch ein bestimmtes Presence Device eines bestimmten Resident, ausgeführt werden sollen
Dieses Attribut ist nur verfügbar wenn ein Resident mehr als ein Presence Device hat
Auslöser: Änderung presence, ausgelöst durch bestimmtes Presence Device eines bestimmten Resident

HomeCMDseason

Befehle die bei Änderung der Jahreszeit ausgeführt werden sollen
Auslöser: Änderung Jahreszeit
Beispiel

{
  my $t = "%SEASON%";
  $t .= "s" if ($t eq "Frühling");
  fhem "msg push Die Wohnung ist nun im $t-Modus!";
  fhem "set Heizungen [FILTER=controlMode!=auto] controlMode auto" if ($t ne "Sommer");
}

HomeCMDseason-<SEASON>

Befehle die bei Änderung der Jahreszeit in eine bestimmte Jahreszeit ausgeführt werden sollen
Auslöser: Änderung bestimmte Jahreszeit

HomeCMDtwilight

Befehle die bei Änderung der Dämmerung ausgeführt werden sollen
Auslöser: Änderung Dämmerung

HomeCMDtwilight-<sr/sr_astro/sr_civil/sr_indoor/sr_weather/ss/ss_astro/ss_civil/ss_indoor/ss_weather>

Befehle die bei Änderung zu bestimmter Dämmerung ausgeführt werden sollen
Auslöser: Änderung zu bestimmter Dämmerung

HomeCMDuwz-warn

Befehle die bei Beginn/Ende der UWZ Warnungen ausgeführt werden sollen
Auslöser: Beginn/Ende der UWZ Warnungen

HomeCMDuwz-warn-begin

Befehle die bei Beginn der UWZ Warnungen ausgeführt werden sollen
Auslöser: Beginn der UWZ Warnungen
Beispiel:

msg %UWZLONG%

HomeCMDuwz-warn-end

Befehle die beim Ende der UWZ Warnungen ausgeführt werden sollen
Auslöser: Ende der UWZ Warnungen
Beispiel:

msg Alle Unwetterwarnungen sind nun beendet!

Platzhalter

verfügbar in allen HomeCMD Attributen

%ADDRESS%

MAC Adresse des zuletzt ausgelösten Presence Geräts

%ALARM%

Liste mit Namen der ausgelösten Alarm Geräte
Wert ist 0 wenn kein Alarm Device ausgelöst ist

%ALARMCT%

Anzahl der ausgelösten Alarm Geräte

%ALARMHR%

Liste mit (human readable) Namen der ausgelösten Alarm Geräte
Wert ist 0 wenn kein Alarm Device ausgelöst ist
kann z.B. für msg benutzt werden

%ALIAS%

Alias des zuletzt ausgelösten Resident

%AMODE%

aktueller Alarm Mode

%AEAH%

Wert von anyoneElseAtHome
Wert ist 1 wenn on und 0 wenn off

%ARRIVERS%

Alias-Liste der ROOMMATE/GUEST deren location auf arrival steht
kann z.B. dafür benutzt werden um Residents zu begrüßen
z.B. Peter, Paul und Marry

%AUDIO%

Audio Device des zuletzt ausgelösten ROOMMATE/GUEST (Attribut msgContactAudio)
wenn das Attribut msgContactAudio des jeweiligen Resident keinen Wert hat, so wird versucht den Wert des Attributs aus dem globalMsg (sofern vorhanden) auszulesen
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

%BATTERYLOW%

Alias des zu letzt gemeldeten Geräts mit niedrigem Batteriestand

%BATTERYLOWALL%

Wert des Reading batteryLow_hr

%BATTERYLOWCT%

Wert des Reading batteryLow_ct

%CONDITION%

Wert des Reading condition des überwachten weather Device
kann z.B. für Wetter(vorhersage) benutzt werden

%CONTACT%

Wert des Reading lastContact (Name des zuletzt geöffneten Kontakt Sensor)
kann z.B. dafür benutzt werden um msg zu versenden

%DAYTIME%

Wert des Reading daytime
kann z.B. dafür benutzt werden um Tageszeit spezifische Aktionen zu schalten

%DEVICE%

Name des zuletzt ausgelösten Presence Gerät

%DEVICEA%

Wert des Reading lastAbsentByPresenceDevice

%DEVICEP%

Wert des Reading lastPresentByPresenceDevice

%DISABLED%

Wert des Reading devicesDisabled

%DND%

DND Status
1 wenn an, 0 wenn aus

%DURABSENCE%

Wert des Reading durTimerAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST

%DURABSENCELAST%

Wert des Reading lastDurAbsence_cr des zu letzt ausgelösten ROOMMATE/GUEST

%DURPRESENCE%

Wert des Reading durTimerPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST

%DURPRESENCELAST%

Wert des Reading lastDurPresence_cr des zu letzt ausgelösten ROOMMATE/GUEST

%DURSLEEP%

Wert des Reading durTimerSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST

%DURSLEEPLAST%

Wert des Reading lastDurSleep_cr des zu letzt ausgelösten ROOMMATE/GUEST

%<CALENDARNAME>%

Event des benannten Kalenders
0 wenn kein gerade kein Event ist

%<CALENDARNAME-EVENTNAME>%

0 wenn das benannte Event nicht aktiv ist
1 wenn das benannte Event aktiv ist

%FORECAST%

Wettervorhersage für morgen

%FORECASTTODAY%

Wettervorhersage für heute

%HUMIDITY%

Wert des Reading humidity von HOMEMODE

%HUMIDITYTREND%

Wert des Reading humidityTrend von HOMEMODE

%ICE%

0 wenn keine Eiswarnung besteht
1 wenn Eiswarnung besteht

%IP%

Wert des Reading publicIP von HOMEMODE

%LIGHT%

Wert des Reading light von HOMEMODE

%LOCATION%

Wert des Reading location von HOMEMODE

%LOCATIONR%

Wert des Reading location des zu letzt ausgelösten ROOMMATE/GUEST

%LUMINANCE%

Wert des Reading luminance von HOMEMODE

%LUMINANCETREND%

Wert des Reading luminanceTrend von HOMEMODE

%MODE%

gerade aktiver Modus von HOMEMODE (Reading mode)

%MODEALARM%

aktueller Alarm Mode (wie %AMODE%)

%MOTION%

Wert des Reading lastMotion von HOMEMODE

%NAME%

Name des HOMEMODE Geräts selbst (identisch zu %SELF%)

%OPEN%

Wert des Reading contactsOutsideOpen von HOMEMODE

%OPENCT%

Wert des Reading contactsOutsideOpen_ct von HOMEMODE

%OPENHR%

Wert des Reading contactsOutsideOpen_hr von HOMEMODE

%PANIC%

0 wenn panic ausgeschaltet ist
1 wenn panic eingeschaltet ist

%RESIDENT%

Name des zu letzt ausgelösten ROOMMATE/GUEST

%PRESENT%

presence von HOMEMODE 0 wenn absent 1 wenn present

%PRESENTR%

presence des zu letzt ausgelösten ROOMMATE/GUEST 0 wenn absent 1 wenn present

%PRESSURE%

Wert des Reading pressure von HOMEMODE

%PREVAMODE%

vorheriger modeAlarm von HOMEMODE

%PREVCONTACT%

vorheriger geöffneter Kontaktsensor

%PREVMODE%

vorheriger mode von HOMEMODE

%PREVMODER%

vorheriger state des zu letzt ausgelösten ROOMMATE/GUEST

%PREVMOTION%

vorheriger geöffneter Bewegungsmelder

%SEASON%

Wert des Reading season von HOMEMODE

%SELF%

Name des HOMEMODE Geräts selbst (identisch zu %NAME%)

%SENSORSBATTERY%

Liste aus Internal SENSORSBATTERY

%SENSORSCONTACT%

Liste aus Internal SENSORSCONTACT

%SENSORSENERGY%

Liste aus Internal SENSORSENERGY

%SENSORSMOTION%

Liste aus Internal SENSORSMOTION

%SENSORSSMOKE%

Liste aus Internal SENSORSSMOKE

%SMOKE%

Wert des Reading alarmSmoke von HOMEMODE 0 wenn kein Alarm

%SMOKECT%

Wert des Reading alarmSmoke_ct von HOMEMODE

%SMOKEHR%

Wert des Reading alarmSmoke_hr von HOMEMODE

%TAMPERED%

Wert des Reading sensorsTampered von HOMEMODE

%TAMPEREDCT%

Wert des Reading sensorsTampered_ct von HOMEMODE

%TAMPEREDHR%

Wert des Reading sensorsTampered_hr von HOMEMODE

%TEMPERATURE%

Wert des Reading temperature von HOMEMODE

%TEMPERATURETREND%

Wert des Reading temperatureTrend von HOMEMODE

%TOBE%

are/sind oder is/ist der Wetterkondition

%TWILIGHT%

Wert des Reading twilight von HOMEMODE

%TWILIGHTEVENT%

aktuelles twilight Event

%UWZ%

UWZ Warnlevel

%UWZLONG%

alle aktuellen UWZ Warnungen (lange Version)

%UWZSHORT%

alle aktuellen UWZ Warnungen (kurze Version)

%WEATHER%

Wert von "get <HOMEMODE> weather short"

%WEATHERLONG%

Wert von "get <HOMEMODE> weather long"

%WIND%

Wert des Reading wind von HOMEMODE

%WINDCHILL%

Wert des Reading wind_chill vom eingebundenen Wetter Gerät

verfügbar in den HomeCMDcontact, HomeCMDmotion und HomeCMDalarm Attributen

%ALIAS%

alias des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors

%SENSOR%

name des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors

%STATE%

state des zuletzt ausgelösten Kontakt/Bewegungs/Rauchsensors

verfügbar in den HomeTextWeatherForecast Attributen

%CONDITION%

Wert des Readings condition des eather Geräts

%DAY%

Tag der Wettervorhersage (1 - heute, 2 - morgen)

%HIGH%

maximale Temperatur der Wettervorhersage

%LOW%

minimale Temperatur der Wettervorhersage

verfügbar in den HomeCMDevent Attributen

%CALENDAR%

Name der Kalenders

%DESCRIPTION%

Beschreibung des aktuellen Event des Kalenders (nicht verfügbar bei holiday Geräten)

%EVENT%

Name/Titel des aktuellen Event des Kalenders

%PREVEVENT%

Name/Titel des vorherigen Event des Kalenders

verfügbar in den HomeCMDdevice Attributen

%DEVICE%

name der deaktivierten Geräts

%ALIAS%

alias der deaktivierten Geräts

Benötigte Events

Folgende Events werden von HOMEMODE ausgewertet bzw. werden benötigt damit HOMEMODE vollumfänglich funktionieren kann.

DEVICE-TYPE EVENT
RESIDENTS state
presence
ROOMMATE,GUEST state
presence
wayhome
{SENSORSCONTACT} state
sabotageError
"HomeReadings"
"HomeSensorsContactReadings"
{SENSORSMOTION} state
sabotageError
"HomeReadings"
"HomeSensorsMotionReadings"
{SENSORSLUMINANCE} luminance
"HomeSensorsLuminanceReading"
{SENSORSENERGY} power
energy
"HomeSensorsPowerEnergyReadings"
{SENSORSBATTERY} battery
"HomeSensorsBatteryReading"
"HomePresenceDeviceType" presence
"HomeWeatherDevice" humidity
temperature
wind
pressure
"HomeTwilightDevice" light
twilight
aktEvent
pressure
"HomeSensorTemperatureOutside" temperature
humidity
"HomeSensorHumidityOutside" humidity
"HomeSensorWindspeed" "HomeSensorWindspeed"
"HomeSensorAirpressure" "HomeSensorAirpressure"
"HomeEventsHolidayDevices" state
"HomeUWZ" WarnCount