Meine Lösung: Schalten von Devices/Steckdosen in Abhängigkeit vom Hausstatus

Begonnen von Gunther, 02 Mai 2020, 16:21:53

Vorheriges Thema - Nächstes Thema

Gunther

Nachdem ich an verschiedenen Stellen Hilfe bekommen habe, möchte ich meine Lösung vorstellen.
Vielleicht kann sich die/der Eine oder andere dabei etwas Inspiration holen.

Worum geht es:
Ich wollte per Tablet UI alle Steckdosen anhand des Hausstatus abschalten und festlegen, das dies je nach Status unterschiedlich ist. Um den WAF-Faktor zu gewährleisten, sollte meine Frau das selbst tun können.
Daher habe ich eine Möglichkeit gesucht das über ein DOIF generisch zu lösen.
Voila:

Ich setze in den Steckdosen per Tablet UI drei Readings: Passiert automatisch über Tablet UI (s.u.)
aus_schlafen ja/nein
aus_abwesenheit ja/nein
aus_urlaub ja/nein

In Abhängigkeit von diesen Readings schaltet ein DOIF beim Umschalten meines Hausstatus (Dummy haus_Status) die Geräte aus.
So brauche ich die nur in meine Tablet UI einbauen und nicht für jedes Device eine eigene Logik anlegen.

Mein Hausstatus ist so definiert:
1 = Tag / Anwesend
2 = Nacht /Schlafen
3 = Abwesend
4 = Urlaub


Zusätzlich habe ich noch je Steckdose einen Weekdaytimer in FHEM angelegt. So wird jede Steckdose auch zur Zeitschaltuhr.
Hier kann man sich sicherlich noch mehr Logik überlegen, wie Ausschalten nur dann, wenn kein Timer gesetzt,...

generelles DOIF:
defmod doif_homestatus_steckdosen_schalten DOIF ([haus_Status:"^2$"]) (set r:aus_schlafen=ja:FILTER=state=on off)\
DOELSEIF ([haus_Status:"^3$"]) (set r:aus_abwesenheit=ja:FILTER=state=on off)\
DOELSEIF ([haus_Status:"^4$"]) (set r:aus_urlaub=ja:FILTER=state=on off)
attr doif_homestatus_steckdosen_schalten do always


Im Tablet UI schaut das dann wie auf den Screenshots zu sehen aus.

Meine Steckerübersichtsseite im Tablet UI:
<!DOCTYPE html>
<html>
<body>


    <div class="page" id="content_plugs">
<div class="phone-back-btn">
<div data-type="link" data-url="#content_home.html" data-load="#content_home" data-color="white" data-icon="mi-chevron_left" class="large"></div>
</div>

<div class="hbox">
<div class="vbox phone-width">
<div class="card lift">
<header>Kino</header>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"eg_ki_steckdosenleiste_sofa","var_name":"Sofa-Leiste","var_icon":"fa-plug","var_link":"content_plug_eg_ki_steckdosenleiste_sofa"}'></div>
          </section>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"eg_ki_steckdose","var_name":"TV","var_icon":"fa-plug","var_link":"content_plug_eg_ki_steckdose"}'></div>
          </section>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"eg_ki_steckdose_subwoofer_Sw","var_name":"Subwoover","var_icon":"fa-plug","var_link":"content_plug_eg_ki_steckdose_subwoofer_Sw"}'></div>
          </section>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"eg_ki_steckdose_beamer_Sw","var_name":"Beamer","var_icon":"fa-plug","var_link":"content_plug_eg_ki_steckdose_beamer_Sw"}'></div>
          </section>                    
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"eg_ki_harmony_hub_zwischenstecker","var_name":"Harmony Hub","var_icon":"fa-plug","var_link":"content_plug_eg_ki_harmony_hub_zwischenstecker"}'></div>
          </section>
</div>

<div class="card lift">
<header>Esszimmer</header>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"eg_ez_zwischenstecker_sonos_sub","var_name":"Sonos Subwoover","var_icon":"fa-plug","var_link":"content_plug_eg_ez_zwischenstecker_sonos_sub"}'></div>
          </section>                    
</div>

<div class="card lift">
<header>Wohnzimmer</header>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"eg_wz_nische_steckdose","var_name":"Stecker Nische","var_icon":"fa-plug","var_link":"content_plug_eg_wz_nische_steckdose"}'></div>
          </section>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"eg_wz_tabletladeschalter","var_name":"Ladung Tablet","var_icon":"fa-plug","var_link":"content_plug_eg_wz_tabletladeschalter"}'></div>
          </section>                                
