Zuhause-Status: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
K (Fehler in IF Abfrage korrigiert (fehlende Klammer))
 
(19 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 10: Zeile 10:


== Lösungsansatz ==
== Lösungsansatz ==
Es wird eine Variable HomeStatus als dummy-device, also als Variable definiert.
Es werden ein 4-Tasten-Wandschalter fs20-s4a und eine 4-Tasten-Fernbedienung fs20-s4 mit identischem Hauscode und Tastencodes versehen, die Tasten angelernt und benannt in HomeStat1, HomeStat2, HomeStat3, HomeStat4.
Der Wandschalter kommt z.B. neben die Wohnungstür, die Fernbedienung ans Bett.


Desweiteren werden ein 4-Tasten-Wandschalter fs20-s4a und eine 4-Tasten-Fernbedienung fs20-s4 mit identischem Hauscode und Tastencodes versehen, die Tasten angelernt und benannt in HomeStat1, HomeStat2, HomeStat3, HomeStat4.
Beim Drücken dieser Tasten wird der HomeStatus gesetzt. Ausserdem werden die gemäß dem neuen Status benötigten bzw. nicht mehr benötigten Geräte ein- oder ausgeschaltet:
Der Wandschalter kommt neben die Wohnungstür, die Fernbedienung ans Bett.


Beim Drücken dieser Tasten wird HomeStatus auf 1, 2, 3 oder 4 gesetzt. Ausserdem werden die gemäß dem neuen Status benötigten bzw. nicht mehr benötigten Geräte ein- oder ausgeschaltet:
;Bei Setzen von HomeStatus 1 / home (ich komme zuhause an)
: Media an
: Heizung auf Tagtemperatur
: WLAN an


;Bei Setzen von HomeStatus 2 /sleep (ich gehe schlafen)
: Alle Lampen aus ausser Schlafzimmer
: Media aus
: Heizung auf Nachttemperatur
: WLAN aus


;Bei Setzen von HomeStatus 3 / away (verlassen der Wohnung für kurze Zeit)
: Alle Lampen aus
: Media aus
: Heizung auf Nachttemperatur
: WLAN aus


<dl><dt>Bei Setzen von HomeStatus 1 (ich komme zuhause an)
;Bei Setzen von HomeStatus 4 / travel (ich verlasse die Wohnung für längere Zeit)
</dt><dd> - Media an
: Alles aus
</dd><dd> - Heizung auf Tagtemperatur
: Heizung runterregeln auf 'Ferienprogramm'
</dd><dd> - WLAN an
: WLAN aus  
</dd></dl>
<dl><dt> Bei Setzen von HomeStatus 2 (ich gehe schlafen)
</dt><dd> - Alle Lampen aus ausser Schlafzimmer
</dd><dd> - Media aus
</dd><dd> - Heizung auf Nachttemperatur
</dd><dd> - WLAN aus
</dd></dl>
<dl><dt>Bei Setzen von HomeStatus 3 (verlassen der Wohnung für kurze Zeit)
</dt><dd> - Alle Lampen aus
</dd><dd> - Media aus
</dd><dd> - Heizung auf Nachttemperatur
</dd><dd> - WLAN aus
</dd></dl>
<dl><dt>Bei Setzen von HomeStatus 4 (ich verlasse die Wohnung für längere Zeit)
</dt><dd> - Alles aus
</dd><dd> - Heizung runterregeln auf 'Ferienprogramm'
</dd><dd> - WLAN aus  
</dd></dl>
Regelmäßig geschaltete Geräte berücksichtigen ebenfalls den HomeStatus, z.B. startet das Wakeuplight nur an Wochentagen und nur wenn ich zuhause bin, also der HomeStatus &lt; 3 ist.


Regelmäßig geschaltete Geräte berücksichtigen ebenfalls den HomeStatus, z.B. startet das Wakeuplight nur an Wochentagen und nur wenn ich zuhause bin.


== Hardware-Definition ==
Um die o.g. Schalter zu realisieren, hier ein FS20-Beispiel. Selbstverständlich können ebenso gut Schalter aus anderen Hardwarefamilien verwendet werden.
<nowiki>
define whg_HomeStat1 FS20 696c 00
define whg_HomeStat2 FS20 696c 01
define whg_HomeStat3 FS20 696c 02
define whg_HomeStat4 FS20 696c 03 </nowiki>
== Umsetzung mit LightScene ==
Zum Schalten der Geräte kann das Modul [http://fhem.de/commandref.html#LightScene LightScene] verwendet werden.<br>
Dabei können die unterschiedlichen HomeStatus (die in dem Modul 'scenes' genannt werden) definiert werden.<br>
[[Datei:LightScene_HomeStatus.JPG]]<br>
In der ersten Zeile wird der aktuelle Schaltzustand der Geräte angezeigt. Im unteren Bereich erscheint der Zielzustand, zu dem beim Aktivieren einer "Szene" geschaltet wird.
=== LightScene-device definieren ===
Bei der Definition des LightScene-device wird gleich mit angegeben, welche Geräte geschaltet werden sollen.<br>
In das Kommandofeld des webfrontends also eingeben: <br>
''define <NameDesLightScene-device> LightScene <Liste der Geräte>'', für ein Ergbnis wie im screenshot also z.B.
define LS LightScene ez_FHT ez_LichtMaster ko_LichtKorridor sz_LichtMaster whg_Audio whg_WLAN wz_LichtMaster wz_MacMini
'''Hinweis:''' Um die Liste der Geräte später zu verändern/erweitern, kann im Detailscreen auf DEF geklickt werden.<br>
'''Hinweis:''' Man kann das LightScene-device natürlich auch "HomeStatus" nennen :)<br>
Ein weiterer vorbereitender Schritt ist die Zuordnung der zu verwendenden Befehle. Ohne weitere Angaben wird beim späteren Aktivieren einer scene immer der Befehl 'set' verwendet.  In unserem Beispiel soll für das Gerät ez_FHT jedoch nicht ein einfacher set-Befehl, sondern ''set desired-temp'' verwendet werden. Um dies zu erreichen, wird auf dem betroffenen device das Attribut ''lightSceneParamsToSave'' gesetzt. In unserem Beispiel also
attr ez_FHT lightSceneParamsToSave desired-temp
=== Szenen (=unterschiedliche HomeStatus) definieren ===
Das Modul LightScene verwendet beim Anlegen einer scene den aktuellen Schaltzustand aller in der Definition angegebenen Geräte.<br>
Schalten Sie also alle Geräte zunächst so, wie sie zukünftig immer geschaltet sein sollen, wenn Sie nach hause kommen. <br>
Dann erzeuigen Sie eine scene durch Zusammenklicken des Befehls oder Eingabe des Befehls in das Kommandofeld ''set <NameDesLighSceneDevice> save <NameDerNeuenScene>'', also z.B.
set LS save home
=== Szenen bearbeiten ===
Es wurde nun also für alle Geräte der aktuelle Schaltzustand als Sollzustand für die scene ''home'' eingestellt.<br>
Vielleicht war aber ein Gerät zum Zeitpunkt des save-Befehls gar nicht im gewünschten Zustand, oder ein bestimmtes Gerät soll z.B. gar nicht geschaltet werden. In unserem Bespiel trifft Letzteres z.B. auf das Gerät ez_LichtMaster zu. Dieses Gerät soll beim Verlassen der Wohnung ausgeschaltet werden, beim Betreten der Wohnung jedoch nicht automatisch eingeschaltet werden. Beim Aktivieren der scene home soll also das Gerät nicht geschaltet werden.<br>
Um in einer bestimmten scene für ein bestimmtes Gerät den Befehl zu ändern (oder zu löschen), wird der Befehl ''set <LightSceneDevice> set <scene> <device> <Befehl>'' verwendet. Dies ist recht komfortabel über den Detailscreen möglich.<br>
In unserem Beispiel soll z.B. dem Gerät ez_LichtMaster "kein Kommando" zugeordnet werden, <Befehl> ist also leer´; auch für andere Geräte soll der Befehl möglicherweise angepasst werden:
set LS set home ez_LichtMaster
set LS set home whg_WLAN on
set LS set home ez_FHT desired-temp 21.0
Analog werden nun die Szenen sleep´, away (kurz weg) und travel (lange weg) erzeugt.<br>


== Codings ==
Wenn in einer Szene nur Geräte enthalten sind die sich über ein klick auf das icon passend schalten lassen kann man sich die Szene mit den Icons im Spaltentitel' der Detailansicht der LightScene zusammen klicken' und mit save sichern. Alle Geräte die einer besonderen Behandlung bedürfen sollten hierzu vorher über lightSceneParamsToSave konfiguriert werden oder danach von Hand mit dem oben erwähnten set angepasst werden.
 
=== Szenen aktivieren ===
Last but not least muss nun noch der im vorhergehende Abschnitt definierte Schalter bei Tastendruck die jeweilige Szene aktivieren:
define Zuhause notify whg_HomeStat1 set LS scene home
define Zuhause notify whg_HomeStat2 set LS scene sleep
define Zuhause notify whg_HomeStat3 set LS scene away
define Zuhause notify whg_HomeStat4 set LS scene travel
 
=== Szenen prüfen ===
Um zu prüfen, welche Geräte beim Aktiviren einer Szene geschaltet werden, steht der Befehl ''get <LightSceneDevice> <scene>'' zur Verfügung.<br>
''get LS home'' gibt also z.B. aus:
ez_FHT: desired-temp 21.0
ko_LichtKorridor: on
sz_Main: on
whg_Audio: on
whg_WLAN: on
wz_MacMini: on
 
== Umsetzung ohne LightScene ==
Der HomeStatus wird in einem Dummy gespeichert.<br>
Bei Wechseln des Werts dieses dummy wird ein entsprechndes notify ausgelöst, das das Schalten der Geräte übernimmt:
  <nowiki>define HomeStatus dummy
  <nowiki>define HomeStatus dummy
attr HomeStatus room Wohnung
attr HomeStatus room Wohnung
define whg_HomeStat1 FS20 696c 00
define Zuhause notify whg_HomeStat1 set HomeStatus 1;;trigger whg_Audio on;;set whg_WLAN,wz_MacMini on;;set ez_FHT desired-temp 21.0
define whg_HomeStat2 FS20 696c 01
define whg_HomeStat3 FS20 696c 02
define whg_HomeStat4 FS20 696c 03</nowiki>
<nowiki>define Zuhause notify whg_HomeStat1 set HomeStatus 1;;trigger whg_Audio on;;set whg_WLAN,wz_MacMini on;;set ez_FHT desired-temp 21.0
define Schlafen notify whg_HomeStat2 set HomeStatus 2;;trigger whg_MediaAus off;;set ez_FHT desired-temp 19.0;;set ez_LichtAlle,wz_LichtAlle,ku_LichtAlle,whg_WLAN off
define Schlafen notify whg_HomeStat2 set HomeStatus 2;;trigger whg_MediaAus off;;set ez_FHT desired-temp 19.0;;set ez_LichtAlle,wz_LichtAlle,ku_LichtAlle,whg_WLAN off
define KurzWeg notify whg_HomeStat3 set HomeStatus 3;;set ez_FHT desired-temp 18.5;;trigger whg_MediaAus off;;set whg_WLAN,Wohnung_Licht off
define KurzWeg notify whg_HomeStat3 set HomeStatus 3;;set ez_FHT desired-temp 18.5;;trigger whg_MediaAus off;;set whg_WLAN,Wohnung_Licht off
define LangeWeg notify whg_HomeStat4 set HomeStatus 4;;trigger whg_MediaAus off;;set Wohnung_Licht,whg_WLAN,wz_MacMini off;;set ez_FHT desired-temp 17.0</nowiki>
define LangeWeg notify whg_HomeStat4 set HomeStatus 4;;trigger whg_MediaAus off;;set Wohnung_Licht,whg_WLAN,wz_MacMini off;;set ez_FHT desired-temp 17.0</nowiki>
<nowiki>define wakeup at *07:00 {\
 
== Geräte abhängig von HomeStatus schalten - Beispiel WakeupLight ==
Auch beim Schalten von Geräten kann der HomeStatus berücksichtigt werden. <br>
Das coding unterscheidet sich bei Verwendung von dummy oder LightScene nur leicht - siehe 4. Zeile:
<nowiki>
define wakeup at *07:00 {\
  {Log 3, ('wakeupLOG WE:    '.$we)}\
  {Log 3, ('wakeupLOG WE:    '.$we)}\
  {Log 3, ('wakeupLOG HomeStatus: '.(Value("HomeStatus")))}\
  {Log 3, ('wakeupLOG HomeStatus: '.(Value("HomeStatus")))}\
  if ((!$we) '''and (Value("HomeStatus") &lt; 3''') {\
  if ((!$we) and (Value("HomeStatus")) &lt; 3) {\ ###bei Umsetzung mit LightScene: if ((!$we) and (Value("LS") eq "home" || Value("LS") eq "sleep"))
   {fhem("define wakeup2 at +00:18:00 set sz_Stehlampe on") }\
   {fhem("define wakeup2 at +00:18:00 set sz_Stehlampe on") }\
   {fhem("define wakeupOff at +00:45:00 set sz_Leselampe,sz_Stehlampe off") }\
   {fhem("define wakeupOff at +00:45:00 set sz_Leselampe,sz_Stehlampe off") }\
Zeile 69: Zeile 125:
  }\
  }\
}</nowiki>
}</nowiki>
== Weitere Beispiele ==
== Weitere Beispiele ==
[[Wakeuplight]]
[[Wakeuplight]]
[[Licht bei Bedingungen einschalten]]
[[Licht bei Bedingungen einschalten]]
[[Kategorie:Code Snippets]]

Aktuelle Version vom 3. März 2014, 09:46 Uhr

Abhängig davon, ob man sich zuhause aufhält, schläft oder ausser Haus ist, sollen Geräte unterschiedlich geschaltet werden.

Dabei sollen

  1. beim Statuswechsel (also "ich komme nach hause", "ich gehe schlafen" etc) Geräte geschaltet werden
  2. regelmäßig geplante "at *" -Vorgänge ihr Verhalten auch davon abhängig machen, ob jemand zuhause ist oder nicht.

Der Status kann z. B. per Schalter gesetzt werden. Automatisiert geht das auch mit dem PRESENCE Modul

Lösungsansatz

Es werden ein 4-Tasten-Wandschalter fs20-s4a und eine 4-Tasten-Fernbedienung fs20-s4 mit identischem Hauscode und Tastencodes versehen, die Tasten angelernt und benannt in HomeStat1, HomeStat2, HomeStat3, HomeStat4. Der Wandschalter kommt z.B. neben die Wohnungstür, die Fernbedienung ans Bett.

Beim Drücken dieser Tasten wird der HomeStatus gesetzt. Ausserdem werden die gemäß dem neuen Status benötigten bzw. nicht mehr benötigten Geräte ein- oder ausgeschaltet:

Bei Setzen von HomeStatus 1 / home (ich komme zuhause an)
Media an
Heizung auf Tagtemperatur
WLAN an
Bei Setzen von HomeStatus 2 /sleep (ich gehe schlafen)
Alle Lampen aus ausser Schlafzimmer
Media aus
Heizung auf Nachttemperatur
WLAN aus
Bei Setzen von HomeStatus 3 / away (verlassen der Wohnung für kurze Zeit)
Alle Lampen aus
Media aus
Heizung auf Nachttemperatur
WLAN aus
Bei Setzen von HomeStatus 4 / travel (ich verlasse die Wohnung für längere Zeit)
Alles aus
Heizung runterregeln auf 'Ferienprogramm'
WLAN aus

Regelmäßig geschaltete Geräte berücksichtigen ebenfalls den HomeStatus, z.B. startet das Wakeuplight nur an Wochentagen und nur wenn ich zuhause bin.

Hardware-Definition

Um die o.g. Schalter zu realisieren, hier ein FS20-Beispiel. Selbstverständlich können ebenso gut Schalter aus anderen Hardwarefamilien verwendet werden.

define whg_HomeStat1 FS20 696c 00
define whg_HomeStat2 FS20 696c 01
define whg_HomeStat3 FS20 696c 02
define whg_HomeStat4 FS20 696c 03 

Umsetzung mit LightScene

Zum Schalten der Geräte kann das Modul LightScene verwendet werden.
Dabei können die unterschiedlichen HomeStatus (die in dem Modul 'scenes' genannt werden) definiert werden.
LightScene HomeStatus.JPG
In der ersten Zeile wird der aktuelle Schaltzustand der Geräte angezeigt. Im unteren Bereich erscheint der Zielzustand, zu dem beim Aktivieren einer "Szene" geschaltet wird.

LightScene-device definieren

Bei der Definition des LightScene-device wird gleich mit angegeben, welche Geräte geschaltet werden sollen.
In das Kommandofeld des webfrontends also eingeben:
define <NameDesLightScene-device> LightScene <Liste der Geräte>, für ein Ergbnis wie im screenshot also z.B.

define LS LightScene ez_FHT ez_LichtMaster ko_LichtKorridor sz_LichtMaster whg_Audio whg_WLAN wz_LichtMaster wz_MacMini

Hinweis: Um die Liste der Geräte später zu verändern/erweitern, kann im Detailscreen auf DEF geklickt werden.
Hinweis: Man kann das LightScene-device natürlich auch "HomeStatus" nennen :)
Ein weiterer vorbereitender Schritt ist die Zuordnung der zu verwendenden Befehle. Ohne weitere Angaben wird beim späteren Aktivieren einer scene immer der Befehl 'set' verwendet. In unserem Beispiel soll für das Gerät ez_FHT jedoch nicht ein einfacher set-Befehl, sondern set desired-temp verwendet werden. Um dies zu erreichen, wird auf dem betroffenen device das Attribut lightSceneParamsToSave gesetzt. In unserem Beispiel also

