Autor Thema: Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr  (Gelesen 17769 mal)

Online DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2609
  • Das könnte EINE mögliche Lösung sein...
Hallo Gemeinschaft,

dieses Modul wurde neu von mir neu entwickelt und ich möchte es Euch hiermit vorstellen, zum Testen zur Verfügung stellen und weiter entwickeln.
Eventuell schafft es das Modul dann auch offiziell in FHEM aufgenommen zu werden. Ich gebe mir jedenfalls Mühe das zu erreichen, da ich von meiner Idee und dem Konzept überzeugt bin. Die Alpha-Tester können das sicher bestätigen. ;)

Meine Absicht mit diesem Modul ist es, dort einzusetzen wo das Modul RESIDENTS aufhört und eine  Übersicht (Readings) für alle nötigen/möglichen Dinge im Haus oder der Wohnung bereitzustellen und somit u.a. auch ein zentrales Device zur Anzeige in den verschiedenen GUIs (in meinem Fall HomeKit) und zur Konfiguration zu haben. Denn wer will schon alle Geräte durchschauen müssen um den Gesamtstatus des Zuhauses zu erfassen?

Vielen Dank an Loredo für das fantastische Modul RESIDENTS an welches ich mit diesem Modul anknüpfen möchte.
Ein ganz besonderer Dank geht an Andre (justme1968), der mir zwar nicht beim Programmieren, dafür aber mit seinen Tipps und Ratschlägen immer sehr gut weitergeholfen hat.

Das Modul stellt ein eigenständiges Device in FHEM zur Verfügung, ist aber im Prinzip nur ein Hilfsgerät, welches ohne ein vorhandenes RESIDENTS Device nicht definiert werden kann. Das ist also die Mindestvorraussetzung zur Benutzung dieses Moduls.

Das Modul soll so viel wie möglich automatisieren, aber auch alle nötigen manuellen Settings zu Verfügung stellen.
Ebenso sollte der Konfigurationsaufwand so gering wie möglich gehalten werden. Was automatisch gemacht werden kann, soll auch automatisch funktionieren. Dafür ist ja schließlich eine Hausautomation da.

Herausgekommen ist mit diesem Modul ein sehr mächtiges Tool wenn man es richtig einzusetzen weiß bzw. einsetzt.

Optional ermöglicht HOMEMODE, durch setzen von "attr <HOMEMODE> HomeAutoPresence 1", eine Verknüpfung der einzelnen ROOMMATE/GUEST Devices mit ihren zugehörigen Presence Device(s). Siehe "Konfiguration Presence Devices".

Des Weiteren soll dieses Modul auch eine zentrale Anlaufstelle für alle Events um eben diesen Haus Modus und seine überwachten Geräte sein.
D.h. im Klartext, dass innerhalb vom HOMEMODE Device für nahezu alle Events der von HOMEMODE überwachten Geräte entsprechende Befehlsattribute (HomeCMD) zur Verfügung stehen in die man FHEM Code und auch Perl Code schreiben kann (und sogar beides gemischt wie in der FHEM Eingabezeile).
Das Mischen von Perl und FHEM Code innerhalb eines HomeCMD Attributs sollte vermieden werden - es könnte nicht funktionieren!
Durch diese Befehlsattribute ist es möglich zu allen sinnvollen Events entsprechende Schaltaktionen vorzugeben.
Man kann sich damit das aufwändige Erstellen von notify(s)/DOIF(s) und allerlei Custom Funktionen in der 99_myUtils.pm die dazu nötig wären einsparen.
Dadurch wird die erste Konfiguration gerade für Anfänger wesentlich leichter! Aber auch für FHEM Profis, da man eben alles in einem Device (HOMEMODE) findet, was sonst wild verstreut in mehreren Dateien zu finden wäre.
Der administrative Aufwand zur Konfiguration wird m.E. durch dieses Modul massiv verringert und übersichtlicher gestaltet!

Ich habe mittlerweile sehr viel Freude mit diesem Modul und ich hoffe es wird euch genauso nützlich sein wie es für mich geworden ist.

Auf Feedback in jeglicher Form freue ich mich sehr. :)

Eine grundlegende Änderung gegenüber dem Alpha-Modul gibt es!
Beim Alpha-Modul mussten die zu kontrollierenden/überwachenden Devices vor disesem Device in der fhem.cfg stehen. Das ist nun bei diesem Modul nicht mehr nötig!

Was das Modul schon kann:
  • Bereistellung eines "Zuhause Modus" Device
  • automatische Anknüpfung an ein Master RESIDENTS Device
  • automatische Verknüpfung von PRESENCE Devices zu ihren RESIDENTS (es sind mehrere PRESENCE Devices pro ROOMMATE/GUEST möglich)
  • Bereistellung von CMD Attributen für mögliche Events rund um den "Zuhause Modus"
  • 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 - ich habe mich primär für diese Kalenderform entschieden weil sie leicht innerhalb von FHEM erstellt und bearbeitet werden kann
  • von Uhrzeit abhängiger Anwesend-Modus (deaktivierbar)
  • Bewohner unabhängige Tageszeit-Modus
  • DND-Modus
  • DND-Modus für bestimmte Zeit (in Minuten)
  • Unterstützung der Jahreszeiten
  • Alarm-Modus
  • Alarm-Modus für bestimmte Zeit (in Minuten)
  • automatische Umschaltung der Alarmanlage je nach Modus von HOMEMODE (deaktivierbar) und manuell schaltbar
  • Unterstützung für location
  • Unterstützung für presence
  • Unterstützung für die Erstellung der benötigten Homebridge Mappings für das HOMEMODE Device
  • und noch mehr...

Einschränkungen:
  • Das Modul kann nur mit dem einem RESIDENTS Device umgehen, falls mehrere RESIDENTS Devices für HOMEMODE benutzt werden sollen, so ist pro RESIDENTS Device auch ein eigenes HOMEMODE Device nötig.

