Modul YAAHM: Unterschied zwischen den Versionen
Andies (Diskussion | Beiträge) (→Umstellung Sommer- zu Winterzeit: weblink Zeitumstellung) Markierungen: mobile edit mobile web edit |
|||
(44 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 11: | Zeile 11: | ||
Diese Seite beschreibt die Konfiguration und Verwendung des Moduls 95_YAAHM.pm. | Diese Seite beschreibt die Konfiguration und Verwendung des Moduls 95_YAAHM.pm. | ||
= | =Einführung= | ||
Das Modul ''95_YAAHM.pm'' stellt eine komfortable Oberfläche bereit, | Viele Kommandos in FHEM orientieren sich an Tageszeiten. Beispielsweise sollen Rollläden zu Sonnenaufgang hochgefahren werden, morgens die Kaffeemaschine und die Heizung eingeschaltet und bei Sonnenuntergang kontrolliert werden, ob das Garagentor geschlossen ist. Jeder dieser Befehle könnte mit einem zeitgesteuerten at-Device definiert werden. Das Modul ''95_YAAHM.pm'' stellt für diese Aufgaben eine einheitliche und komfortable zu steuernde Oberfläche bereit. Man benötigt somit nicht mehrere at, sondern sammelt alle Befehle in YAAHM. Der Titel '''YAAHM''' ist das Akronym für ''Yet Another Auto Home Module'', denn es gibt ja schon verschiedene Module, die den Zeitablauf in einem SmartHome vereinfachen sollen. | ||
Die Philosophie von YAAHM ist die einfache Bedienbarkeit im Frontend, mit Eingabefeldern und Visualisierungselementen und ohne Unmengen von Attributen. Dafür gilt es zunächst, verschiedene Begriffe zu verstehen. | |||
== Tages-Typ == | == Tages-Typ == | ||
Ein Tagestyp wird Befehle bestimmen, die im Laufe eines Tages ausgeführt werden sollen. Am Anfang eines Tages (nach Mitternacht) sollen beispielsweise doppelte Einträge in einer Datenbank gelöscht werden, zu Sonnenaufgang werden Rollläden hochgefahren und zur Weckzeit schaltet sich die Kaffeemaschine ein. Dabei soll man aber bei den einzelnen Befehlen unterscheiden können, ob wir einen Arbeitstag, ein Wochenende oder einen Feiertag haben: An einem Werktag soll der Rollladen zu Sonnenaufgang hochfahren, an einem Feiertag dagegen erst später. | |||
In YAAHM wird dies durch Tagestypen gelöst. Es sind immer die beiden Tagestypen ''Wochenende'' und ''Werktag'' definiert. Weitere Tagestypen, die dann die Steuerung anderer Befehle erlauben, kann man mit den Attributen ''vacationDevices'' (für Ferientage) und ''holidayDevices'' (Feiertage) hinzufügen. Dabei ist jeweils eine Semikolon-separierte Liste aus holiday-Devices oder Calendar-Devices anzugeben (da die Eingaben direkt in fhem("") eingetragen werden, sind die Regeln der [[Klammerebenen]] zu beachten). Der letztendliche Tagestyp wird dann in einer Priorisierung festgelegt: ''Feiertag'' hat die höchste Priorität, gefolgt von ''Wochenende'', ''Ferientag'' und ''Werktag''. Welcher Tagestyp vorliegt, wird durch YAAHM jeden Morgen kurz nach Mitternacht fixiert. | |||
== Tages-Profil == | == Tages-Profil == | ||
Das Tagesprofil besteht aus einer Kette von Ereignissen | Das Tagesprofil besteht aus einer Kette von Ereignissen, die an jedem Tag aufeinander folgen. Für jedes Ereignis kann eine Liste von FHEM-Kommandos angegeben werden, die dann ausgeführt werden. Welches Ereignis als Letztes eintrat, steht im Reading '''housetime''', das vorhergehende Ereignis im Reading ''prev_housetime'' und das vom gegenwärtigen Zeitpunkt aus nächste Ereignis im Reading ''next_housetime''. | ||
Wenn man mit jedem eingetretenen Ereignis eine weitere selbst definierte Funktion ausführen möchte, kann man dazu das folgende Attribut verwenden | |||
attr <Modulname> timehelper {hier_die_Perl_Funktion_eintragen(Argumente)} | |||
Die angegebene Perl-Hilfsfunktion wird dann bei jedem Ereignis aufgerufen. Die entsprechenden Argumente, die je nach aktueller Zeit vom Modul automatisch eingefügt werden, lauten dann wie folgt (siehe auch [[#Attribute | Attribute]]): | |||
*aftermidnight, beforemidnight: ''Nach Mitternacht'' und ''Vor Mitternacht'' sind Ereignisse, die mit einem Offset an jedem Tag nach bzw. vor Mitternacht ausgeführt werden. | |||
*''Nach Mitternacht'' und ''Vor Mitternacht'' | *sunrise, beforesunrise, aftersunrise: ''Sonnenaufgang'', ''Vor Sonnenaufgang'' und ''Nach Sonnenaufgang'' sind Ereignisse, die an jedem Tag zu Sonnenaufgang bzw. mit einem Offset davor und danach ausgeführt werden. Der Zeitpunkt des Sonnenaufgangs wird aus dem Modul 95_Astro.pm berechnet. Mit dem Attribut ''sunrise'' kann ausgewählt werden, welcher Horizontwinkel für den Sonnenaufgang genommen wird, siehe dort. | ||
*''Sonnenaufgang'', ''Vor Sonnenaufgang'' und ''Nach Sonnenaufgang'' | *sunset, beforesunset, aftersunset: ''Sonnenuntergang'', ''Vor Sonnenuntergang'' und ''Nach Sonnenuntergang'' sind Ereignisse, die an jedem Tag zu Sonnenuntergang bzw. mit einem Offset davor und danach ausgeführt werden. Der Zeitpunkt des Sonnenuntergangs wird aus dem Modul 95_Astro.pm berechnet. Mit dem Attribut ''sunset'' kann ausgewählt werden, welcher Horizontwinkel für den Sonnenuntergang genommen wird, siehe dort. | ||
*''Sonnenuntergang'', ''Vor Sonnenuntergang'' und ''Nach Sonnenuntergang'' | *morning, noon, afternoon, evening, night: ''Morgen'', ''Mittag'', ''Nachmittag'', ''Abend'' und ''Nacht'' sind Ereignisse, die zu einer einstellbaren Zeit an jedem Tag ausgeführt werden. Das Reading '''housephase''' nimmt zwischen ''Morgen'' und ''Nacht'' den Wert ''Tageszeit'' an, sonst den Wert ''Nachtzeit''. | ||
*''Morgen'', ''Mittag'', ''Nachmittag'', ''Abend'' und ''Nacht'' | *wakeup, sleep: ''Wecken'' und ''Schlafen'' sind Ereignisse, die durch die beiden Standard-Wochenprofile gleichen Namens ausgelöst werden. Die entsprechenden Zeiten können von Tag zu Tag beliebig variieren. | ||
*''Wecken'' und ''Schlafen'' | |||
== Wochen-Profile == | == Wochen-Profile == | ||
Es gibt Ereignisse, die an jedem Wochentag ausgeführt werden sollen. Allerdings variiert möglicherweise die Startzeit je Wochentag. Beispielsweise soll an jedem Tag der Woche das Gartentor öffnen; Montags soll dies aber um 5:40, dienstags um 5:50 und Mittwochs bis Freitags um 6:10 geschehen, am Wochenende soll das Gartentor geschlossen bleiben. Da der Befehl an jedem Wochentag derselbe ist und nur die Startzeit variiert, eignet sich dafür das ''Wochenprofil''. | |||
Für jedes Wochen-Profil kann man angeben, ob es auch an einem ''Urlaubstag'' (=Url) und an einem ''Feiertag'' (=Fei) gültig sein soll, siehe [[#Einstellung der Wochen-Profile | Wochen-Profile]]. | |||
Ein Wochenprofil definiert dabei diejenigen Ereignisse, die an jedem Wochentag ausgeführt werden sollen. Es ist möglich, mehrere Wochenprofile zu definieren. Zwei Standard-Wochenprofile ''Wecken'' und ''Schlafen'' sind vordefiniert und können nicht gelöscht werden; weitere Wochenprofile können angelegt und wieder gelöscht werden. | |||
Für jedes Wochenprofil kann eine manuelle Auslösezeit (im Beispiel oben wären dies montags 5:40, dienstags 5:50, mittwochs bis freitags 6:10 sowie samstags und sonntags off) eingegeben werden. Ist die Auslösezeit später als der gegenwärtige Zeitpunkt, wird sie für den aktuellen Tag verwendet. Ist die Auslösezeit früher als der gegenwärtige Zeitpunkt, wird sie erst am nächsten Tag als Ausnahmezeit verwendet. Lautet die manuelle Auslösezeit 'off', wird der heutige Auslösezeitpunkt abgeschaltet, wenn er noch nicht verstrichen ist - sonst der morgige Auslösezeitpunkt. Nach Ausführung wird der manuelle Eintrag anscheinend nicht gelöscht. | |||
Das Modul ermöglicht mit dem Attribut ''timeHelper'' die Angabe einer Perl-Hilfsfunktion, die für die beiden ersten (Standard-)Wochenprofile bei Eintritt des Events mit den entsprechenden Argumenten aufgerufen wird, siehe [[#Attribute | Attribute]]. | Das Modul ermöglicht mit dem Attribut ''timeHelper'' die Angabe einer Perl-Hilfsfunktion, die für die beiden ersten (Standard-)Wochenprofile bei Eintritt des Events mit den entsprechenden Argumenten aufgerufen wird, siehe [[#Attribute | Attribute]]. | ||
== (Nutzungs-)Modus == | == (Nutzungs-)Modus == | ||
Der '''housemode''' (bzw. (Nutzungs-)Modus) besagt, dass sich das SmartHome in einem der | Der '''housemode''' (bzw. (Nutzungs-)Modus) besagt, dass sich das SmartHome in einem der vier Modi ''Normal'', ''Party'', ''Abwesenheit'' oder ''Nicht Stören'' befindet. Dabei bedeutet: | ||
*''Normal'' = normale Tages- und Wochen-Profile werden angewandt, keine speziellen Anordnungen. | *''Normal'' (Readingswert normal) = normale Tages- und Wochen-Profile werden angewandt, keine speziellen Anordnungen. | ||
*''Party'' = kann in Hilfsfunktionen verwendet werden, um spezielle Anordnungen betreffend die Sicherheit und den Übergang in den Nachtzustand zu realisieren. Das Modul selbst sorgt dafür, dass im Party-Modus das SmartHome nicht in einen gesicherten Zustand versetzt werden kann. | *''Party'' (Readingswert party) = kann in Hilfsfunktionen verwendet werden, um spezielle Anordnungen betreffend die Sicherheit und den Übergang in den Nachtzustand zu realisieren. Das Modul selbst sorgt dafür, dass im Party-Modus das SmartHome nicht in einen gesicherten Zustand versetzt werden kann. | ||
*''Abwesenheit'' | *''Abwesenheit'' (Readingswert absence) = kann in Hilfsfunktionen verwendet werden, um spezielle Anordnungen zu realisieren. | ||
*''Nicht Stören'' (Readingswert donotdisturb) = kann in Hilfsfunktionen verwendet werden, um spezielle Anordnungen zu realisieren. | |||
Die Festsetzung des Modus bleibt bestehen, bis eine erneute manuelle Änderung durchgeführt wird. Ausnahme: Wenn das Attribut ''modeAuto'' gesetzt wird, kann sich der Modus auch bei bestimmten Events ändern. | Die Festsetzung des Modus bleibt bestehen, bis eine erneute manuelle Änderung durchgeführt wird. Ausnahme: Wenn das Attribut ''modeAuto'' gesetzt wird, kann sich der Modus auch bei bestimmten Events ändern. | ||
Für jedes Wochen-Profil kann man angeben, ob es auch im Party-Modus (=Par) und bei Abwesenheit (=Abw) gültig sein soll, siehe [[#Einstellung der Wochen-Profile | Wochen-Profile]]. | Für jedes Wochen-Profil kann man angeben, ob es auch im Party-Modus (=Par) und bei Abwesenheit (=Abw) gültig sein soll, siehe [[#Einstellung der Wochen-Profile | Wochen-Profile]]. | ||
Zeile 53: | Zeile 58: | ||
== (Sicherheits-)Zustand == | == (Sicherheits-)Zustand == | ||
Der '''housestate''' (bzw. (Sicherheits-)Zustand) besagt, dass sich das SmartHome in einem der vier Zustände ''Nicht gesichert'', ''Gesichert'', ''Geschützt'' oder ''Überwacht'' befindet. Die Festsetzung des Zustands bleibt bestehen, bis eine erneute manuelle Änderung durchgeführt wird. Ausnahme: Wenn das Attribut ''stateAuto'' gesetzt wird, kann sich der Zustand auch bei bestimmten Events ändern. Dabei bedeutet (beispielsweise !) | Der '''housestate''' (bzw. (Sicherheits-)Zustand) besagt, dass sich das SmartHome in einem der vier Zustände ''Nicht gesichert'', ''Gesichert'', ''Geschützt'' oder ''Überwacht'' befindet. Die Festsetzung des Zustands bleibt bestehen, bis eine erneute manuelle Änderung durchgeführt wird. Ausnahme: Wenn das Attribut ''stateAuto'' gesetzt wird, kann sich der Zustand auch bei bestimmten Events ändern. Dabei bedeutet (beispielsweise !) | ||
**'' | **''Ungesichert'' (Readingswert unsecured) = Türen sind unverschlossen, Fenster dürfen geöffnet sein | ||
**''Gesichert'' = Türen sind verschlossen, Fenster dürfen nur in Ausnahmefällen geöffnet sein | **''Gesichert'' (Readingswert secured) = Türen sind verschlossen, Fenster dürfen nur in Ausnahmefällen geöffnet sein | ||
**''Geschützt'' = Türen sind verschlossen, Fenster dürfen nur in Ausnahmefällen geöffnet sein, die Alarmanlage ist scharf geschaltet | **''Geschützt'' (Readingswert protected) = Türen sind verschlossen, Fenster dürfen nur in Ausnahmefällen geöffnet sein, die Alarmanlage ist scharf geschaltet | ||
**''Überwacht'' = Türen sind verschlossen, Fenster dürfen nur in Ausnahmefällen geöffnet sein, die Alarmanlage ist scharf geschaltet, in regelmäßigen Abständen wird der Zustand des Hauses überprüft und bei Veränderungen irgendwie gemeldet. Vielleicht läuft auch noch eine Anwesenheitssimulation | **''Überwacht'' (Readingswert guarded) = Türen sind verschlossen, Fenster dürfen nur in Ausnahmefällen geöffnet sein, die Alarmanlage ist scharf geschaltet, in regelmäßigen Abständen wird der Zustand des Hauses überprüft und bei Veränderungen irgendwie gemeldet. Vielleicht läuft auch noch eine Anwesenheitssimulation | ||
Das Modul ermöglicht mit dem Attribut ''stateHelper'' die Angabe einer Perl-Hilfsfunktion, die zu jedem Wechsel des Zustands mit den entsprechenden Argumenten aufgerufen wird, siehe [[#Attribute | Attribute]]. Welche FHEM-Devices dabei geschaltet werden, muss also in dieser externen Hilfsfunktion angegeben werden. | Das Modul ermöglicht mit dem Attribut ''stateHelper'' die Angabe einer Perl-Hilfsfunktion, die zu jedem Wechsel des Zustands mit den entsprechenden Argumenten aufgerufen wird, siehe [[#Attribute | Attribute]]. Welche FHEM-Devices dabei geschaltet werden, muss also in dieser externen Hilfsfunktion angegeben werden. | ||
Zeile 64: | Zeile 69: | ||
=YAAHM-Device= | =YAAHM-Device= | ||
==Installation== | ==Installation== | ||
YAAHM ist Bestandteil der FHEM-Distribution. Die Installation erfolgt über den Standard-Updatemechanisnmus. Zu YAAHM gehören das Modul 95_YAAHM.pm und die Datei yaahm.js in /fhem/www/pgm2 | |||
==Definition== | ==Definition== | ||
Das | Das YAAHM-Device - hier mit dem Namen ''YYY'' versehen - selbst wird über | ||
define YYY YAAHM | define YYY YAAHM | ||
definiert. Diese Definition legt einen versteckten Raum "ProfileRoom" an, welcher über einen Weblink im oberen Menü des Webinterfaces erreichbar ist. | definiert. Diese Definition legt einen versteckten Raum "ProfileRoom" an, welcher über einen Weblink im oberen Menü des Webinterfaces erreichbar ist. | ||
Zeile 84: | Zeile 87: | ||
set YYY manualnext <timernumber> <time> | set YYY manualnext <timernumber> <time> | ||
set YYY manualnext <timername> <time> | set YYY manualnext <timername> <time> | ||
Setzt die manuelle Auslösezeit für | Setzt die manuelle Auslösezeit für das Wochen-Profil (Timer genannt), das durch die Angabe einer fortlaufenden Nummerierung (beginnend bei 0) oder seinen Namen identifiziert wird. Das nicht löschbare Standard-Wochen-Profil ''Wecken'' hat die Timer-Nummer 0, das nicht löschbare Standard-Wochen-Profil ''Schlafen'' hat die Timer-Nummer 1. | ||
set YYY mode normal | party | absence | set YYY mode normal | party | absence | donotdisturb | ||
Setzt den (Nutzungs-)Modus des SmartHome | Setzt den (Nutzungs-)Modus des SmartHome | ||
set YYY state unsecured | secured | protected | guarded | set YYY state unsecured | secured | protected | guarded | ||
Setzt den (Sicherheits-)Zustand des SmartHome | Setzt den (Sicherheits-)Zustand des SmartHome | ||
set YYY checkstate (0|5|10) | |||
Führe die Überprüfung, ob alle stateDevices (siehe Attribute) für diesen (Sicherheits-)Zustand den richtigen Wert haben, manuell sofort oder mit 5 bzw. 10 Sekunden Verzögerung aus. | |||
set YYY correctstate | |||
Führe für jedes stateDevice (siehe Attribute), das nicht den richtigen Wert hat, das FHEM-Kommando ''set <stateDevice> <sollzustand>'' aus. | |||
set YYY createWeekly <string> | set YYY createWeekly <string> | ||
set YYY deleteWeekly <string> | set YYY deleteWeekly <string> | ||
Erzeuge oder entferne ein Wochen-Profil mit dem entsprechenden Namen. | Erzeuge oder entferne ein Wochen-Profil mit dem entsprechenden Namen. Die beiden Standard-Wochen-Profile ''Wecken'' und ''Schlafen'' können nicht gelöscht werden. | ||
set YYY locked |unlocked | set YYY locked |unlocked | ||
Sperre oder entsperre das Überschreiben der Timer, siehe [[#Sperrung | Sperrung]]. | Sperre oder entsperre das Überschreiben der Timer, siehe [[#Sperrung | Sperrung]]. | ||
set YYY save | restore | |||
Speichere die Daten persistent, oder hole sie aus der betreffenden Datei ''YAAHMFile'' (Achtung für Nutzer der configdb: Das File wird in der Datenbank abgelegt, nicht im Dateisystem). | |||
==Get-Befehle== | ==Get-Befehle== | ||
Das YAAHM-Device kennt die folgenden Get-Befehle (''YYY'' ist duch den tatsächlichen Device-Namen zu ersetzen): | Das YAAHM-Device kennt die folgenden Get-Befehle (''YYY'' ist duch den tatsächlichen Device-Namen zu ersetzen): | ||
get YYY next <timernumber> | |||
get YYY next <timername> | |||
get YYY sayNext <timernumber> | |||
get YYY sayNext <timername> | |||
Holt die nächste Auslösezeit für das betreffende Wochen-Profil (Timer genannt). Mit dem Befehl ''next'' erfolgt das in einem Format, das für textuelle Ausgabegeräte geeignet ist, mit dem Befehl ''sayNext'' in einem Format, das für Sprach-Ausgabegeräte geeignet ist. Die Identifikation des Wochen-Profiles (Timer genannt) erfolgt durch die Angabe einer fortlaufenden Nummerierung (beginnend bei 0) oder seinen Namen. Das nicht löschbare Standard-Wochen-Profil ''Wecken'' hat die Timer-Nummer 0, das nicht löschbare Standard-Wochen-Profil ''Schlafen'' hat die Timer-Nummer 1. | |||
get YYY version | get YYY version | ||
Gibt die Versionsnummer des | Gibt die Versionsnummer des Moduls zurück | ||
get YYY template | get YYY template | ||
Gibt Vorschläge für Helferfunktionen zurück. | Gibt Vorschläge für Helferfunktionen zurück. | ||
Zeile 109: | Zeile 123: | ||
**Die Events ''sleep'' und ''morning'' bewirken, dass der Modus ''Party'' aufgehoben wird und wieder ''Normal'' ist. | **Die Events ''sleep'' und ''morning'' bewirken, dass der Modus ''Party'' aufgehoben wird und wieder ''Normal'' ist. | ||
**Der Event ''wakeup'' bewirkt, dass der Modus ''Abwesenheit'' aufgehoben wird und wieder ''Normal'' ist. | **Der Event ''wakeup'' bewirkt, dass der Modus ''Abwesenheit'' aufgehoben wird und wieder ''Normal'' ist. | ||
**Jeder Event bewirkt, dass der Modus ''Nicht Stören'' aufgehoben wird und wieder ''Normal'' ist. | |||
*Wenn das Attribut '''norepeat''' auf 1 gesetzt wird, sind am gleichen Tage keine Wiederholungen eines (Wochen-)Timers aus dem Wochen-Profil möglich - allerdings werden manuelle Zeiten akzeptiert. | |||
*Wenn das Attribut '''stateHelper''' auf einen Perl-Funktionsnamen gesetzt wird, erfolgt automatisch die Ausführung dieser Funktion (verbunden mit dem Argument des entsprechenden Events) bei einem Wechsel des (Sicherheits-)Zustands. Einen entsprechenden Vorschlag für eine solche Helferfunktion kann man sich durch ''get YYY template'' anzeigen lassen. | *Wenn das Attribut '''stateHelper''' auf einen Perl-Funktionsnamen gesetzt wird, erfolgt automatisch die Ausführung dieser Funktion (verbunden mit dem Argument des entsprechenden Events) bei einem Wechsel des (Sicherheits-)Zustands. Einen entsprechenden Vorschlag für eine solche Helferfunktion kann man sich durch ''get YYY template'' anzeigen lassen. | ||
*Wenn das Attribut ''stateAuto''' auf 1 gesetzt wird, wechselt der (Sicherheits-)Zustand automatisch zu bestimmten Events: | *Wenn das Attribut '''stateAuto''' auf 1 gesetzt wird, wechselt der (Sicherheits-)Zustand automatisch zu bestimmten Events: | ||
**Wenn der Modus ''Normal'' ist und der Zustand ''Nicht gesichert'' ist, wird bei Eintritt der Events ''sleep'' oder ''night'' der Zustand auf ''Gesichert'' gesetzt. | **Wenn der Modus ''Normal'' ist und der Zustand ''Nicht gesichert'' ist, wird bei Eintritt der Events ''sleep'' oder ''night'' der Zustand auf ''Gesichert'' gesetzt. | ||
**Wenn der Modus ''Party'' durch den Event ''sleep'' verlassen wurde, und der Zustand ''Nicht gesichert'' ist, wird der Zustand auf ''Gesichert'' gesetzt. | **Wenn der Modus ''Party'' durch den Event ''sleep'' verlassen wurde, und der Zustand ''Nicht gesichert'' ist, wird der Zustand auf ''Gesichert'' gesetzt. | ||
*Das Attribut '''sunrise''' kann die Werte ''SunRise'' (echter Sonnenaufgang, default), ''CivilTwilightMorning'' (Horizontwinkel -6°), ''NauticalTwilightMorning'' (Horizontwinkel -12°), ''AstroTwilightMorning'' (Horizontwinkel -18°) oder ''CustomTwilightMorning'' (beliebiger Horizontwinkel als Attribut im Astro-Device) annehmen. Damit wird bestimmt, welche Zeit tatsächlich als Sonnenaufgangszeit verwendet wird. | |||
*Das Attribut '''sunset''' kann die Werte ''SunSet'' (echter Sonnenuntergang, default), ''CivilTwilightEvening'' (Horizontwinkel -6°), ''NauticalTwilightEvening'' (Horizontwinkel -12°), ''AstroTwilightEvening'' (Horizontwinkel -18°) oder ''CustomTwilightEvening'' (beliebiger Horizontwinkel als Attribut im Astro-Device) annehmen. Damit wird bestimmt, welche Zeit tatsächlich als Sonnenuntergangszeit verwendet wird. | |||
*Das Attribut '''stateDevices''' enthält eine kommagetrennte Liste von FHEM-Devices, die jeweils gefolgt werden von den erwarteten ''state''-Readings (getrennt durch ein ":"-Zeichen) für die entsprechenden (Sicherheits-) Zustände, also z.B. für eine Haustür, die in den (Sicherheits-) Zuständen ''Gesichert'', ''Geschützt'' und ''Überwacht'' abgeschlossen sein soll: | |||
HausTuer::locked:locked:locked:locked | |||
**Ob die korrekte Stellung der jeweiligen Devices erreicht wurde, wird periodisch in jeweils '''stateInterval''' Minuten geprüft und in der [[#Zusammenfassung | Zusammenfassung]] angezeigt. | |||
**Für jedes Device, dessen Zustand nicht der Vorgabe entspricht, wird die im Attribut '''stateWarning''' genannte Funktion mit den Argumenten ''Device'', ''Sollzustand'', ''Istzustand'' aufgerufen. | |||
*'''linkname''' ist der Name für den Link im FHEM-Menü. Default: ''Profile''. | *'''linkname''' ist der Name für den Link im FHEM-Menü. Default: ''Profile''. | ||
*'''hiddenroom''' ist der Name für den versteckten Raum, der das YAAHM-Device enthält. Default: ''ProfileRoom'' | *'''hiddenroom''' ist der Name für den versteckten Raum, der das YAAHM-Device enthält. Default: ''ProfileRoom'' | ||
*'''lockstate''' ist der Sperrzustand für das Device, siehe [[#Sperrung | Sperrung]] | *'''lockstate''' ist der Sperrzustand für das Device, siehe [[#Sperrung | Sperrung]] | ||
*Wenn | *Wenn das Attribut '''simulation''' auf 1 gesetzt wird, werden die Kommandos in den Aktionsfeldern nicht ausgeführt, sondern nur eine Log-Meldung geschrieben. | ||
*'''holidayDevices''', '''vacationDevices''' und '''specialDevices''' sind attribute, die jeweils eine kommagetrennte Liste von FHEM-Devices enthalten. Diese dürfen vom Typ holiday oder vom Typ calendar sein. | |||
**holidayDevices enthält die Liste der Feiertage (=höchste Tagespriorität) | |||
**vacationDevices enthält die Liste der Schulferien (=dritthöchste Tagespriorität) | |||
**specialDevices enthält eine Liste von Einzelterminen (z.B. der Müllabfuhr) | |||
*Diese Kalenderdaten werden jeweils kurz nach Mitternacht eingelesen und in der [[#Zusammenfassung | Zusammenfassung]] angezeigt. | |||
=Webinterface= | =Webinterface= | ||
Zeile 125: | Zeile 156: | ||
Das Webinterface teilt sich in zwei Abschnitte: Die Übersicht (oder toptable), bestehend aus den beiden Flächen '''Aktion''' und '''Zusammenfassung''', sowie die Profilbereiche. Die Übersicht lässt sich auch separat als Weblink '''<YAAHM_Device-Name>_shortlink''' in einen beliebigen FHEM-Raum einbinden. | Das Webinterface teilt sich in zwei Abschnitte: Die Übersicht (oder toptable), bestehend aus den beiden Flächen '''Aktion''' und '''Zusammenfassung''', sowie die Profilbereiche. Die Übersicht lässt sich auch separat als Weblink '''<YAAHM_Device-Name>_shortlink''' in einen beliebigen FHEM-Raum einbinden. | ||
===Aktion=== | ===Aktion=== | ||
[[Datei:action_2.png|600px|]] | |||
Im Aktionsfeld werden links der aktuelle Mode (=housemode) und der aktuelle (Sicherheits-) Zustand (housestate) angezeigt. Das rote Kreuz beim Zustand besagt, dass nicht alle in dem Attribut '''stateDevices''' definierten FHEM-Devices im korrekten Zustand für diesen (Sicherheits-) Zustand sind. Im Feld rechts daneben befinden sich Buttons zum Wechsel von Mode und Zustand. | |||
Unten befindet sich für jeden Wochentimer ein Eingabefeld für die 'nächste manuelle Auslösezeit'. Trägt man dort einen Wert ein, der für den heutigen Tag in der Vergangenheit liegt, wird dies als die nächste Auslösezeit am morgigen Tag interpretiert. Liegt der Wert für den heutigen Tag in der Zukunft, wird es als die nächste Auslösezeit am heutigen Tag interpretiert. Die Werte werden im Device gespeichert, sobald man das Feld verlässt. | |||
===Zusammenfassung=== | ===Zusammenfassung=== | ||
Zeile 132: | Zeile 166: | ||
[[Datei:summary_2.png|600px|]] | [[Datei:summary_2.png|600px|]] | ||
Hier werden in nicht-editierbarer Form die wichtigsten Daten für den gegenwärtigen und den darauffolgenden Tag angezeigt | Hier werden in nicht-editierbarer Form die wichtigsten Daten für den gegenwärtigen und den darauffolgenden Tag angezeigt. | ||
*Rechts oben die Liste der '''stateDevices'''. Wie man hier sieht, ist eine der Türen nicht geschlossen und somit der Zustand ''Gesichert'' nicht vollständig erfüllt. Es ist Aufgabe der externen Helferfunktionen, dies ggf. zu korrigieren. | |||
==== Das YAAHM-Widget ==== | ==== Das YAAHM-Widget ==== | ||
Zeile 152: | Zeile 188: | ||
*Der Startbutton erzeugt einen externen Timer (mit dem DOIF-Modul), der auf die Zeiten der definierten ''housetime''-Events zugreift. | *Der Startbutton erzeugt einen externen Timer (mit dem DOIF-Modul), der auf die Zeiten der definierten ''housetime''-Events zugreift. | ||
*Wenn dieser Timer erzeugt wurde, zeigt das Webinterface den entsprechenden Link an. Ein grüner Haken bedeutet, dass der Timer aktiv (enabled) ist, wenn er deaktiviert wurde (disabled), wird ein rotes Kreuz angezeigt. | *Wenn dieser Timer erzeugt wurde, zeigt das Webinterface den entsprechenden Link an. Ein grüner Haken bedeutet, dass der Timer aktiv (enabled) ist, wenn er deaktiviert wurde (disabled), wird ein rotes Kreuz angezeigt. | ||
*Die Aktionsfelder enthalten jeweils eine | *Die Aktionsfelder enthalten jeweils eine semikolon-getrennte List von FHEM-Befehlen, die bei Eintreten des Timer-Events abgearbeitet wird. | ||
*Wenn das Attribut ''timeHelper'' auf einen Perl-Funktionsnamen gesetzt wird, erfolgt automatisch der Eintrag des Perl-Funktionsnamens in das Aktionsfeld, verbunden mit dem Argument des entsprechenden Events. | *Wenn das Attribut ''timeHelper'' auf einen Perl-Funktionsnamen gesetzt wird, erfolgt automatisch der Eintrag des Perl-Funktionsnamens in das Aktionsfeld, verbunden mit dem Argument des entsprechenden Events. | ||
Zeile 166: | Zeile 202: | ||
==Sperrung== | ==Sperrung== | ||
Das Reading ''lockstate'' muss den Wert ''unlocked'' haben, damit durch Anklicken der Start-Buttons für die Timer diese auch gestartet werden. Das ist in der Regel beim ersten Laden des Moduls '''nicht''' der Fall, hierzu muss also das Reading von Hand auf den richtigen Wert gesetzt werden. Dazu muss der Befehl '''set ... unlocked''' ausgeführt werden. | Das Reading ''lockstate'' muss den Wert ''unlocked'' haben, damit durch Anklicken der Start-Buttons für die Timer diese auch gestartet werden. Das ist in der Regel beim ersten Laden des Moduls '''nicht''' der Fall, hierzu muss also das Reading von Hand auf den richtigen Wert gesetzt werden. Dazu muss der Befehl '''set ... unlocked''' ausgeführt werden. | ||
==Umstellung Sommer- zu Winterzeit== | |||
Das Reading Astro hat derzeit ein Problem, wenn von Sommer- zu Winterzeit umgestellt wird. Dann verrutscht die Aktualisierung des YAAHM-Geräts in den vorigen Tag und die Termine werden nicht korrekt synchronisiert. Um wieder in den Gleichklang zu kommen, genügt eine einmalige Ausführung des Befehls | |||
set <YAAHM-Device> initialize | |||
Siehe dazu https://forum.fhem.de/index.php?topic=74914.0 |
Aktuelle Version vom 28. März 2021, 19:53 Uhr
YAAHM | |
---|---|
Zweck / Funktion | |
Das Modul stellt eine komfortable Oberfläche bereit, um per Webinterface die zyklische Ausführung von Kommandos - mit Tages- und Wochenprofil - zu konfigurieren | |
Allgemein | |
Typ | Hilfsmodul |
Details | |
Dokumentation | EN / DE |
Support (Forum) | Unterstuetzende Dienste |
Modulname | 95_YAAHM.pm |
Ersteller | Prof. Dr. Peter A. Henning |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Diese Seite beschreibt die Konfiguration und Verwendung des Moduls 95_YAAHM.pm.
Einführung
Viele Kommandos in FHEM orientieren sich an Tageszeiten. Beispielsweise sollen Rollläden zu Sonnenaufgang hochgefahren werden, morgens die Kaffeemaschine und die Heizung eingeschaltet und bei Sonnenuntergang kontrolliert werden, ob das Garagentor geschlossen ist. Jeder dieser Befehle könnte mit einem zeitgesteuerten at-Device definiert werden. Das Modul 95_YAAHM.pm stellt für diese Aufgaben eine einheitliche und komfortable zu steuernde Oberfläche bereit. Man benötigt somit nicht mehrere at, sondern sammelt alle Befehle in YAAHM. Der Titel YAAHM ist das Akronym für Yet Another Auto Home Module, denn es gibt ja schon verschiedene Module, die den Zeitablauf in einem SmartHome vereinfachen sollen.
Die Philosophie von YAAHM ist die einfache Bedienbarkeit im Frontend, mit Eingabefeldern und Visualisierungselementen und ohne Unmengen von Attributen. Dafür gilt es zunächst, verschiedene Begriffe zu verstehen.
Tages-Typ
Ein Tagestyp wird Befehle bestimmen, die im Laufe eines Tages ausgeführt werden sollen. Am Anfang eines Tages (nach Mitternacht) sollen beispielsweise doppelte Einträge in einer Datenbank gelöscht werden, zu Sonnenaufgang werden Rollläden hochgefahren und zur Weckzeit schaltet sich die Kaffeemaschine ein. Dabei soll man aber bei den einzelnen Befehlen unterscheiden können, ob wir einen Arbeitstag, ein Wochenende oder einen Feiertag haben: An einem Werktag soll der Rollladen zu Sonnenaufgang hochfahren, an einem Feiertag dagegen erst später.
In YAAHM wird dies durch Tagestypen gelöst. Es sind immer die beiden Tagestypen Wochenende und Werktag definiert. Weitere Tagestypen, die dann die Steuerung anderer Befehle erlauben, kann man mit den Attributen vacationDevices (für Ferientage) und holidayDevices (Feiertage) hinzufügen. Dabei ist jeweils eine Semikolon-separierte Liste aus holiday-Devices oder Calendar-Devices anzugeben (da die Eingaben direkt in fhem("") eingetragen werden, sind die Regeln der Klammerebenen zu beachten). Der letztendliche Tagestyp wird dann in einer Priorisierung festgelegt: Feiertag hat die höchste Priorität, gefolgt von Wochenende, Ferientag und Werktag. Welcher Tagestyp vorliegt, wird durch YAAHM jeden Morgen kurz nach Mitternacht fixiert.
Tages-Profil
Das Tagesprofil besteht aus einer Kette von Ereignissen, die an jedem Tag aufeinander folgen. Für jedes Ereignis kann eine Liste von FHEM-Kommandos angegeben werden, die dann ausgeführt werden. Welches Ereignis als Letztes eintrat, steht im Reading housetime, das vorhergehende Ereignis im Reading prev_housetime und das vom gegenwärtigen Zeitpunkt aus nächste Ereignis im Reading next_housetime.
Wenn man mit jedem eingetretenen Ereignis eine weitere selbst definierte Funktion ausführen möchte, kann man dazu das folgende Attribut verwenden
attr <Modulname> timehelper {hier_die_Perl_Funktion_eintragen(Argumente)}
Die angegebene Perl-Hilfsfunktion wird dann bei jedem Ereignis aufgerufen. Die entsprechenden Argumente, die je nach aktueller Zeit vom Modul automatisch eingefügt werden, lauten dann wie folgt (siehe auch Attribute):
- aftermidnight, beforemidnight: Nach Mitternacht und Vor Mitternacht sind Ereignisse, die mit einem Offset an jedem Tag nach bzw. vor Mitternacht ausgeführt werden.
- sunrise, beforesunrise, aftersunrise: Sonnenaufgang, Vor Sonnenaufgang und Nach Sonnenaufgang sind Ereignisse, die an jedem Tag zu Sonnenaufgang bzw. mit einem Offset davor und danach ausgeführt werden. Der Zeitpunkt des Sonnenaufgangs wird aus dem Modul 95_Astro.pm berechnet. Mit dem Attribut sunrise kann ausgewählt werden, welcher Horizontwinkel für den Sonnenaufgang genommen wird, siehe dort.
- sunset, beforesunset, aftersunset: Sonnenuntergang, Vor Sonnenuntergang und Nach Sonnenuntergang sind Ereignisse, die an jedem Tag zu Sonnenuntergang bzw. mit einem Offset davor und danach ausgeführt werden. Der Zeitpunkt des Sonnenuntergangs wird aus dem Modul 95_Astro.pm berechnet. Mit dem Attribut sunset kann ausgewählt werden, welcher Horizontwinkel für den Sonnenuntergang genommen wird, siehe dort.
- morning, noon, afternoon, evening, night: Morgen, Mittag, Nachmittag, Abend und Nacht sind Ereignisse, die zu einer einstellbaren Zeit an jedem Tag ausgeführt werden. Das Reading housephase nimmt zwischen Morgen und Nacht den Wert Tageszeit an, sonst den Wert Nachtzeit.
- wakeup, sleep: Wecken und Schlafen sind Ereignisse, die durch die beiden Standard-Wochenprofile gleichen Namens ausgelöst werden. Die entsprechenden Zeiten können von Tag zu Tag beliebig variieren.
Wochen-Profile
Es gibt Ereignisse, die an jedem Wochentag ausgeführt werden sollen. Allerdings variiert möglicherweise die Startzeit je Wochentag. Beispielsweise soll an jedem Tag der Woche das Gartentor öffnen; Montags soll dies aber um 5:40, dienstags um 5:50 und Mittwochs bis Freitags um 6:10 geschehen, am Wochenende soll das Gartentor geschlossen bleiben. Da der Befehl an jedem Wochentag derselbe ist und nur die Startzeit variiert, eignet sich dafür das Wochenprofil.
Für jedes Wochen-Profil kann man angeben, ob es auch an einem Urlaubstag (=Url) und an einem Feiertag (=Fei) gültig sein soll, siehe Wochen-Profile.
Ein Wochenprofil definiert dabei diejenigen Ereignisse, die an jedem Wochentag ausgeführt werden sollen. Es ist möglich, mehrere Wochenprofile zu definieren. Zwei Standard-Wochenprofile Wecken und Schlafen sind vordefiniert und können nicht gelöscht werden; weitere Wochenprofile können angelegt und wieder gelöscht werden.
Für jedes Wochenprofil kann eine manuelle Auslösezeit (im Beispiel oben wären dies montags 5:40, dienstags 5:50, mittwochs bis freitags 6:10 sowie samstags und sonntags off) eingegeben werden. Ist die Auslösezeit später als der gegenwärtige Zeitpunkt, wird sie für den aktuellen Tag verwendet. Ist die Auslösezeit früher als der gegenwärtige Zeitpunkt, wird sie erst am nächsten Tag als Ausnahmezeit verwendet. Lautet die manuelle Auslösezeit 'off', wird der heutige Auslösezeitpunkt abgeschaltet, wenn er noch nicht verstrichen ist - sonst der morgige Auslösezeitpunkt. Nach Ausführung wird der manuelle Eintrag anscheinend nicht gelöscht.
Das Modul ermöglicht mit dem Attribut timeHelper die Angabe einer Perl-Hilfsfunktion, die für die beiden ersten (Standard-)Wochenprofile bei Eintritt des Events mit den entsprechenden Argumenten aufgerufen wird, siehe Attribute.
(Nutzungs-)Modus
Der housemode (bzw. (Nutzungs-)Modus) besagt, dass sich das SmartHome in einem der vier Modi Normal, Party, Abwesenheit oder Nicht Stören befindet. Dabei bedeutet:
- Normal (Readingswert normal) = normale Tages- und Wochen-Profile werden angewandt, keine speziellen Anordnungen.
- Party (Readingswert party) = kann in Hilfsfunktionen verwendet werden, um spezielle Anordnungen betreffend die Sicherheit und den Übergang in den Nachtzustand zu realisieren. Das Modul selbst sorgt dafür, dass im Party-Modus das SmartHome nicht in einen gesicherten Zustand versetzt werden kann.
- Abwesenheit (Readingswert absence) = kann in Hilfsfunktionen verwendet werden, um spezielle Anordnungen zu realisieren.
- Nicht Stören (Readingswert donotdisturb) = kann in Hilfsfunktionen verwendet werden, um spezielle Anordnungen zu realisieren.
Die Festsetzung des Modus bleibt bestehen, bis eine erneute manuelle Änderung durchgeführt wird. Ausnahme: Wenn das Attribut modeAuto gesetzt wird, kann sich der Modus auch bei bestimmten Events ändern. Für jedes Wochen-Profil kann man angeben, ob es auch im Party-Modus (=Par) und bei Abwesenheit (=Abw) gültig sein soll, siehe Wochen-Profile.
Das Modul ermöglicht mit dem Attribut modeHelper die Angabe einer Perl-Hilfsfunktion, die zu jedem Wechsel des Modus mit den entsprechenden Argumenten aufgerufen wird, siehe Attribute
(Sicherheits-)Zustand
Der housestate (bzw. (Sicherheits-)Zustand) besagt, dass sich das SmartHome in einem der vier Zustände Nicht gesichert, Gesichert, Geschützt oder Überwacht befindet. Die Festsetzung des Zustands bleibt bestehen, bis eine erneute manuelle Änderung durchgeführt wird. Ausnahme: Wenn das Attribut stateAuto gesetzt wird, kann sich der Zustand auch bei bestimmten Events ändern. Dabei bedeutet (beispielsweise !)
- Ungesichert (Readingswert unsecured) = Türen sind unverschlossen, Fenster dürfen geöffnet sein
- Gesichert (Readingswert secured) = Türen sind verschlossen, Fenster dürfen nur in Ausnahmefällen geöffnet sein
- Geschützt (Readingswert protected) = Türen sind verschlossen, Fenster dürfen nur in Ausnahmefällen geöffnet sein, die Alarmanlage ist scharf geschaltet
- Überwacht (Readingswert guarded) = Türen sind verschlossen, Fenster dürfen nur in Ausnahmefällen geöffnet sein, die Alarmanlage ist scharf geschaltet, in regelmäßigen Abständen wird der Zustand des Hauses überprüft und bei Veränderungen irgendwie gemeldet. Vielleicht läuft auch noch eine Anwesenheitssimulation
Das Modul ermöglicht mit dem Attribut stateHelper die Angabe einer Perl-Hilfsfunktion, die zu jedem Wechsel des Zustands mit den entsprechenden Argumenten aufgerufen wird, siehe Attribute. Welche FHEM-Devices dabei geschaltet werden, muss also in dieser externen Hilfsfunktion angegeben werden.
Allerdings lässt sich in YAAHM der Schaltzustand dieser Devices periodisch überwachen. Sie werden dazu in das Attribut 'stateDevices' eingetragen, siehe unten.
YAAHM-Device
Installation
YAAHM ist Bestandteil der FHEM-Distribution. Die Installation erfolgt über den Standard-Updatemechanisnmus. Zu YAAHM gehören das Modul 95_YAAHM.pm und die Datei yaahm.js in /fhem/www/pgm2
Definition
Das YAAHM-Device - hier mit dem Namen YYY versehen - selbst wird über
define YYY YAAHM
definiert. Diese Definition legt einen versteckten Raum "ProfileRoom" an, welcher über einen Weblink im oberen Menü des Webinterfaces erreichbar ist.
- Der Name dieses Raumes kann durch das Attribut hiddenRoom geändert werden.
- Dieses Modul verwendet das globale Attribut language zur Bestimmung der Anzeigedaten (Standard: EN=english). Für deutsche Ausgabedaten muss in FHEM das Attribut
attr global language DE
gesetzt werden. Für dieses Wiki werden die deutschen Ausgabedaten verwendet.
Beim Anklicken des Begriffes Profile (eben der genannte Weblink) im oberen Menü des Webinterfaces wird dieser versteckte Raum angezeigt. Er enthält an erster Stelle das YAAHM-Device. Für die Konfiguration dieses Devices siehe den nächsten Abschnitt, für die Bedienung siehe den Abschnitt [Bedienung].
Set-Befehle
Das YAAHM-Device kennt die folgenden Set-Befehle (YYY ist duch den tatsächlichen Device-Namen zu ersetzen):
set YYY time (after|before)midnight | [before|after]sunrise | [before|after]sunset | morning | noon | afternoon | evening | night | wakeup | sleep
Erzeugt manuell den entsprechenden Event.
set YYY manualnext <timernumber> <time> set YYY manualnext <timername> <time>
Setzt die manuelle Auslösezeit für das Wochen-Profil (Timer genannt), das durch die Angabe einer fortlaufenden Nummerierung (beginnend bei 0) oder seinen Namen identifiziert wird. Das nicht löschbare Standard-Wochen-Profil Wecken hat die Timer-Nummer 0, das nicht löschbare Standard-Wochen-Profil Schlafen hat die Timer-Nummer 1.
set YYY mode normal | party | absence | donotdisturb
Setzt den (Nutzungs-)Modus des SmartHome
set YYY state unsecured | secured | protected | guarded
Setzt den (Sicherheits-)Zustand des SmartHome
set YYY checkstate (0|5|10)
Führe die Überprüfung, ob alle stateDevices (siehe Attribute) für diesen (Sicherheits-)Zustand den richtigen Wert haben, manuell sofort oder mit 5 bzw. 10 Sekunden Verzögerung aus.
set YYY correctstate
Führe für jedes stateDevice (siehe Attribute), das nicht den richtigen Wert hat, das FHEM-Kommando set <stateDevice> <sollzustand> aus.
set YYY createWeekly <string> set YYY deleteWeekly <string>
Erzeuge oder entferne ein Wochen-Profil mit dem entsprechenden Namen. Die beiden Standard-Wochen-Profile Wecken und Schlafen können nicht gelöscht werden.
set YYY locked |unlocked
Sperre oder entsperre das Überschreiben der Timer, siehe Sperrung.
set YYY save | restore
Speichere die Daten persistent, oder hole sie aus der betreffenden Datei YAAHMFile (Achtung für Nutzer der configdb: Das File wird in der Datenbank abgelegt, nicht im Dateisystem).
Get-Befehle
Das YAAHM-Device kennt die folgenden Get-Befehle (YYY ist duch den tatsächlichen Device-Namen zu ersetzen):
get YYY next <timernumber> get YYY next <timername> get YYY sayNext <timernumber> get YYY sayNext <timername>
Holt die nächste Auslösezeit für das betreffende Wochen-Profil (Timer genannt). Mit dem Befehl next erfolgt das in einem Format, das für textuelle Ausgabegeräte geeignet ist, mit dem Befehl sayNext in einem Format, das für Sprach-Ausgabegeräte geeignet ist. Die Identifikation des Wochen-Profiles (Timer genannt) erfolgt durch die Angabe einer fortlaufenden Nummerierung (beginnend bei 0) oder seinen Namen. Das nicht löschbare Standard-Wochen-Profil Wecken hat die Timer-Nummer 0, das nicht löschbare Standard-Wochen-Profil Schlafen hat die Timer-Nummer 1.
get YYY version
Gibt die Versionsnummer des Moduls zurück
get YYY template
Gibt Vorschläge für Helferfunktionen zurück.
Attribute
- Wenn das Attribut timeHelper auf einen Perl-Funktionsnamen gesetzt wird, erfolgt automatisch der Eintrag des Perl-Funktionsnamens in das Aktionsfeld für das Tages-Profil und die Aktionsfelder der beiden ersten (=Standard-)Wochenprofile, verbunden mit dem Argument des entsprechenden Events. Einen entsprechenden Vorschlag für eine solche Helferfunktion kann man sich durch get YYY template anzeigen lassen.
- Wenn das Attribut modeHelper auf einen Perl-Funktionsnamen gesetzt wird, erfolgt automatisch die Ausführung dieser Funktion (verbunden mit dem Argument des entsprechenden Events) bei einem Wechsel des (Nutzungs-)Modus. Einen entsprechenden Vorschlag für eine solche Helferfunktion kann man sich durch get YYY template anzeigen lassen.
- Wenn das Attribut modeAuto auf 1 gesetzt wird, wechselt der (Nutzungs-)Modus automatisch zu bestimmten Events:
- Die Events sleep und morning bewirken, dass der Modus Party aufgehoben wird und wieder Normal ist.
- Der Event wakeup bewirkt, dass der Modus Abwesenheit aufgehoben wird und wieder Normal ist.
- Jeder Event bewirkt, dass der Modus Nicht Stören aufgehoben wird und wieder Normal ist.
- Wenn das Attribut norepeat auf 1 gesetzt wird, sind am gleichen Tage keine Wiederholungen eines (Wochen-)Timers aus dem Wochen-Profil möglich - allerdings werden manuelle Zeiten akzeptiert.
- Wenn das Attribut stateHelper auf einen Perl-Funktionsnamen gesetzt wird, erfolgt automatisch die Ausführung dieser Funktion (verbunden mit dem Argument des entsprechenden Events) bei einem Wechsel des (Sicherheits-)Zustands. Einen entsprechenden Vorschlag für eine solche Helferfunktion kann man sich durch get YYY template anzeigen lassen.
- Wenn das Attribut stateAuto auf 1 gesetzt wird, wechselt der (Sicherheits-)Zustand automatisch zu bestimmten Events:
- Wenn der Modus Normal ist und der Zustand Nicht gesichert ist, wird bei Eintritt der Events sleep oder night der Zustand auf Gesichert gesetzt.
- Wenn der Modus Party durch den Event sleep verlassen wurde, und der Zustand Nicht gesichert ist, wird der Zustand auf Gesichert gesetzt.
- Das Attribut sunrise kann die Werte SunRise (echter Sonnenaufgang, default), CivilTwilightMorning (Horizontwinkel -6°), NauticalTwilightMorning (Horizontwinkel -12°), AstroTwilightMorning (Horizontwinkel -18°) oder CustomTwilightMorning (beliebiger Horizontwinkel als Attribut im Astro-Device) annehmen. Damit wird bestimmt, welche Zeit tatsächlich als Sonnenaufgangszeit verwendet wird.
- Das Attribut sunset kann die Werte SunSet (echter Sonnenuntergang, default), CivilTwilightEvening (Horizontwinkel -6°), NauticalTwilightEvening (Horizontwinkel -12°), AstroTwilightEvening (Horizontwinkel -18°) oder CustomTwilightEvening (beliebiger Horizontwinkel als Attribut im Astro-Device) annehmen. Damit wird bestimmt, welche Zeit tatsächlich als Sonnenuntergangszeit verwendet wird.
- Das Attribut stateDevices enthält eine kommagetrennte Liste von FHEM-Devices, die jeweils gefolgt werden von den erwarteten state-Readings (getrennt durch ein ":"-Zeichen) für die entsprechenden (Sicherheits-) Zustände, also z.B. für eine Haustür, die in den (Sicherheits-) Zuständen Gesichert, Geschützt und Überwacht abgeschlossen sein soll:
HausTuer::locked:locked:locked:locked
- Ob die korrekte Stellung der jeweiligen Devices erreicht wurde, wird periodisch in jeweils stateInterval Minuten geprüft und in der Zusammenfassung angezeigt.
- Für jedes Device, dessen Zustand nicht der Vorgabe entspricht, wird die im Attribut stateWarning genannte Funktion mit den Argumenten Device, Sollzustand, Istzustand aufgerufen.
- linkname ist der Name für den Link im FHEM-Menü. Default: Profile.
- hiddenroom ist der Name für den versteckten Raum, der das YAAHM-Device enthält. Default: ProfileRoom
- lockstate ist der Sperrzustand für das Device, siehe Sperrung
- Wenn das Attribut simulation auf 1 gesetzt wird, werden die Kommandos in den Aktionsfeldern nicht ausgeführt, sondern nur eine Log-Meldung geschrieben.
- holidayDevices, vacationDevices und specialDevices sind attribute, die jeweils eine kommagetrennte Liste von FHEM-Devices enthalten. Diese dürfen vom Typ holiday oder vom Typ calendar sein.
- holidayDevices enthält die Liste der Feiertage (=höchste Tagespriorität)
- vacationDevices enthält die Liste der Schulferien (=dritthöchste Tagespriorität)
- specialDevices enthält eine Liste von Einzelterminen (z.B. der Müllabfuhr)
- Diese Kalenderdaten werden jeweils kurz nach Mitternacht eingelesen und in der Zusammenfassung angezeigt.
Webinterface
In diesem Abschnitt wird die Bedienung des Webinterfaces und damit die Konfiguration der Hausautomatik beschrieben. Um sie zu erreichen, klickt man auf den Begriff Profile im oberen Menü des Webinterfaces.
Das Webinterface teilt sich in zwei Abschnitte: Die Übersicht (oder toptable), bestehend aus den beiden Flächen Aktion und Zusammenfassung, sowie die Profilbereiche. Die Übersicht lässt sich auch separat als Weblink <YAAHM_Device-Name>_shortlink in einen beliebigen FHEM-Raum einbinden.
Aktion
Im Aktionsfeld werden links der aktuelle Mode (=housemode) und der aktuelle (Sicherheits-) Zustand (housestate) angezeigt. Das rote Kreuz beim Zustand besagt, dass nicht alle in dem Attribut stateDevices definierten FHEM-Devices im korrekten Zustand für diesen (Sicherheits-) Zustand sind. Im Feld rechts daneben befinden sich Buttons zum Wechsel von Mode und Zustand.
Unten befindet sich für jeden Wochentimer ein Eingabefeld für die 'nächste manuelle Auslösezeit'. Trägt man dort einen Wert ein, der für den heutigen Tag in der Vergangenheit liegt, wird dies als die nächste Auslösezeit am morgigen Tag interpretiert. Liegt der Wert für den heutigen Tag in der Zukunft, wird es als die nächste Auslösezeit am heutigen Tag interpretiert. Die Werte werden im Device gespeichert, sobald man das Feld verlässt.
Zusammenfassung
Hier werden in nicht-editierbarer Form die wichtigsten Daten für den gegenwärtigen und den darauffolgenden Tag angezeigt.
- Rechts oben die Liste der stateDevices. Wie man hier sieht, ist eine der Türen nicht geschlossen und somit der Zustand Gesichert nicht vollständig erfüllt. Es ist Aufgabe der externen Helferfunktionen, dies ggf. zu korrigieren.
Das YAAHM-Widget
Dabei handelt es sich um eine dynamisch erzeugte SVG-Datei, die man auch in beliebige eigene Webseiten einbinden kann. Der Aufruf dafür lautet
<IP-Adresse:Port>/fhem/YAAHM_timewidget?name='<Device-Name>'&size='<breite>x<höhe>'
Selbstverständlich kann man das auch in einen eigenen Weblink einbauen. Markiert sind auf diesem Kreis die housetime-Events Sonnenaufgang, Morgen, Mittag, Nachmittag, Abend, Sonnenuntergang und Nacht. Die Tageszeit ist ferner durch einen türkisfarbenen Sektor gekennzeichnet, und Mitternacht ist immer "unten".
Die gegenwärtige Zeit (beim Aufruf !) wird in rot angezeigt.
Hinweis: Es ist angedacht, dieses Widget noch sehr viel interaktiver zu machen.
Einstellung des Tages-Profils
- Der Startbutton erzeugt einen externen Timer (mit dem DOIF-Modul), der auf die Zeiten der definierten housetime-Events zugreift.
- Wenn dieser Timer erzeugt wurde, zeigt das Webinterface den entsprechenden Link an. Ein grüner Haken bedeutet, dass der Timer aktiv (enabled) ist, wenn er deaktiviert wurde (disabled), wird ein rotes Kreuz angezeigt.
- Die Aktionsfelder enthalten jeweils eine semikolon-getrennte List von FHEM-Befehlen, die bei Eintreten des Timer-Events abgearbeitet wird.
- Wenn das Attribut timeHelper auf einen Perl-Funktionsnamen gesetzt wird, erfolgt automatisch der Eintrag des Perl-Funktionsnamens in das Aktionsfeld, verbunden mit dem Argument des entsprechenden Events.
Einstellung der Wochen-Profile
- Der Startbutton erzeugt externe Timer (mit dem DOIF-Modul), die auf das Reading ring_<timer-no> zugreifen. Dieses Reading wird jeweils kurs nach Mitternacht auf den korrekten Wert für den entsprechenden Tag gesetzt.
- Wenn diese Timer erzeugt wurden, zeigt das Webinterface den entsprechenden Link an. Ein grüner Haken bedeutet, dass der Timer aktiv (enabled) ist, wenn er deaktiviert wurde (disabled), wird ein rotes Kreuz angezeigt.
- Die Checkboxen Par und Abw geben an, ob das betreffende Wochen-Profil (und damit der Timer) auch in den Modi Party und Abwesenheit aktiv ist. Die Checkboxen Fer und Fei geben an, ob das betreffende Wochen-Profil (und damit der Timer) auch an den Tagestypen Ferientag und Feiertag aktiv ist.
- Die Aktionsfelder enthalten jeweils eine komma-getrennte List von FHEM-Befehlen, die bei Eintreten des Timer-Events abgearbeitet wird.
- Wenn das Attribut timeHelper auf einen Perl-Funktionsnamen gesetzt wird, erfolgt bei den beiden ersten (=Standard-) Timern automatisch der Eintrag des Perl-Funktionsnamens in das Aktionsfeld, verbunden mit dem Argument wakeup oder sleep.
Sonstiges
Sperrung
Das Reading lockstate muss den Wert unlocked haben, damit durch Anklicken der Start-Buttons für die Timer diese auch gestartet werden. Das ist in der Regel beim ersten Laden des Moduls nicht der Fall, hierzu muss also das Reading von Hand auf den richtigen Wert gesetzt werden. Dazu muss der Befehl set ... unlocked ausgeführt werden.
Umstellung Sommer- zu Winterzeit
Das Reading Astro hat derzeit ein Problem, wenn von Sommer- zu Winterzeit umgestellt wird. Dann verrutscht die Aktualisierung des YAAHM-Geräts in den vorigen Tag und die Termine werden nicht korrekt synchronisiert. Um wieder in den Gleichklang zu kommen, genügt eine einmalige Ausführung des Befehls
set <YAAHM-Device> initialize