</div>

<div class="card lift">
<header>Flur EG</header>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"eg_fl_zwischenstecker","var_name":"Tischlicht","var_icon":"fa-plug","var_link":"content_plug_eg_fl_zwischenstecker"}'></div>
          </section>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"eg_fl_zwischenstecker_ladegeraet","var_name":"Steckdosenleiste","var_icon":"fa-plug","var_link":"content_plug_eg_fl_zwischenstecker_ladegeraet"}'></div>
          </section>                                
</div>

<div class="card lift">
<header>Bad EG</header>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"eg_bz_fensterventilator_Sw","var_name":"Lüftung","var_icon":"fa-plug","var_link":"content_plug_eg_bz_fensterventilator_Sw"}'></div>
          </section>                    
</div>

<div class="card lift">
<header>Flur OG</header>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"og_fl_tabletladeschalter","var_name":"Ladung Tablet","var_icon":"fa-plug","var_link":"content_plug_og_fl_tabletladeschalter"}'></div>
          </section>
                                   
</div>

<div class="card lift">
<header>Bad OG</header>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"og_bz_4erSchalter_Sw_02_Tablet","var_name":"Ladung Tablet","var_icon":"fa-plug","var_link":"content_plug_og_bz_4erSchalter_Sw_02_Tablet"}'></div>
          </section>                    
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"og_bz_4erSchalter_Sw_01_Verstaerker","var_name":"Sonos Bad","var_icon":"fa-plug","var_link":"content_plug_og_bz_4erSchalter_Sw_01_Verstaerker"}'></div>
          </section>
</div>

<div class="card lift">
<header>Keller</header>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"kg_fo_any3d_luefter","var_name":"Lüfter 3D Druck Any","var_icon":"fa-plug","var_link":"content_plug_kg_fo_any3d_luefter"}'></div>
          </section>                    
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"kg_fo_zwischenstecker_3ddrucker","var_name":"3D Druck Any","var_icon":"fa-plug","var_link":"content_plug_kg_fo_zwischenstecker_3ddrucker"}'></div>
          </section>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"kg_fo_musikanlage_sonos_Sw","var_name":"Sonos und Verstärker","var_icon":"fa-plug","var_link":"content_plug_kg_fo_musikanlage_sonos_Sw"}'></div>
          </section>  
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"kg_wr_hm_waschmaschine_Sw","var_name":"Waschmaschine","var_icon":"fa-plug","var_link":"content_plug_kg_wr_hm_waschmaschine_Sw"}'></div>
          </section>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"kg_wr_hm_waschmaschine_tiere_Sw","var_name":"Waschmaschine Tiere","var_icon":"fa-plug","var_link":"content_plug_kg_wr_hm_waschmaschine_tiere_Sw"}'></div>
          </section>                            
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"k_WW_Zirkulationspumpe_Sw","var_name":"WW-Zirkulation","var_icon":"fa-plug","var_link":"content_plug_k_WW_Zirkulationspumpe_Sw"}'></div>
          </section>          
</div>

<div class="card lift">
<header>Garten</header>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"au_ga_aussensteckdosen_terasse","var_name":"Terasse Brunnen Olive","var_icon":"fa-plug","var_link":"content_plug_au_ga_aussensteckdosen_terasse"}'></div>
          </section>                    
</div>

<div class="card lift">
<header>Garage</header>
          <section>
            <div data-template="template_plug_setting.html" data-parameter='{"var_device":"au_werkstattstrom_Sw","var_name":"Werkbank","var_icon":"fa-plug","var_link":"content_plug_au_werkstattstrom_Sw"}'></div>
          </section>                    
</div>

</div>
</div>
</div>
</body>

</html>


eg_wz_nische_steckdose



Die zugehörige Template-Datei: "template_plug_setting.html
<!DOCTYPE html>
<html>
<head>

</head>
<body>
<div class="row">
<div class="cell left-align left-space">
<div data-type="switch" data-device="var_device" data-set-on="on" data-set-off="off" data-get-on="!off" data-get-off="off" data-icon="var_icon" class="small blue"></div>
</div>
<div class="cell-80 left-align">
<div class="big">var_name</div>
<div data-type="label" data-device="var_device" data-get="state" data-substitution='["off","Aus","(on|[0-9]{1,3})","An"]'></div>
</div>
<div class="cell">
</div>
<div class="cell right-space">
<div class="cell">
<div data-type="link" data-url="#var_link.html" data-load="#var_link" data-color="black" data-fade-duration="0">
<div data-type="symbol" data-color="gray" data-icon="mi-chevron_right" class="compressed"></div>
</div>
</div>
</div>
</div>
</body>
</html>