Was ich evtl. noch in das Modul integrieren möchte:
  • neben Yahoo noch Unterstützung weiterer Wetter Device Typen (Wunderground?)
  • Unterstützung weiterer eigener Wetter Sensoren (Wind, Niederschlag, ...)
  • Unterstützung für UWZ
  • Unterstützung weiterer Kalender Typen (iCal?) für zusätzliche Events
  • Unterstützung von Englisch und Deutsch innerhalb des Moduls (deutsche Fehlermeldungen und deutsche States des RESIDENTS Device)
  • Überwachung weiterer Geräte (z.B. Türklingel oder Kühlschränke/Tiefkühler) zum Auslösen bestimmter Befehle beim Türklingeln oder Überschreitung der Grenzwerttemperaturen
  • Überwachung von Batteriewerten und passendem HomeCMD Attribut
  • weitere Platzhalter?

Bekannte Probleme und mögliche Verbesserungen:
  • Nach einem Neustart von FHEM werden die Presence Devices der ROOMMATE/GUEST neu initialisiert. Dadurch ändert sich die Status dieser Devices kurzzeitig. Nach der Initialisierung wechseln die Status dann wieder auf den ursprünglichen Wert. Dadurch werden die Readings lastAbsentByPresenceDevice/lastPresentByPresenceDevice und lastActivityByPresenceDevice ebenfalls durch die zuletzt geprüften Presence Devices erneuert. Ich werde hierfür noch eine Lösung erarbeiten.
  • Ich suche noch nach einer Lösung um auf die doppelten Semikolon im Perl Code in den HomeCMD Attributen verzichten zu können, denn diese haben sich auch bei mir beim Testen als größte Fehlerquelle herausgestellt!





Installation

Die Datei "22_HOMEMODE.pm" in das FHEM Verzeichnis (meist in /opt/fhem/FHEM/) kopieren und FHEM neu starten bzw. einen Reload des Moduls ausführen (reload 22_HOMEMODE).

Die stabile Version des Moduls kann nun über folgenden Befehl innerhalb FHEM installiert/aktualisiert werden:
update all https://raw.githubusercontent.com/deespe/fhem-HOMEMODE/master/controls_HOMEMODE.txt
Wer möchte kann das Repository auch dauerhaft hinzufügen mit:
update add https://raw.githubusercontent.com/deespe/fhem-HOMEMODE/master/controls_HOMEMODE.txtDadurch wird HOMEMODE zusammen mit FHEM aktualisiert.


Definition

Damit das HOMEMODE Device definiert werden kann, muss ein (Master)-RESIDENTS Device vorhanden sein.
Gibt es nur ein RESIDENTS Device, so wird dieses automatisch erkannt und muss bei der Definition nicht speziell angegeben werden.

define <name> HOMEMODE
Gibt es mehr als ein RESIDENTS Device, so muss das (Master)-RESIDENTS Device bei der Definition speziell angegeben werden.

define <name> HOMEMODE [MASTER-RESIDENTS-DEVICE]
Beim der Definition werden die vorhandenen ROMMATE/GUEST Devices aus dem RESIDENTS Device ausgelesen und einzeln im Internal RESIDENTS aufgelistet.

Dieses Modul macht sehr intensiven Gebrauch des Attributs userattr. Ich kann nur empfehlen das Attribut userattr nicht manuell anzupassen, da sämtliche Einträge in diesem Attribut bei Veränderungen am HOMEMODE Device immer wieder neu erstellt werden.


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 habe ich nach einem möglichst kurzem Prefix gesucht und habe mich dann nach vielen Tests 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 sollten. Ebenso habe ich 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.

HomeAdvancedUserAttr
Als Erstes empfehle ich, 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.
Ich persönlich habe diesen Wert auf 10 gesetzt.
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.
Ich persönlich habe diesen Wert auf 10 gesetzt.
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.
Ich persönlich habe diesen Wert auf 10 gesetzt.
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

set

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

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

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

location <arrival/home/bed/underway/wayhome>
manueller Ortswechsel
Platzhalter %LOCATION% in allen HomeCMD Attributen verfügbar

mode <morning/day/afternoon/evening/night/gotosleep/asleep/absent/gone/home>
manueller Moduswechsel
Platzhalter %MODE% in allen HomeCMD Attributen verfügbar

modeAlarm <armaway/armhome/armnight/disarm>
schaltet den angegebenen Alarm Modus ein
Platzhalter %AMODE% in allen HomeCMD Attributen verfügbar

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

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

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


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.


get

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

sensorsTampered
Liste aller sabotierten Sensoren
Platzhalter %TAMPERED% in allen HomeCMD Attributen verfügbar

weather <long/short>
Wetterinfo im angegebenen Format
Platzhalter %WEATHER% und %WEATHERLONG% sind in allen HomeCMD Attributen verfügbar

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


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" und "absent" 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
Zitat von: 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 uneindeutig sind. Wenn es z.B. eine rr_Dana geben würde mit Presence Device Name "pdani", dann würde diese 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>.


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.
Ich persönlich benutze diese Funktion und möchte darauf nicht mehr verzichten.
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.

HomeEventsHolidayDevices
Hier ist ein Devspec von holiday Device(s) anzugeben.
Zitat
Ich empfehle die holiday Dateinen 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:
Zitat
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:
  • 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
  • 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
  • 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

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:
Zitat
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
    Min. zwei max. 3 leerzeichenseparierte Readings für open, sabotage und luminance.
    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
  • 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
  • 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

HomeSensorsMotionReadings
Min. zwei max. 3 leerzeichenseparierte Readings für open, sabotage und luminance.
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.
Zitat
In meinem Falle sind das Fibaro Wall Plugs Gen4/5 und Cyrus Zwischenstecker.
Darum ist bei mir als Devspec modelId=010f-0600-1000|010f-0602-1001|0258-0003-1087 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:

weiter im 2. Beitrag


UPDATE v0.235 (31.1.2017)
  • doppelte Semikolon sind nun nicht mehr nötig im Perl Code, das hat allerdings den Nachteil dass man nun keinen Perl Code mehr mit FHEM Code innerhalb eines HomeCMD Attributs mischen kann/sollte
  • HomeSensorTemperature umbenannt in HomeSensorTemperatureOutside
  • HomeSensorHumidity umbenannt in HomeSensorHumidityOutside
  • HomeCMDcontactOpenRetrigger umbenannt in HomeCMDcontactOpenWarning1
  • HomeCMDcontactOpenRetrigger2 umbenannt in HomeCMDcontactOpenWarning2
  • neues Attribut HomeCMDcontactOpenWarningLast
  • HomeSensorsContactOpenTamperReadings umbenannt in HomeSensorsContactReadings
  • HomeSensorsContactOpenTamperVal umbenannt in HomeSensorsContactValues
  • HomeSensorsMotionOpenTamperReadings umbenannt in HomeSensorsMotionReadings
  • HomeSensorsMotionOpenTamperVal umbenannt in HomeSensorsMotionValues
  • userattr HomeOpenTamperReadings (in hinzugefügten Contact/Motion Sensoren) umbenannt in HomeReadings
  • userattr HomeOpenTamperVal (in hinzugefügten Contact/Motion Sensoren) umbenannt in HomeValues
  • Fehler beseitigt bei Kontakt Offen Warnungen
  • Prüfung integriert ob HomeSensorTemperatureOutside und HomeSensorHumidityOutside identisch sind
  • statt des Attributs comment wird nun das Reading HomeInfo für Informationen vom HOMEMODE Device benutzt
  • von allen Bewegungsmeldern wird nun auch ein durchschnittlicher Lichtwert (Reading luminance) berechnet, sofern vorhanden - der neue Platzhalter %LUMINANCE% ist dafür dazu gekommen - dazu kann in den Attributen HomeSensorsMotionReadings und/oder HomeReadings als dritter Wert das Reading für luminance angegeben werden
  • stündliche Ermittlung der Trends von temperature, humidity und luminance - entsprechende Readings werden erstellt und Platzhalter sind verfügbar
  • neues Attribut HomeTrendCalcAge für das maximale Alter der vorherigen Messung - für Trend Berechnung
  • ganze Kommentarzeilen im eigenen Perl Code sind nun zulässig, Kommentare hinter Perl Code am Ende einer Zeile sind weiterhin NICHT zulässig
  • Anfang von Übersetzungen in Deutsch, Hinweise und Fehlermeldungen sind bereits deutsch, Log Einträge bleiben englisch
  • manuelles Setzen von mode ist nun nur noch mit deaktiviertem HomeAutoDaytime möglich (attr <HOMEMODE> HomeAutoDaytime 0)
  • Ausführungsproblem von HomeCMDlocation-.... behoben
  • commandref aktualisiert


UPDATE v0.237 (8.2.2017)
  • Prüfung ob beim Definieren übergebenes RESIDENTS Device existiert
  • einige Ausbesserungen in der commandref


UPDATE v0.239 (19.2.2017)
  • Falls die GetUpdate Funktion stehen bleiben sollte, wird diese nun automatisch wieder gestartet


UPDATE v0.242 (23.2.2017)
  • einige kleine Fehlerkorrekturen
  • HomeSensorsContactValues/HomeValues korrigiert (Dank an Schlimbo)
  • RegEx für HomeSensorsContactValues/HomeValues wird nun exakt ausgewertet
  • HomeAutoArrival funktioniert nun auch wenn man nicht die automatische Presence Verknüpfung mit "HomeAutoPresence 1" aktiviert hat (Dank an Schlimbo)
  • Berichtigung des Readings lastGotoleepByResident nach lastGotosleepByResident (Dank an Schlimbo)
  • seit dem FHEM 5.8 Update müssen auch die Platzhalter die eine Zahl darstellen im Perl Code in Anführungszeichen gesetzt werden (früher ging: %ICE%, nun muss: "%ICE%")


UPDATE v0.244 (25.2.2017)
  • Absturz behoben der ausgelöst wurde durch den gleichzeitigen Statuswechsel von mind. zwei RESIDENTS
  • erweiterte holiday Unterstützung, es werden nun alle Typen (1,2,3,4,5) von holiday Events unterstützt - auch Event Texte mit Leerzeichen können nun benutzt werden (Leerzeichen werden beim Erstellen der HomeCMD Attribute durch Bindestriche (-) ersetzt)
  • Bekanntes Problem: Beim gleichzeitigen Statuswechsel von mind. zwei RESIDENTS werden die Platzhalter nicht richtig ersetzt - eine mögliche Lösung habe ich bereits erarbeitet, diese zu implementieren dauert allerdings noch ein Weilchen


UPDATE v0.247 (28.2.2017)
  • beim gleichzeitigen Statuswechsel von mind. zwei RESIDENTS werden nun die Platzhalter richtig ersetzt
  • Problem mit arrival der RESIDENTS behoben
  • HomeSensorsMotion repariert


UPDATE v0.251 (9.3.2017)
  • doppelt definierte Funktionen entfernt
  • neu: "get publicIP" um die öffentliche IP Adresse zu beziehen (http://icanhazip.com) und im Reading publicIP abzulegen
  • neu: Attribut HomeCMDpublic-ip-change für CMDs die ausgeführt werden sollen wenn eine neue IP Adresse festgestellt wurde
  • neu: Attribut HomePublicIpCheckInterval für das Interval in Minuten nach der wieder ein publicIP Check ausgeführt werden soll
  • neu: Platzhalter %IP% für das Reading publicIP
« Letzte Änderung: 16 März 2017, 11:03:52 von DeeSPe »
FHEM 5.8, Brix, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 98_Hyperion, 22_HOMEMODE, 98_FileLogConvert
Gefällt mir Gefällt mir x 15 Liste anzeigen

Online DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2609
  • Das könnte EINE mögliche Lösung sein...
Antw:Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr
« Antwort #1 am: 07 Januar 2017, 16:26:49 »
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

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

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

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

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

HomeTextWeatherNoForecast
Übersetzung für "No forecast available" - Text wenn keine Wettervorhersage verfügbar ist
Zitat von: Beispiel
Es ist leider keine Wettervorhersage für den angegebenen Tag verfügbar!
Werte: frei wählbar
Werteformat: Text
Standardwert: No forecast available

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%
Zitat von: Beispiel
In %DAY% Tagen %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.
Werte: frei wählbar
Werteformat: Text mit Platzhaltern
Standardwert:

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%
Zitat von: 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.
Werte: frei wählbar
Werteformat: Text mit Platzhaltern
Standardwert:

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%
Zitat von: Beispiel
%DAY% %CONDITION% bei Temperaturen von %LOW% bis %HIGH%°C.
Werte: frei wählbar
Werteformat: Text mit Platzhaltern
Standardwert:

HomeTextWeatherLong
Langer Text mit Platzhaltern für aktuelle Wetterdaten
Zitat von: 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.
Werte: frei wählbar
Werteformat: Text mit Platzhaltern
Standardwert:

HomeTextWeatherShort
Kurzer Text mit Platzhaltern für aktuelle Wetterdaten
Zitat von: Beispiel
%CONDITION%, %TEMPERATURE%°C, %HUMIDITY%% Luftfeuchtigkeit, Luftdruck %PRESSURE%hPa
Werte: frei wählbar
Werteformat: Text mit Platzhaltern
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:

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 (siehe "HomeCMD Attribute" im zweiten Beitrag).HomeCMD Attribute

Die HomeCMD Attribute sind zum Festlegen der jeweiligen Schaltaktionen gedacht und können damit evtl. vorhandene notify(s)/DOIF(s) ablösen. Sie können mit FHEM-Code, Perl-Code oder aber auch mit beidem vermischt befüllt werden. Zusätzlich sind noch diverse Platzhalter (siehe Platzhalter) verfügbar.
Bei Perl-Code innerhalb der HomeCMD Attribute gibt es hier eine Besonderheit im Gegensatz zum Perl-Code in Modulen (z.B. 99_myUtils.pm).
IM PERL-CODE MÜSSEN (WIE AUCH IN DER FHEM EINGABEZEILE) ALLE SEMIKOLON VERDOPPELT WERDEN!!!
Kommentare im Perl Code sind NICHT zulässig!!!
Kommentare hinter Perl Code in der selben 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 (auch ein Modul von Loredo).

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% oder %TEMPERATURE%).

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
Zitat von: Beispielcode
msg audio 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
Zitat von: Beispielcode
{
  my $t = "%TAMPERED%";
  my $s = "ist";
  $s = "sind" if ($t =~ /und/);
  fhem "msg audio ACHTUNG: $t $s sabotiert!";
}

HomeCMDalarmTriggered-off
Befehle die beim Ende eines Alarms ausgeführt werden sollen.
Auslöser: Ende Alarm eines beliebigen (von HOMEMODE überwachten) Kontakt-/Bewegungs-Sensors
Zitat von: Beispielcode
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
Zitat von: Beispielcode
{
  my $t = "%ALARM%";
  my $s = "ist";
  $s = "sind" if ($t =~ /und/);
  fhem "msg audio,light 2 !!! ALARM !!! $t $s ausgelöst!";
}

HomeCMDanyoneElseAtHome-off
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome aktiviert 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
Zitat von: Beispielcode
msg HINWEIS: Es ist nun niemand anderes mehr zu Hause!

HomeCMDanyoneElseAtHome-on
Befehle die ausgeführt werden sollen sobald anyoneElseAtHome deaktiviert 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
Zitat von: Beispielcode
msg HINWEIS: Es ist nun noch jemand anderes zu Hause!

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
Zitat von: Beispielcode
{
  my $a = "%ALIAS%";
  $a =~ s/d/D/;
  fhem "msg $a ist nun %STATE%!";
}

HomeCMDcontactClosed
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor closed meldet.
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.
Auslöser: Kontaktsensor closed
Zitat von: Beispielcode
{
  my $a = "%ALIAS%";
  $a =~ s/d/D/;
  fhem "msg $a ist nun geschlossen!";
}

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
Zitat von: Beispielcode
{
  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
Zitat von: Beispielcode
{
  my $arr = "%ARRIVERS%";
  if ($arr)
  {
    my $zh = "%RESIDENT%" eq "rr_Dan" ? "zu Hause " : "";
    my $d = "%DAYTIME%";
    if ("%FEIERTAG%")
    {
      $d =~ s/morning/%FEIERTAG% Morgen/;
      $d =~ s/(day|afternoon)/%FEIERTAG% Tag/;
      $d =~ s/(evening|night)/%FEIERTAG% Abend/;
    }
    else
    {
      $d =~ s/morning/Morgen/;
      $d =~ s/(day|afternoon)/Tag/;
      $d =~ s/(evening|night)/Abend/;
    }
    fhem "msg audio Guten $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
Zitat von: Beispielcode
{
  my $a = "%ALIAS%";
  $a =~ s/d/D/;
  fhem "msg $a ist nun geöffnet!";
}

HomeCMDcontactOpen
Befehle die ausgeführt werden sollen sobald ein Kontaktsensor open/tilted meldet.
Die speziellen Platzhalter %ALIAS%, %SENSOR% und %STATE% können in diesem Attribut benutzt werden.
Auslöser: Kontaktsensor open/tilted
Zitat von: Beispielcode
{
  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
Zitat von: Beispielcode
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
Zitat von: Beispielcode
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
Zitat von: Beispielcode
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-<afternoon/day/evening/morning/night>
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-off
Befehle die beim Ende des DND Modus ausgeführt werden sollen.
Auslöser: Ende des DND Modus
Zitat von: Beispielcode
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
Zitat von: Beispielcode
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
Zitat von: Beispielcode
{
  fhem "set Weihnachten on" if ("%EVENT%" eq "Weihnachten");
  fhem "set Weihnachten off" if ("%CALENDAR%" eq "FEIERTAGE" && "%PREVEVENT%" eq "Weihnachten");
}

HomeCMDevent-<KALENDER>
Befehle die beim Beginn 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
Zitat von: Beispielcode
{
  fhem "set Weihnachten off" if (!"%EVENT%" && "%PREVEVENT%" eq "Weihnachten");
  fhem "set Weihnachten off" if ("%CALENDAR%" eq "FEIERTAGE" && "%PREVEVENT%" eq "Weihnachten");
}

HomeCMDevent-<KALENDER>-<EVENT>
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
Zitat von: Beispielcode für "HomeCMDevent-FEIERTAG-Neujahr"
set %SENSORSENERGY% meterReset

HomeCMDevent-<KALENDER>-none
Befehle die bei Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs ausgeführt werden sollen.
Bei sich anreihenden Events wird kein Event für none erzeugt
Auslöser: Ende der (holiday)Kalender EVENTs eines bestimmten KALENDERs
Platzhalter %PREVEVENT% kann zusätzlich verwendet werden
Zitat von: Beispielcode
{
  fhem "set Neujahr off" if ("%PREVEVENT%" eq "Neujahr");
}

HomeCMDicewarning-off
Befehle die bei Ende der Eiswarnung ausgeführt werden sollen
Auslöser: icewarning 0
Zitat von: Beispielcode
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
Zitat von: Beispielcode
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-<MODE>
Befehle die bei Änderung auf einen bestimmten mode ausgeführt werden sollen.
Auslöser: Änderung auf bestimmten mode
Zitat von: Beispielcode für "HomeCMDmode-asleep"
define -temporary atTmp_wz_Media_aus at +01:00:00 set HarmonyHub:FILTER=currentActivity!=PowerOff activity PowerOff;
define -temporary atTmp_wz_Venti_aus at +01:00:00 set wz_Ventilator speed 0;
define -temporary atTmp_wzLS_aus at +00:30:00 set wz_LS scene aus;
define -temporary atTmp_all_Sonos_vol_down at +00:02:00 set .*_Sonos:FILTER=Volume!=0 Volume 0 1;
define -temporary atTmp_all_Sonos_off at +00:02:30 set Sonos stopAll;
set Heizungen controlMode [FILTER=controlManu!=off] night
Zitat von: Beispielcode 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
Zitat von: Beispielcode für "HomeCMDmode-asleep-resident"
msg audio Guten Nacht und schlaf' gut %ALIAS%!
Zitat von: Beispielcode für "HomeCMDmode-awoken-resident"
{
  my $t = "Morgen";
  $t = "%FEIERTAG% Morgen" if ("%FEIERTAG%");
  fhem "msg audio Guten $t %ALIAS%";
  fhem "define -temporary atTmp_wetter_%RESIDENT% 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
Zitat von: Beispielcode für "HomeCMDmodeAlarm-armaway"
{
  my $t;
  $t .= "Bis bald und auf Wiedersehen %ALIAS%... Die Alarmanlage ist nun scharf geschaltet!" if ("%RESIDENT%" ne "rr_Dan");
  my $trig = "%ALARM%";
  my $is = $trig =~ /und/ ? "sind" : "ist";
  $t .= " ACHTUNG: $trig $is noch offen!!!" if ($trig);
  $t .= " ACHTUNG: Es ist %TEMPERATURE%°C kalt! Somit könnte es glatt werden!" if ("%ICE%");
  fhem "msg \@%RESIDENT% $t" if ($t);
}
Zitat von: Beispielcode für "HomeCMDmodeAlarm-disarm"
{
  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
Zitat von: Beispielcode
{
  my $room = substr("%SENSOR%",0,2);
  my $lichter = Value($room."_Lichter");
  if ("%STATE%" eq "geöffnet")
  {
    my $lum = ReadingsNum("%SENSOR%","luminance",100);
    fhem "delete atTmp_Bewegungsmelder_Licht_aus_$room" if ($defs{"atTmp_Bewegungsmelder_Licht_aus_$room"});
    if ((%LIGHT% < 6 || $lum < 10) && $lichter eq "off")
    {
      if ("%MODE%" eq "asleep" && $room ne "wz")
      {
        fhem "set ".$room."_LS scene Nacht";
      }
      elsif ("%MODE%" eq "gotosleep")
      {
        fhem "set ".$room."_LS scene Abend";
      }
      elsif (%LIGHT% > 3)
      {
        fhem "set ".$room."_LS scene viel";
      }
      elsif (%LIGHT% > 2 && %LIGHT% < 5)
      {
        fhem "set ".$room."_LS scene mittel";
      }
      elsif (%LIGHT% < 3)
      {
        fhem "set ".$room."_LS scene wenig";
      }
    }
  }
  else
  {
    my $t = 5;
    $t = 15 if ($room eq "wz");
    $t = 3 if ($room eq "bz");
    $t = 1 if ($room eq "fl");
    my $d = HOMEMODE_hourMaker($t);
    if ($lichter ne "off")
    {
      my $cmd = "set ".$room."_LS scene aus";
      fhem "define -temporary atTmp_Bewegungsmelder_Licht_aus_$room 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
Zitat von: Beispielcode für "HomeCMDpresence-absent"
set HarmonyHub:FILTER=activity!=PowerOff activity PowerOff;
set wz_Ventilator speed 0;
set Sonos stopAll;
{
  wzLSaus();
  fhem "delete atTmp_ku_WM_GS_aus" if ($defs{"atTmp_ku_WM_GS_aus"});
  fhem "define -temporary atTmp_ku_WM_GS_aus at +01:30:00 {fhem \"set ku_WM_GS [FILTER=state!=off] off\" if (Value(\"%SELF%\") =~ /^(absent|gone)/)}";
  fhem "delete atTmp_Heizungen_aus" if ($defs{"atTmp_Heizungen_aus"});
  fhem "define -temporary atTmp_Heizungen_aus at +00:45:00 {fhem \"set Heizungen controlMode night\" if (Value(\"%SELF%\") =~ /^(absent|gone)/)}" if ("%SEASON%" ne "summer");
  fhem "sleep 10; set Wohnung [FILTER=state!=off] off";
}
Zitat von: Beispielcode für "HomeCMDpresence-present"
{
  fhem "sleep 2; set w_Steckdosen [FILTER=state!=on] on";
  fhem "sleep 5; set Heizungen controlMode auto" if ("%SEASON%" ne "summer");
}

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

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
Zitat von: Beispielcode für "HomeCMDpresence-absent-resident"
{
  fhem "delete atTmp_ku_WM_GS_aus" if ($defs{"atTmp_ku_WM_GS_aus"});
  fhem "define -temporary atTmp_ku_WM_GS_aus at +01:30:00 {fhem \"set ku_WM_GS [FILTER=state!=off] off\" if (Value(\"%SELF%\") =~ /^(absent|gone)$/)}";
  fhem "set HarmonyHub:FILTER=activity!=PowerOff activity PowerOff";
  fhem "set wz_Ventilator speed 0";
  fhem "set Sonos stopAll";
  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 ("%AMODE%" ne "armaway");
}
Zitat von: Beispielcode für "HomeCMDpresence-present-resident"
{
  if ("%RESIDENT%" ne "rr_Dan")
  {
    fhem "msg audio %ALIAS% kommt gerade!" if ("%LOCATION%" ne "arrival");
    my $dt = "%DAYTIME%";
    $dt =~ s/morning/Morgen/;
    $dt =~ s/(day|afternoon)/Tag/;
    $dt =~ s/(evening|night)/Abend/;
    fhem "msg \@%RESIDENT% Willkommen und guten $dt %ALIAS%!";
  }
}

HomeCMDpresence-<absent/present>-<ROOMMATE/GUEST-NAME>
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
Zitat von: Beispielcode für "HomeCMDpresence-present-rr_Dan"
"sudo /opt/fhem/scripts/GTag-bat.sh %DEVICE% %ADDRESS% &"

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
Zitat von: Beispielcode
{
  my $t = "%SEASON%";
  $t =~ s/spring/Frühlings/;
  $t =~ s/summer/Sommer/;
  $t =~ s/autumn/Herbst/;
  $t =~ s/winter/Winter/;
  fhem "msg audio Die Wohnung ist nun im $t-Modus!";
}

HomeCMDseason-<autumn/spring/summer/winter>
Befehle die bei Änderung der Jahreszeit in eine bestimmte Jahreszeit ausgeführt werden sollen
Auslöser: Änderung bestimmte Jahreszeit
Zitat von: Beispielcode für "HomeCMDseason-autumn"
set Heizungen [FILTER=controlMode!=auto] controlMode auto
Zitat von: Beispielcode für "HomeCMDseason-summer"
set Heizungen [FILTER=controlManu!=off] controlManu off

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


Platzhalter

%ADDRESS%
MAC Adresse des zuletzt ausgelösten Presence Device

%ALIAS%
Alias des zuletzt ausgelösten Resident

%ALARM%
Liste der ausgelösten Alarm Devices
Wert ist 0 wenn kein Alarm Device ausgelöst ist
kann z.B. für msg benutzt werden

%AMODE%
aktueller Alarm Mode

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

%ARRIVERS%
Alias-Liste der registrierten Residents deren location auf arrival steht
kann z.B. dafür benutzt werden um Residents zu begrüßen
z.B. Peter, Paul und Marie

%AUDIO%
Audio Device des zuletzt ausgelösten Resident (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

%CONDITION%
Wert des Reading condition des überwachten Yahoo 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 Device
kann z.B. dafür benutzt werden um Aktionen zu schalten je nach zuletzt ausgelösten Presence Device

%DEVICEA%
Name des zuletzt absent ausgelösten Presence Device

%DEVICEP%
Name des zuletzt present ausgelösten Presence Device

%DND%
Status des DND Modus
0 wenn off, 1 wenn on

%DURABSENCE%
Wert des Reading durTimerAbsence_cr des zuletzt ausgelösten Resident

%DURABSENCELAST%
Wert des Reading lastDurAbsence_cr des zuletzt ausgelösten Resident
kann z.B. dafür benutzt werden um nur zu begrüßen wenn eine bestimmte Abwesenheitszeit überschritten wurde

%DURPRESENCE%
Wert des Reading durTimerPresence_cr des zuletzt ausgelösten Resident

%DURPRESENCELAST%
Wert des Reading lastDurPresence_cr des zuletzt ausgelösten Resident

%DURSLEEP%
Wert des Reading durTimerSleep_cr des zuletzt ausgelösten Resident

%DURSLEEPLAST%
Wert des Reading lastDurSleep_cr des zuletzt ausgelösten Resident

%CALENDARNAME%
Name des aktuellen Events des benamten Kalenders, oder 0 wenn Event none ist
kann z.B. dafür benutzt werden um Aktionen auszulösen wenn ein beliebiges Events dieser Kalenders aktuell ist

%CALENDARNAME-EVENTNAME%
1 wenn das angegebene Kalender Event gerade aktuell ist, 0 falls es gerade nicht aktuell ist
kann z.B. dafür benutzt werden um Aktionen auszulösen wenn genau dieses Events gerade aktuell ist (Weihnachten?)

%FORECAST%
Wettervorhersage für morgen
kann z.B. für msg oder tts benutzt werden

%FORECASTTODAY%
Wettervorhersage für heute
kann z.B. für msg oder tts benutzt werden

%HUMIDITY%
Wert des Reading humidity des HOMEMODE Device
kann z.B. für Wetterinfo in den HomeTextWeather Attributen benutzt werden

%ICE%
1 wenn Eiswarnung besteht, 0 wenn keine Eiswarnung besteht
kann z.B. für msg benutzt werden um Residents beim Verlassen vor Glätte zu warnen

%LIGHT%
Wert des Reading light des HOMEMODE Device

%LOCATION%
Wert des Reading location des HOMEMODE Device

%LOCATIONR%
Wert des Reading location des zuletzt ausgelösten Resident

%MODE%
aktueller Mode des HOMEMODE Device

%MOTION%
Wert des Reading lastMotion (Name des zuletzt geöffneten Bewegungsmelders)

%OPEN%
Wert des Reading contactsOutsideOpen_hr des HOMEMODE Device
kann z.B. für msg benutzt werden um Residents beim Verlassen vor offenen Fenstern/Türen zu warnen

%OPENCT%
Wert des Reading contactsOutsideOpen_ct des HOMEMODE Device
kann z.B. für msg benutzt werden um erst ab einer bestimmten Menge von offenen Kontakten Nachrichten zu versenden, evtl. in Zusammenhang mit %OPEN%

%RESIDENT%
Name des zuletzt ausgelösten Resident

%PRESENT%
Anwesenheit des HOMEMODE Device
1 wenn present, 0 wenn absent

%PRESENTR%
Anwesenheit des zuletzt ausgelösten Resident
1 wenn present, 0 wenn absent

%PRESSURE%
Wert des Reading pressure des HOMEMODE Device
kann z.B. für Wetterinfo in den HomeTextWeather Attributen benutzt werden

%PRESSURETREND%
Wert des Reading pressure_trend_txt des Yahoo Wetter Device
kann z.B. für Wetterinfo in den HomeTextWeather Attributen benutzt werden

%PREVAMODE%
vorheriger Alarm Mode des HOMEMODE Device

%PREVCONTACT%
vorheriger geöffneter Kontakt Sensor

%PREVMODE%
vorheriger Mode des HOMEMODE Device

%PREVMODER%
vorheriger Status des zuletzt ausgelösten Resident

%PREVMOTION%
vorheriger geöffneter Bewegungsmelder

%SEASON%
Wert des Reading season des HOMEMODE Device

%SELF%
eigener Name des HOMEMODE Device

%SENSORSCONTACT%
kommaseparierte Liste alle Kontakt Sensoren aus Internal SENSORSCONTACT

%SENSORSENERGY%
kommaseparierte Liste alle Energie Sensoren aus Internal SENSORSENERGY

%SENSORSMOTION%
kommaseparierte Liste alle Bewegungsmelder aus Internal SENSORSMOTION

%TAMPERED%
Liste aller sabotierten Sensoren

%TEMPERATURE%
Wert des Reading temperature des HOMEMODE Device
kann z.B. für Wetterinfo in den HomeTextWeather Attributen benutzt werden

%TOBE%
ist oder sind des Reading condition des überwachten Yahoo Wetter Device
kann z.B. für Wetterinfo in den HomeTextWeather Attributen benutzt werden

%TWILIGHT%
Wert des Reading twilight des HOMEMODE Device

%TWILIGHTEVENT%
aktuelles Event des überwachten Twilight Device

%WEATHER%
Wert von "get <HOMEMODE> weather short"
can be used for for msg weather info p.e.

%WEATHERLONG%
Wert von "get <HOMEMODE> weather long"
kann z.B. für msg oder tts benutzt werden

%WIND%
Wert des Reading wind des HOMEMODE Device
kann z.B. für Wetterinfo in den HomeTextWeather Attributen benutzt werden

%WINDCHILL%
ist oder sind des Reading wind_chill des überwachten Yahoo Wetter Device
kann z.B. für Wetterinfo in den HomeTextWeather Attributen benutzt werden

Die folgenden Platzhalter können nur innerhalb der HomeTextWeatherForecast Attribute verwendet werden!

%CONDITION%
Wetterbedingung(en) des jeweiligen Tages

%DAY%
Tag der Wettervorhersage (heute, morgen, übermorgen, in xx Tagen)

%HIGH%
maximale vorhergesagte Temperatur

%LOW%
minimale vorhergesagte Temperatur

Die folgenden Platzhalter können nur innerhalb der HomeCMDcontact und HomeCMDmotion Attribute verwendet werden!

%ALIAS%
Alias des zuletzt ausgelösten Kontakt-/Bewegungs-Sensors

%SENSOR%
Name des zuletzt ausgelösten Kontakt-/Bewegungs-Sensors

%STATE%
Status des zuletzt ausgelösten Kontakt-/Bewegungs-Sensors (open/tilted/closed)

Die folgenden Platzhalter können nur innerhalb der HomeCMDevent Attribute verwendet werden!

%CALENDAR%
Name des Kalenders

%EVENT%
Event des Kalenders

%PREVEVENT%
vorheriges Event des Kalenders
« Letzte Änderung: 04 April 2017, 20:23:30 von DeeSPe »
FHEM 5.8, Brix, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 98_Hyperion, 22_HOMEMODE, 98_FileLogConvert
Gefällt mir Gefällt mir x 3 Liste anzeigen

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 12900
  • Probleme sind auch keine Lösung.
Antw:Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr
« Antwort #2 am: 07 Januar 2017, 16:33:37 »
Vielleicht könntest Du zu den seasons noch die Adventszeit hinzufügen. Also ausrechnen, wann erster Advent ist und dann die season entsprechend festlegen. Vielleicht mit einem entsprechenden Attribut, ob man die Adventszeit bis zum 24.12. / 31.12. / 06.01. bezeichnet (je nach Region und Glaubensrichtung unterschiedlich)
Aus technischen Gründen befindet sich die Signatur auf der Rückseite dieses Beitrages.

Online DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2609
  • Das könnte EINE mögliche Lösung sein...
Antw:Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr
« Antwort #3 am: 07 Januar 2017, 16:38:26 »
Vielleicht könntest Du zu den seasons noch die Adventszeit hinzufügen. Also ausrechnen, wann erster Advent ist und dann die season entsprechend festlegen. Vielleicht mit einem entsprechenden Attribut, ob man die Adventszeit bis zum 24.12. / 31.12. / 06.01. bezeichnet (je nach Region und Glaubensrichtung unterschiedlich)

Das geht über holiday Kalender:
Zitat von: Code für FEST.holiday
# Intervall: 4 <MM-DD> <MM-D> <Text>
4 04-14 04-17 Ostern
4 11-27 12-24 Advent
4 12-25 12-26 Weihnachtsfest
und
Zitat von: Code für FEIERTAG.holiday
# Intervall: 4 <MM-DD> <MM-D> <Text>
4 01-01 01-01 Neujahr
4 11-27 11-27 Advent1
4 12-04 12-04 Advent2
4 12-11 12-11 Advent3
4 12-18 12-18 Advent4
4 12-24 12-24 Heilig-Abend
4 12-31 12-31 Silvester

Gruß
Dan
FHEM 5.8, Brix, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 98_Hyperion, 22_HOMEMODE, 98_FileLogConvert

Offline Spezialtrick

  • Sr. Member
  • ****
  • Beiträge: 832
Antw:Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr
« Antwort #4 am: 07 Januar 2017, 16:49:07 »
Danke Daniel! :) Ich gucke es mir später mal an!

Udo's Vorschlag teile ich aber auch jetzt schon, wie auch in letzten Betrag. :P
FHEM - Cubietruck - Homematic - MAX!

Bestellung HM/MySensors Relay Platine: https://forum.fhem.de/index.php/topic,48235.0.html

Offline Christian Uhlmann

  • Full Member
  • ***
  • Beiträge: 125
Antw:Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr
« Antwort #5 am: 07 Januar 2017, 17:02:42 »
Wow, Geil!!!
Gleich heute Abend mal testen, sowas wollte ich schon selber mal bauen. Vielen Dank dafür. Werde gerne Tester wenn du noch welche brauchst.
Host: Debian Stretch als XEN Guest
Gateways: DuoFern Stick, CUL433 Revolt, CUL MAX, CUL FS20, CUL HM, HMLan, HM-USB 2, JeeLink LaCrosse
Devices: 12x Rademacher Rollos, 6x TX 29 DT-HT, 10x HM-CC-RT-DN, 14x MAX Fensterkontakte, Diverse HM Aktoren für Licht, Klingel, Gong, Eingangstür, FS20 und andere

Offline Icinger

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1009
Antw:Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr
« Antwort #6 am: 07 Januar 2017, 17:32:22 »
Schließe mich dem Wunsch nach der Adventszeit auch gleich mal an.

lg, Stefan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

Offline EnderPhilipp

  • Full Member
  • ***
  • Beiträge: 281
Antw:Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr
« Antwort #7 am: 07 Januar 2017, 17:42:59 »
Sehr interessant  8)
Werde ich die Tage mal testen.

Mfg
Philipp ;D
¡¡¡ANFÄNGERALARM!!!
Raspberry Pi 3 (Hauptsystem)
Raspberry Pi B+ (Kellersonde)
Homematic,Philips Hue, LD382, nanoCul 433/868mhz, MPD, Intertechno, FIRMATA, EspEasy, SSCAM, STV, HDMI-CEC, EchoDot

Offline Chris8888

  • Full Member
  • ***
  • Beiträge: 165
Antw:Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr
« Antwort #8 am: 07 Januar 2017, 18:11:25 »
Hallo,

krass! Gleich mal installiert. :-)
Lief völlig problemlos - Anleitung ist super.

Werde jetzt mal ein wenig rumspielen und ein paar Sachen probieren.

Meinen Respekt!

Viele Grüße
Christian

PS: Gleich mal eine Frage: Wie kann man bei den DEVs Geräte ausblenden? Ich will zB nicht alle Energiezähler in der Liste haben.
FHEM 5.8 auf einem PI3 mit div. Homematic-Komponenten, Alexa, Tablet-UI und Homebridge...und läuft einfach. Erweitert mit CCU2 und Homematic-IP...und läuft immer noch.

Online DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2609
  • Das könnte EINE mögliche Lösung sein...
Antw:Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr
« Antwort #9 am: 07 Januar 2017, 18:13:20 »
PS: Gleich mal eine Frage: Wie kann man bei den DEVs Geräte ausblenden? Ich will zB nicht alle Energiezähler in der Liste haben.

Einfach nur die Zähler im Devspec angeben die Du haben möchtest! ;)

Gruß
Dan
FHEM 5.8, Brix, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 98_Hyperion, 22_HOMEMODE, 98_FileLogConvert

Online DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2609
  • Das könnte EINE mögliche Lösung sein...
Antw:Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr
« Antwort #10 am: 07 Januar 2017, 18:19:53 »
Schließe mich dem Wunsch nach der Adventszeit auch gleich mal an.

Wie schon beschrieben, Du kannst Dir über die holiday Kalender völlig frei HomeCMDevent Attribute erzeugen.
Ich empfehle einen Kalender für Events mit mehreren Tagen und einen für Eintagesevents (wg. Überschneidungen und so... ;) ).

Gruß
Dan
FHEM 5.8, Brix, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 98_Hyperion, 22_HOMEMODE, 98_FileLogConvert

Offline Chris8888

  • Full Member
  • ***
  • Beiträge: 165
Antw:Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr
« Antwort #11 am: 07 Januar 2017, 18:22:21 »
Hi,

2 kleine Probleme:
Im Log taucht das auf:
PERL WARNING: Argument "ss_civil" isn't numeric in numeric ne (!=) at ./FHEM/22_HOMEMODE.pm line 2093.
2017.01.07 18:01:25 1: PERL WARNING: Argument "ss_naut" isn't numeric in numeric ne (!=) at ./FHEM/22_HOMEMODE.pm line 2093

Über Homebridge wird "Bewegung entdeckt" mit JA angezeigt. Alle Bewegungsmelder (3) zeigen aber "noMotion".

Danke für einen ersten Ansatzpunkt!

VG
Christian
FHEM 5.8 auf einem PI3 mit div. Homematic-Komponenten, Alexa, Tablet-UI und Homebridge...und läuft einfach. Erweitert mit CCU2 und Homematic-IP...und läuft immer noch.

Online DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2609
  • Das könnte EINE mögliche Lösung sein...
Antw:Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr
« Antwort #12 am: 07 Januar 2017, 18:30:54 »
PERL WARNING: Argument "ss_civil" isn't numeric in numeric ne (!=) at ./FHEM/22_HOMEMODE.pm line 2093.
2017.01.07 18:01:25 1: PERL WARNING: Argument "ss_naut" isn't numeric in numeric ne (!=) at ./FHEM/22_HOMEMODE.pm line 2093

Ups, ist berichtigt! Danke.  8)

Über Homebridge wird "Bewegung entdeckt" mit JA angezeigt. Alle Bewegungsmelder (3) zeigen aber "noMotion".

Werden denn sonst die Bewegungen richtig erkannt? Evtl. werden falsche Readings (HomeSensorsMotionOpenTamperReadings) benutzt?

Gruß
Dan
FHEM 5.8, Brix, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 98_Hyperion, 22_HOMEMODE, 98_FileLogConvert

Offline Benni

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1397
  • FHEMinist
Antw:Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr
« Antwort #13 am: 07 Januar 2017, 19:18:37 »
Wow! Ganz schön umfangreich!  8)
Werde ich mir zu Gemüte führen, sobald meine andere (physikalische) Baustelle abgeschlossen ist ;D
FHEM (FeatureLevel 9.9) (configDB+DbLog) prod. auf Intel x64 (mITX + SSD) mit Debian Wheezy.
Test-/Entwicklungssystem VM mit Jessie.
Jede Menge HM (>100) an 1xHMLAN+2xHMUART (WeMos+esp-link) mit VCCU
3 UniRoll Gurtwickler an CUL868 und 2 Sebury F2-2 über ESPEasy
Maintainer: 98_rssFeed und 98_QRCode
Zustimmung Zustimmung x 1 Liste anzeigen

Offline EnderPhilipp

  • Full Member
  • ***
  • Beiträge: 281
Antw:Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr
« Antwort #14 am: 07 Januar 2017, 22:54:10 »
Habe eine Frage zu HomeAutoAwoken bzw. HomeAutoAsleep:

Du sprichst bei den ROOMATES von awoken und  asleep, bei mir gibt es diese States aber im Dropdown-Menu nicht, muss ich die erst hinzufügen, wenn ja wie geht das?

Mfg
Philipp ;D
¡¡¡ANFÄNGERALARM!!!
Raspberry Pi 3 (Hauptsystem)
Raspberry Pi B+ (Kellersonde)
Homematic,Philips Hue, LD382, nanoCul 433/868mhz, MPD, Intertechno, FIRMATA, EspEasy, SSCAM, STV, HDMI-CEC, EchoDot

 

decade-submarginal