Alarm und FTUI: Unterschied zwischen den Versionen

Aus FHEMWiki
(9 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 7: Zeile 7:
* Es muss eine laufende TabletUI-Instanz vorhanden sein
* Es muss eine laufende TabletUI-Instanz vorhanden sein


==1.Schritt: Anlegen eines Dummy==
==Anlegen eines Dummy==
Im ersten Schritt muss ein Dummy angelegt werden, welcher den Status der Alarmanlage ebenso wie Daten aus dem Keypad erhält:
  defmod AAA.key dummy
  defmod AAA.key dummy
  attr AAA.key alarmDevice Sensor
  attr AAA.key alarmDevice Sensor
Zeile 13: Zeile 14:
  attr AAA.key event-on-change-reading state,inputPin
  attr AAA.key event-on-change-reading state,inputPin
  attr AAA.key event-on-update-reading key
  attr AAA.key event-on-update-reading key
  attr AAA.key readingList key,inputPin,fails,unlockPin
  attr AAA.key readingList key inputPin fails unlockPin
  attr AAA.key room Alarm
  attr AAA.key room Alarm
  attr AAA.key setList unlockPin
  attr AAA.key setList unlockPin
  attr AAA.key userReadings inputPin:key:.[0-9] { return ReadingsVal($NAME, "inputPin", "*") . ReadingsVal($NAME, "key", "0");; }, fails:key:.# { if (ReadingsVal($NAME, "inputPin", "0") ne ReadingsVal($NAME, "unlockPin", "0")) { return ReadingsVal($NAME, "fails", 0)+1;; } else { return 0;; } }, state:key:.# { if (ReadingsVal($NAME, "inputPin", "0") ne ReadingsVal($NAME, "unlockPin", "0")) { return "locked";; } else { return "unlocked";; } }, inputPin:key:.[\<] { my $inputVal = ReadingsVal($NAME, "inputPin", "0");; chop($inputVal);; return $inputVal;; },  inputPin:key:.# { return "";; }
  attr AAA.key userReadings inputPin:key:.[0-9] { return ReadingsVal($NAME, "inputPin", "*") . ReadingsVal($NAME, "key", "0");; }, fails:key:.# { if (ReadingsVal($NAME, "inputPin", "0") ne ReadingsVal($NAME, "unlockPin", "0")) { return ReadingsVal($NAME, "fails", 0)+1;; } else { return 0;; } }, state:key:.# { if (ReadingsVal($NAME, "inputPin", "0") ne ReadingsVal($NAME, "unlockPin", "0")) { return "locked";; } else { return "unlocked";; } }, inputPin:key:.[\<] { my $inputVal = ReadingsVal($NAME, "inputPin", "0");; chop($inputVal);; return $inputVal;; },  inputPin:key:.# { return "";; }
Darin muss natürlich ''<alarmlevel>'' durch den gewünschten Level ersetzt werden (die Änderung dieses Attributes erfolgt automatisch durch das Alarm-Modul, bitte '''nicht''' manuell eingeben).
Darin muss natürlich ''<alarmlevel>'' durch den gewünschten Level ersetzt werden (die Änderung dieses Attributes erfolgt automatisch durch das Alarm-Modul, bitte '''nicht''' manuell eingeben).
In diesem Dummy kann über den Befehl
In diesem Dummy kann über den Befehl
  set unlockPin <Wert>
  set unlockPin <Wert>
Zeile 27: Zeile 30:
*state (locked/unlocked)
*state (locked/unlocked)


==2.Schritt: Anlegen eines Notify==
==Anlegen eines Notify==
Wenn der richtige Code eingegeben wurde, soll die Alarmanlage unscharf geschaltet werden:
Wenn der richtige Code eingegeben wurde, soll die Alarmanlage unscharf geschaltet werden:
  defmod AAA.disarmed.N notify AAA.key:unlocked set AAA disarmed <alarmlevel>
  defmod AAA.disarmed.N notify AAA.key:unlocked set AAA disarmed <alarmlevel>
  attr AAA.disarmed.N room Alarm
  attr AAA.disarmed.N room Alarm


==3.Schritt: Einbinden des Keypads in das FTUI==
==Einbinden des Keypads in das FTUI==
Dazu muss in die anzuzeigende Seite der folgende Code eingetragen werden:
Dazu muss in die anzuzeigende Seite der folgende Code eingetragen werden:
  <!-- Alarmanlage Keypad -->
  &lt;!-- Alarmanlage Keypad --&gt;
  <div data-type="popup" data-device="AAA.key" data-get-on="locked" data-get-off="unlocked"
  &lt;div data-type="popup" data-device="AAA.key" data-get-on="locked" data-get-off="unlocked" data-width="400px" data-height="500px" class="interlock"&gt;
    data-width="400px" data-height="500px" class="interlock">
     &lt;div class="red bold top-space-2x"/&gt;
     <div class="red bold top-space-2x"/>
     &lt;div class="dialog"&gt;
     <div class="dialog">
         &lt;header&gt;Alarm deaktivieren&lt;/header&gt;
         <header>Alarm deaktivieren</header>
         &lt;div data-type="label" class="cell big top-space-2x wider"&gt;PIN-Code&lt;/div&gt;
         <div data-type="label" class="cell big top-space-2x wider">PIN-Code</div>
         &lt;div class="inline big top-space"&gt;
         <div class="inline big top-space">
             &lt;div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="1" onclick=""&gt;1&lt;/div&gt;
             <div data-type="push" data-icon="" data-device="AAA.key" data-set="key"
             &lt;div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="4" onclick=""&gt;4&lt;/div&gt;
                data-set-on="1" onclick="">1</div>
             &lt;div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="7" onclick=""&gt;7&lt;/div&gt;
             <div data-type="push" data-icon="" data-device="AAA.key" data-set="key"
             &lt;div data-type="push" data-icon="fa-long-arrow-left" data-device="AAA.key" data-set="key" data-set-on="&amp;lt;" onclick=""/&gt;
                data-set-on="4" onclick="">4</div>
         &lt;/div&gt;
             <div data-type="push" data-icon="" data-device="AAA.key" data-set="key"
         &lt;div class="inline big"&gt;
                data-set-on="7" onclick="">7</div>
             &lt;div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="2" onclick=""&gt;2&lt;/div&gt;
             <div data-type="push" data-icon="fa-long-arrow-left" data-device="AAA.key"
             &lt;div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="5" onclick=""&gt;5&lt;/div&gt;
                data-set="key" data-set-on="&lt;" onclick=""/>
             &lt;div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="8" onclick=""&gt;8&lt;/div&gt;
         </div>
             &lt;div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="0" onclick=""&gt;0&lt;/div&gt;
         <div class="inline big">
         &lt;/div&gt;
             <div data-type="push" data-icon="" data-device="AAA.key" data-set="key"
         &lt;div class="inline big"&gt;
                data-set-on="2" onclick="">2</div>
             &lt;div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="3" onclick=""&gt;3&lt;/div&gt;
             <div data-type="push" data-icon="" data-device="AAA.key" data-set="key"
             &lt;div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="6" onclick=""&gt;6&lt;/div&gt;
                data-set-on="5" onclick="">5</div>
             &lt;div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="9" onclick=""&gt;9&lt;/div&gt;
             <div data-type="push" data-icon="" data-device="AAA.key" data-set="key"
             &lt;div data-type="push" data-off-color="green" data-icon="fa-unlock" data-device="AAA.key" data-set="key" data-set-on="#" onclick=""/&gt;
                data-set-on="8" onclick="">8</div>
         &lt;/div&gt;
             <div data-type="push" data-icon="" data-device="AAA.key" data-set="key"
         &lt;div class="bg-lightgray border-white top-space centered" style="width:280px; height:50px;"&gt;
                data-set-on="0" onclick="">0</div>
             &lt;div data-type="label" data-device="AAA.key" data-get="inputPin" class="tall"/&gt;
         </div>
         &lt;/div&gt;
         <div class="inline big">
     &lt;/div&gt;
             <div data-type="push" data-icon="" data-device="AAA.key" data-set="key"
  &lt;/div&gt;
                data-set-on="3" onclick="">3</div>
Dieser Code sorgt dafür, dass ein Keypad auf der TabletUI Seite immer dann angezeigt wird, wenn der State von '''AAA.key''' auf ''locked'' steht. Darüber hinaus wird bei jedem Klick auf einen der Buttons das key-Reading des Devices AAA.key gesetzt.
             <div data-type="push" data-icon="" data-device="AAA.key" data-set="key"
                data-set-on="6" onclick="">6</div>
             <div data-type="push" data-icon="" data-device="AAA.key" data-set="key"
                data-set-on="9" onclick="">9</div>
             <div data-type="push" data-off-color="green" data-icon="fa-unlock"
                data-device="AAA.key" data-set="key" data-set-on="#" onclick=""/>
         </div>
         <div class="bg-lightgray border-white top-space centered" style="width:280px; height:50px;">
             <div data-type="label" data-device="AAA.key" data-get="inputPin" class="tall"/>
         </div>
     </div>
  </div>


==Bedienung==
==Optional: Aktivieren der Alarmanlage durch das Tablet-UI==
Eine Aktivierung der Alarmanlage kann dadurch erfolgen, dass ein entsprechender Switch in die FTUI-Seite eingebaut wird:
&lt;!-- Alarm --&gt;
&lt;li data-row="2" data-col="8" data-sizey="1" data-sizex="1"&gt;
    &lt;header&gt;Alarmanlage&lt;/header&gt;
    &lt;div data-type="switch"
        data-states='["armed","armwait","disarmed"]'
        data-icons='["fa-lock","fa-unlock","fa-unlock"]'
        data-background-colors='["red","red","green"]'
        data-device="AAA"
        data-get="level0"
        data-get-on='["armed","armwait"]'
        data-get-off="disarmed"
        data-set-on="armed 0"
        data-on-background-color="red"
        data-off-background-color="green"
        style="padding-top:20px"&gt;
    &lt;/div&gt;
&lt;/li&gt;
[[Kategorie:FHEM Tablet UI]]
[[Kategorie:FHEM Tablet UI]]
[[Kategorie:Examples]]
[[Kategorie:Examples]]

Version vom 24. Juni 2019, 01:52 Uhr

Ziel und Voraussetzungen

Auf dieser Seite wird erläutert, wie man das Modul Alarm mit Hilfe eines Keypads aus dem FTUI heraus steuert.

Ziel ist, das TabletUI mit einem Keypad zu schützen während der Alarm aktiv ist und darüber hinaus über Eingabe des korrekten Pins die Alarmanlage zu entschärfen.

  • Das Modul Alarm muss installiert sein, das Alarmdevice wird im Folgenden AAA genannt (ansonsten muss der entsprechende Name in den nachfolgenden Beispielen geändert werden)
  • Es muss eine laufende TabletUI-Instanz vorhanden sein

Anlegen eines Dummy

Im ersten Schritt muss ein Dummy angelegt werden, welcher den Status der Alarmanlage ebenso wie Daten aus dem Keypad erhält:

defmod AAA.key dummy
attr AAA.key alarmDevice Sensor
attr AAA.key alarmSettings alarm<alarmlevel>,|AAA.key:.unlocked|unlocked|off   # wird durch das Modul Alarm angelegt
attr AAA.key event-on-change-reading state,inputPin
attr AAA.key event-on-update-reading key
attr AAA.key readingList key inputPin fails unlockPin
attr AAA.key room Alarm
attr AAA.key setList unlockPin
attr AAA.key userReadings inputPin:key:.[0-9] { return ReadingsVal($NAME, "inputPin", "*") . ReadingsVal($NAME, "key", "0");; }, fails:key:.# { if (ReadingsVal($NAME, "inputPin", "0") ne ReadingsVal($NAME, "unlockPin", "0")) { return ReadingsVal($NAME, "fails", 0)+1;; } else { return 0;; } }, state:key:.# { if (ReadingsVal($NAME, "inputPin", "0") ne ReadingsVal($NAME, "unlockPin", "0")) { return "locked";; } else { return "unlocked";; } }, inputPin:key:.[\<] { my $inputVal = ReadingsVal($NAME, "inputPin", "0");; chop($inputVal);; return $inputVal;; },  inputPin:key:.# { return "";; }

Darin muss natürlich <alarmlevel> durch den gewünschten Level ersetzt werden (die Änderung dieses Attributes erfolgt automatisch durch das Alarm-Modul, bitte nicht manuell eingeben).

In diesem Dummy kann über den Befehl

set unlockPin <Wert>

der gültige Pincode gesetzt werden

Die userReadings füllen (je nach Änderung des Readings key) die folgenden Readings:

  • fails (Anzahl ungültiger Versuche)
  • inputPin (Eingabe Pin, als Aneinanderreihung der einzelnen Keys)
  • state (locked/unlocked)

Anlegen eines Notify

Wenn der richtige Code eingegeben wurde, soll die Alarmanlage unscharf geschaltet werden:

defmod AAA.disarmed.N notify AAA.key:unlocked set AAA disarmed <alarmlevel>
attr AAA.disarmed.N room Alarm

Einbinden des Keypads in das FTUI

Dazu muss in die anzuzeigende Seite der folgende Code eingetragen werden:

<!-- Alarmanlage Keypad -->
<div data-type="popup" data-device="AAA.key" data-get-on="locked" data-get-off="unlocked" data-width="400px" data-height="500px" class="interlock">
   <div class="red bold top-space-2x"/>
   <div class="dialog">
       <header>Alarm deaktivieren</header>
       <div data-type="label" class="cell big top-space-2x wider">PIN-Code</div>
       <div class="inline big top-space">
           <div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="1" onclick="">1</div>
           <div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="4" onclick="">4</div>
           <div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="7" onclick="">7</div>
           <div data-type="push" data-icon="fa-long-arrow-left" data-device="AAA.key" data-set="key" data-set-on="&lt;" onclick=""/>
       </div>
       <div class="inline big">
           <div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="2" onclick="">2</div>
           <div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="5" onclick="">5</div>
           <div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="8" onclick="">8</div>
           <div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="0" onclick="">0</div>
       </div>
       <div class="inline big">
           <div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="3" onclick="">3</div>
           <div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="6" onclick="">6</div>
           <div data-type="push" data-icon="" data-device="AAA.key" data-set="key" data-set-on="9" onclick="">9</div>
           <div data-type="push" data-off-color="green" data-icon="fa-unlock" data-device="AAA.key" data-set="key" data-set-on="#" onclick=""/>
       </div>
       <div class="bg-lightgray border-white top-space centered" style="width:280px; height:50px;">
           <div data-type="label" data-device="AAA.key" data-get="inputPin" class="tall"/>
       </div>
   </div>
</div>

Dieser Code sorgt dafür, dass ein Keypad auf der TabletUI Seite immer dann angezeigt wird, wenn der State von AAA.key auf locked steht. Darüber hinaus wird bei jedem Klick auf einen der Buttons das key-Reading des Devices AAA.key gesetzt.

Optional: Aktivieren der Alarmanlage durch das Tablet-UI

Eine Aktivierung der Alarmanlage kann dadurch erfolgen, dass ein entsprechender Switch in die FTUI-Seite eingebaut wird:

<!-- Alarm -->
<li data-row="2" data-col="8" data-sizey="1" data-sizex="1">
   <header>Alarmanlage</header>
   <div data-type="switch"
       data-states='["armed","armwait","disarmed"]'
       data-icons='["fa-lock","fa-unlock","fa-unlock"]'
       data-background-colors='["red","red","green"]'
       data-device="AAA"
       data-get="level0"
       data-get-on='["armed","armwait"]'
       data-get-off="disarmed"
       data-set-on="armed 0"
       data-on-background-color="red"
       data-off-background-color="green"
       style="padding-top:20px">
   </div>
</li>