attr ez_FHT lightSceneParamsToSave desired-temp

Szenen (=unterschiedliche HomeStatus) definieren

Das Modul LightScene verwendet beim Anlegen einer scene den aktuellen Schaltzustand aller in der Definition angegebenen Geräte.
Schalten Sie also alle Geräte zunächst so, wie sie zukünftig immer geschaltet sein sollen, wenn Sie nach hause kommen.
Dann erzeuigen Sie eine scene durch Zusammenklicken des Befehls oder Eingabe des Befehls in das Kommandofeld set <NameDesLighSceneDevice> save <NameDerNeuenScene>, also z.B.

set LS save home

Szenen bearbeiten

Es wurde nun also für alle Geräte der aktuelle Schaltzustand als Sollzustand für die scene home eingestellt.
Vielleicht war aber ein Gerät zum Zeitpunkt des save-Befehls gar nicht im gewünschten Zustand, oder ein bestimmtes Gerät soll z.B. gar nicht geschaltet werden. In unserem Bespiel trifft Letzteres z.B. auf das Gerät ez_LichtMaster zu. Dieses Gerät soll beim Verlassen der Wohnung ausgeschaltet werden, beim Betreten der Wohnung jedoch nicht automatisch eingeschaltet werden. Beim Aktivieren der scene home soll also das Gerät nicht geschaltet werden.
Um in einer bestimmten scene für ein bestimmtes Gerät den Befehl zu ändern (oder zu löschen), wird der Befehl set <LightSceneDevice> set <scene> <device> <Befehl> verwendet. Dies ist recht komfortabel über den Detailscreen möglich.
In unserem Beispiel soll z.B. dem Gerät ez_LichtMaster "kein Kommando" zugeordnet werden, <Befehl> ist also leer´; auch für andere Geräte soll der Befehl möglicherweise angepasst werden:

set LS set home ez_LichtMaster
set LS set home whg_WLAN on
set LS set home ez_FHT desired-temp 21.0

Analog werden nun die Szenen sleep´, away (kurz weg) und travel (lange weg) erzeugt.

Wenn in einer Szene nur Geräte enthalten sind die sich über ein klick auf das icon passend schalten lassen kann man sich die Szene mit den Icons im Spaltentitel' der Detailansicht der LightScene zusammen klicken' und mit save sichern. Alle Geräte die einer besonderen Behandlung bedürfen sollten hierzu vorher über lightSceneParamsToSave konfiguriert werden oder danach von Hand mit dem oben erwähnten set angepasst werden.

Szenen aktivieren

Last but not least muss nun noch der im vorhergehende Abschnitt definierte Schalter bei Tastendruck die jeweilige Szene aktivieren:

define Zuhause notify whg_HomeStat1 set LS scene home
define Zuhause notify whg_HomeStat2 set LS scene sleep
define Zuhause notify whg_HomeStat3 set LS scene away
define Zuhause notify whg_HomeStat4 set LS scene travel

Szenen prüfen

Um zu prüfen, welche Geräte beim Aktiviren einer Szene geschaltet werden, steht der Befehl get <LightSceneDevice> <scene> zur Verfügung.
get LS home gibt also z.B. aus:

ez_FHT: desired-temp 21.0
ko_LichtKorridor: on
sz_Main: on
whg_Audio: on
whg_WLAN: on
wz_MacMini: on

Umsetzung ohne LightScene

Der HomeStatus wird in einem Dummy gespeichert.
Bei Wechseln des Werts dieses dummy wird ein entsprechndes notify ausgelöst, das das Schalten der Geräte übernimmt:

define HomeStatus dummy
attr HomeStatus room Wohnung
define Zuhause notify whg_HomeStat1 set HomeStatus 1;;trigger whg_Audio on;;set whg_WLAN,wz_MacMini on;;set ez_FHT desired-temp 21.0
define Schlafen notify whg_HomeStat2 set HomeStatus 2;;trigger whg_MediaAus off;;set ez_FHT desired-temp 19.0;;set ez_LichtAlle,wz_LichtAlle,ku_LichtAlle,whg_WLAN off
define KurzWeg notify whg_HomeStat3 set HomeStatus 3;;set ez_FHT desired-temp 18.5;;trigger whg_MediaAus off;;set whg_WLAN,Wohnung_Licht off
define LangeWeg notify whg_HomeStat4 set HomeStatus 4;;trigger whg_MediaAus off;;set Wohnung_Licht,whg_WLAN,wz_MacMini off;;set ez_FHT desired-temp 17.0

Geräte abhängig von HomeStatus schalten - Beispiel WakeupLight

Auch beim Schalten von Geräten kann der HomeStatus berücksichtigt werden.
Das coding unterscheidet sich bei Verwendung von dummy oder LightScene nur leicht - siehe 4. Zeile:

define wakeup at *07:00 {\
 {Log 3, ('wakeupLOG WE:     '.$we)}\
 {Log 3, ('wakeupLOG HomeStatus: '.(Value("HomeStatus")))}\
 if ((!$we) and (Value("HomeStatus")) < 3) {\  ###bei Umsetzung mit LightScene: if ((!$we) and (Value("LS") eq "home" || Value("LS") eq "sleep")) 
   {fhem("define wakeup2 at +00:18:00 set sz_Stehlampe on") }\
   {fhem("define wakeupOff at +00:45:00 set sz_Leselampe,sz_Stehlampe off") }\
   {fhem("set sz_Leselampe dim100% 1280") }\
   {Log 4, ("wakeupLOG: define wakeupOff at +00:45:00 set sz_Leselampe,sz_Stehlampe off")}\
 }\
 else {\
 {Log 3, ("wakeupLOG: no wakeup today.")}\
 }\
}

Weitere Beispiele

Wakeuplight Licht bei Bedingungen einschalten