Die Detaiseite eines Devices:
<!DOCTYPE html>
<html>
<body>


    <div class="page" id="content_plug_eg_ki_harmony_hub_zwischenstecker">
<div class="phone-back-btn">
<div data-type="link" data-url="#content_plugs.html" data-load="#content_plugs" data-color="white" data-icon="mi-chevron_left" class="large"></div>
</div>

<div class="hbox">
<div class="vbox phone-width">
<div class="card lift">
<header>Kino - Harmony Hub</header>
         
            <div data-template="template_plug_detail.html" data-parameter='{"var_device":"eg_ki_harmony_hub_zwischenstecker","var_name":"Harmony Hub"}'></div>
         
         
</div>

</div>
</div>
</div>
</body>

</html>



Die zugehörige Template-Datei template_plug_detail.html:
<!DOCTYPE html>
<html>
<head>

</head>
<body>
<section>
<div class="row">
<div class="cell left-align left-space">
<div data-type="switch" data-device="var_device" data-get="aus_schlafen" data-get-on="ja" data-get-off="nein" data-icon="fa-bed" class="small blue"></div>
</div>
<div class="cell-80 left-align">
<div class="big">Aus bei "Schlafen"</div>
<div data-type="label" data-device="var_device" data-get="aus_schlafen" data-substitution='["ja","ausschalten","nein","anlassen"]'></div>
</div>
<div class="cell">
</div>
<div class="cell right-space">
<div data-type="checkbox" data-cmd="setreading" data-device="var_device" data-set="aus_schlafen" data-get="aus_schlafen" data-get-on="ja" data-get-off="nein" class="small blue"></div>
</div>
</div>
</section>

<section>
<div class="row">
<div class="cell left-align left-space">
<div data-type="switch" data-device="var_device" data-get="aus_abwesenheit" data-get-on="ja" data-get-off="nein" data-icon="fa-car" class="small blue"></div>
</div>
<div class="cell-80 left-align">
<div class="big">Aus bei "Abwesenheit"</div>
<div data-type="label" data-device="var_device" data-get="aus_abwesenheit" data-substitution='["ja","ausschalten","nein","anlassen"]'></div>
</div>
<div class="cell">
</div>
<div class="cell right-space">
<div data-type="checkbox" data-cmd="setreading" data-device="var_device" data-set="aus_abwesenheit" data-get="aus_abwesenheit" data-get-on="ja" data-get-off="nein" class="small blue"></div>
</div>
</div>
</section>

<section>
<div class="row">
<div class="cell left-align left-space">
<div data-type="switch" data-device="var_device" data-get="aus_urlaub" data-get-on="ja" data-get-off="nein" data-icon="fa-suitcase" class="small blue"></div>
</div>
<div class="cell-80 left-align">
<div class="big">Aus bei "Urlaub"</div>
<div data-type="label" data-device="var_device" data-get="aus_urlaub" data-substitution='["ja","ausschalten","nein","anlassen"]'></div>
</div>
<div class="cell">
</div>
<div class="cell right-space">
<div data-type="checkbox" data-cmd="setreading" data-device="var_device" data-set="aus_urlaub" data-get="aus_urlaub" data-get-on="ja" data-get-off="nein" class="small blue"></div>
</div>
</div>
</section>

<section>
<div class="row">
<div class="cell left-align left-space">
<div data-type="switch" data-device="wdt_var_device" data-get="disabled" data-get-on="0" data-get-off="1" data-icon="fa-clock-o" class="small blue"></div>
</div>
<div class="cell-80 left-align">
<div class="big">Zeitschaltuhr</div>
<div data-type="label" data-device="wdt_var_device" data-get="disabled" data-substitution='["0","Zeitplan aktiv","1","Zeitplan inaktiv"]'></div>
</div>
<div class="cell">
</div>

<div class="cell">

<div class="cell" id="wdtimer_ftui"
          data-type="wdtimer"
          data-device="wdt_var_device"   
          data-width="350"
data-height="500"
          data-style="square"
          data-theme="light"
          data-title="ALIAS"
          data-timesteps="5"
          data-savecfg="true"
          data-cmdlist='{"An":"on","Aus":"off"}'

<div data-type="link" data-url="#var_link.html" data-load="#var_link" data-color="black" data-fade-duration="0">
<div data-type="symbol" data-color="gray" data-icon="mi-chevron_right" class="compressed"></div>
</div>
</div>


</div>
</section>

</body>
</html>

FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden