HOMEMODE

Aus FHEMWiki
Version vom 20. Dezember 2017, 01:48 Uhr von DeeSPe (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „{{ Infobox Modul |ModPurpose=Das Modul wurde entworfen um den gesamten Heim-/Hausstatus in einem Gerät abzubilden und viele grundlegende Automationen durch Hi…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
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.

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.

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
  • Bereistellung 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
  • 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 Yahoo 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 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% 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% 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 location <arrival/home/bed/underway/wayhome>

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

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

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

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

schaltet den angegebenen Alarm Modus ein
Platzhalter %AMODE% 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% (contactsOutsideOpen) und %OPENCT% (contactsOutsideOpen_ct) 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% in allen HomeCMD Attributen verfügbar

get Home weather <long/short>

Wetterinfo im angegebenen Format
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) asugegeben
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 wechelt 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

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

HomeEventsHolidayDevices

Hier ist ein Devspec von holiday Device(s) anzugeben.
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 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.
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
Standardwert:

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

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 [b]model=HM-SEC-SC(o|-2)[/b] 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 3 Offenwarnzeit Teilern.
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.
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.
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 2.5 2
Standardwert: 1 1 1

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 3 Offenwarnzeit Teilern.
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.
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.
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 3 Zahlen mit max. einer Kommmastelle, z.B. 2 2.5 2
Standardwert: 1 1 1

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

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:

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:

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

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

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 ist %PRESSURETREND% 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

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:

HomeYahooWeatherDevice

Hier ist der Name des lokalen Yahoo Weather Device 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:

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 $t = "%SMOKEHR%";
  my $s = "meldet";
  $s = "melden" if ($t =~ /und/);
  fhem "msg push ACHTUNG: $t $s 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 $t = "%TAMPEREDHR%";
  my $s = "ist";
  $s = "sind" if ($t =~ /und/);
  fhem "msg push ACHTUNG: $t $s 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 ("%ALARMHR%" =~ /und/);
  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 $t;
  $t .= "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);
  fhem "msg $t";
}

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 Type doormain closed
Beispiel:

{
  my $arr = "%ARRIVERS%";
  if ($arr)
  {
    my $zh = "%RESIDENT%" =~ /rr_Dan|rr_Brina/ ? "zu Hause " : "";
    my $d = "%DAYTIME%";
    my $g = $d eq "Nacht" ? "Gute" : "Guten";
    $d = "%FEIERTAG%-$d" if ("%FEIERTAG%");
    fhem "msg audio $g $d $zh$arr!" 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 Type doormain open/tilted
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! Vielleicht sollte %ALIAS% endlich geschlossen werden!?

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.

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");
}

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
Beispiel für "HomeCMDevent-FEIERTAGE-Silvester-end":

set Silvesterparty off

HomeCMDfhemDEFINED

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

{
  fhem "attr %DEFINED% room ".$defs{"%DEFINED%"}->{TYPE};
}

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):

{
  my $now = Timeow();
  $now =~ s/ /_/g;
  `cp $attr{global}{configfile} ./backup/fhe.cfg.$now`;
  Log3 undef,3,"saved ./backup/fhem.cfg.$now";
  `cp $attr{global}{statefile} ./backup/fhem.sate.$now`;
  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_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.
Auslöser: Änderung mode von beliebigem Resident ausgelöst
Beispiel für "HomeCMDmode-asleep-resident":

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

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

{
  my $t = "Morgen";
  $t = "%FEIERTAG% Morgen" if ("%FEIERTAG%");
  fhem "msg audio Guten $t %ALIAS%";
  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")
  {
    my $t;
    $t .= "Die Alarmanlage ist nun scharf geschaltet!" if ("%RESIDENT%" ne "rr_Dan");
    my $is = "%ALARMHR%" =~ /und/ ? "sind" : "ist";
    $t .= " " if ($t);
    $t .= "ACHTUNG: %ALARMHR% $is noch offen!!!" if (%ALARMCT%);
    fhem "msg \@%RESIDENT% $t" if ($t);
    fhem "set AA_Arm:FILTER=level!=100 alarmLevel armAll";
  }
}

Beispiel für "HomeCMDmodeAlarm-disarm":

{
  fhem "set AA_Arm:FILTER=level!=0 alarmLevel disarmed";
  my $prio = "";
  $prio = " 1" if ("%LOCATION%" eq "arrival");
  fhem "msg audio$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:

{
  my $room = substr("%SENSOR%",0,2);
  my $lichter = Value($room."_Lichter");
  my $tl = Value("Tageslicht");
  if ("%STATE%" eq "geöffnet")
  {
    my $lum = ReadingsNum("%SENSOR%","luminance",100);
    fhem "delete atTmp_Bewegungsmelder_Licht_aus_".$room."_%SELF%" if (IsDevice("atTmp_Bewegungsmelder_Licht_aus_" . $room . "_%SELF%"));
    if (($tl eq "off" || $lum < 10) && $lichter eq "off" && Value($room."_AutoLight") eq "on" && "%AMODE%" ne "armaway")
    {
      my $scene;
      if ("%MODE%" eq "gotosleep")
      {
        $scene = "Abend";
      }
      elsif ("%MODE%" eq "asleep")
      {
        $scene = "Nacht";
      }
      elsif (%LIGHT% > 3)
      {
        $scene = "viel";
      }
      elsif (%LIGHT% < 4)
      {
        $scene = "mittel";
      }
      fhem "set ".$room."_LS scene $scene" if ($scene);
    }
  }
  else
  {
    my $t = 3;
    $t = 15 if ($room eq "wz");
    $t = 2 if ($room eq "bz" || ($room =~ /^wz|ku$/ && "%MODE%" =~ /^gotosleep|asleep$/));
    $t = 1 if ($room eq "fl");
    my $d = HOMEMODE_hourMaker($t);
    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":

{
  `sudo /opt/fhem/scripts/GTag-bat.sh %DEVICE% %ADDRESS% &`
    if ("%DEVICE%" =~ /^(PRESENCE_rr_Dan|PRESENCE_rr_Brina|PRESENCE_rg_Inge)$/ && (!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":

{
  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%!";
  }
}


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-NAME>-<DEVICE-NAME>

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


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
"HomeYahooWeatherDevice" humidity
temperature
wind
pressure
"HomeTwilightDevice" light
twilight
aktEvent
pressure
"HomeSensorTemperatureOutside" temperature
humidity
"HomeSensorHumidityOutside" humidity
"HomeSensorWindspeed" "HomeSensorWindspeed"
"HomeSensorAirpressure" "HomeSensorAirpressure"
"HomeEventsHolidayDevices" state
"HomeUWZ" WarnCount

Platzhalter

noch zu befüllen