[FHEM-Tablet-UI] Keypad für PIN-Eingabe?

Begonnen von alpha1974, 15 Januar 2016, 09:05:36

Vorheriges Thema - Nächstes Thema

alpha1974

Guten Morgen miteinander,

ich möchte gerne einen Homestatus-Button mit einer PIN-Eingabe "koppeln" und frage mich gerade, ob ich dazu das Rad neu erfinden muss oder ob es im unendlichen FHEM-Universum schon ein paar Code-Schnipsel als Vorlage gibt ;-)

Ziel: Der Homestatus soll im UI nur nach Eingabe eines PIN-Codes geändert werden können.

Simpelste Lösung ist es natürlich, am Endgerät (Tablet) eine PIN-Displaysperre einzurichten.

Eleganter, weil universeller, fände ich es aber, im Tablet-UI eine Art Keypad einzurichten (siehe Screenshot im Anhang). Die einzelnen Ziffern könnten Push- oder Button-Widgets sein, deren Data-Device jeweils ein Ziffern-Dummy-Device ist. FHEM müsste dann den Rest übernehmen, also die gedrückte PIN-Ziffer und alle folgenden PIN-Ziffern "merken" und auswerten und bei einem Match auf den richtigen PIN-Code den zuvor ausgewählten Homestatus aktivieren.

Meine Problem(chen) bisher:
1.
Wie kriege ich ein "Eintipp-Feeling" für jede einzelne Ziffer hin? Die Ziffer müsste kurz die Farbe ändern und dann wieder zurückspringen. Ich könnte dazu unter FHEM den state des Dummy-Devices nach z.B. 1 Sek. wieder zurücksetzen, aber das finde ich irgendwie "oversized". Vielleicht gibt es ja im Tablet-UI auch schon was Passendes?

2.
Wie mache ich die Veränderung des Homestatus von der vorherigen PIN-Eingabe abhängig? Im UI müsste sich beim Antippen auf einen anderen Homestatus das Keypad "aktivieren" oder zumindest ein entsprechender Hinweis erscheinen (ginge wohl über ein weiteres Dummy-Device, wenn FHEM ein Get auf den Homestatus erkennt und dann einen Hinweis-Dummy aktiviert, der im UI eine entsprechende Meldung anzeigt). Wenn dann die richtige PIN eingegeben ist, müsste FHEM den (zunächst nur vorläufigen) Homestatus "scharf" schalten. Also noch mehr Dummy-Devices, um die Zwischenzustände zu speichern?

Nach meinen bisherigen "absolute beginner"-Überlegungen ist das alles sehr FHEM-lastig und erfordert bei jedem Klick eine Menge Interaktion zwischen UI und FHEM. Aber vielleicht hat ja jemand schon etwas Ähnliches erfolgreich umgesetzt  ::)

Davon bin ich leider noch weit entfernt, weil mir jegliche Auswertung/Verknüpfung zwischen Homestatus und PIN fehlt:
<li data-row="1" data-col="4" data-sizex="3" data-sizey="3">
    <header>HOMESTATUS</header>
<div>
<div data-type="homestatus" data-device='homestatus'
data-get-on='["1","2","3","4"]'
       data-alias='["Home","Night","Away","Holiday"]'
       data-icons='["fa-home","fa-bed","fa-car","fa-suitcase"]'>
</div>
<div data-type="label" class="cell">PIN-Code</div>
     <div data-type="push" data-icon="" data-device="keypad1">1</div>
     <div data-type="push" data-icon="" data-device="keypad2">2</div>
     <div data-type="push" data-icon="" data-device="keypad3">3</div>
     <div data-type="push" data-icon="" data-device="keypad4">4</div>
     <div data-type="push" data-icon="" data-device="keypad5">5</div>
</div>
     <div data-type="push" data-icon="" data-device="keypad6">6</div>
     <div data-type="push" data-icon="" data-device="keypad7">7</div>
     <div data-type="push" data-icon="" data-device="keypad8">8</div>
     <div data-type="push" data-icon="" data-device="keypad9">9</div>
     <div data-type="push" data-icon="" data-device="keypad0">0</div>
     <div data-type="push" data-icon="fa-key" data-device="keypadenter"></div>
</li>


Besten Dank für hilfreiche Hinweise,
alpha1974
FHEM/Z-Wave USB-Dongle + div. Devices

CoolTux

Wenn ich Dich richtig verstehe, willst Du nicht das Homewidget zur umstellung verwenden (das soll wahrscheinlich nur den Status anzeigen, also readable) sondern Du willst ein 4-16 Zeichen Code und das pro Homestatus.

Nehmen wir mal den einfachsten Weg. 4 Zeichen. Soll ja sicher sein. das pro Status. Also wenigstens Home und Away. Muss sich also Deine Familie schon mal 2 Zahlenfolgen a 4 Zeichen merken.
Da fragt meine Frau als erstes für was der Quatsch gut sein soll und meine 13 jährige schüttelt verständlicher Weise den Kopf.

Vielleicht magst mal kurz die Hintergründe erklären damit die Lesenden und Helfenden welche sich dann Kopf machen verstehen wieso der Fragesteller, in meinen Augen, solch einen Blödsinn haben will/muss.

Wenn dann würde ich da wirklich über die Tablet Pin-Sperre gehen. Die kann man auch an und aus schalten. Das AMAD Modul unterstützt das z.B. seit kurzem in der Developerversion.



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

alpha1974

#2
Hintergrund ist, dass ich mich frage, ob man software-mässig über das UI ein Keypad wie dieses nachbilden kann (natürlich ohne RFID). Ausreichend wäre dafür ein gemeinsamer PIN für alle Statusänderungen, also nicht für jeden Status ein eigener PIN. Denkbarer Anwendungsfall wäre z.B. eine pin-gesicherte Scharf(ab)schaltung von Einbruchmeldern über ein im Flur hängendes Tablet.

Abstrahiert liefe es darauf hinaus, dass das Schalten einzelner Devices pin-gesichert ist (im Unterschied zur Tablet-Display-Sperre oder auch zur Authentifizierung über den Web-Server).

"haben will/muss" ist es natürlich nicht, sondern eher "wissen wollen, ob". Für Frau und Kinder sind PIN-Sperren hier auch nicht nötig, aber für andere Personen (angefangen bei der Putzfrau bis hin zum Einbrecher mit technischem Grundverständnis) würde ich nicht nur auf edukative Maßnahmen setzen wollen ;D
FHEM/Z-Wave USB-Dongle + div. Devices

CoolTux

Ah also vorerst ein proof of concept.

Dann würde ich es anders nennen. Hoffe ich habe Dich korrekt verstanden. Vorerst geht es darum eine Nummerfeld ab zu bilden und des sinnvoller Weise in FHEM ein zu binden. Am Ende des ganzen soll dann ein Deaktivieren einer z.B. Alarmanlage stehen. Es geht also nicht darum den Homestatus pro Bewohner zu ändern, sondern etwas/ein einziges auf Basis einer Pineingabe zu schalten.

KORREKT?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

alpha1974

Korrekt!

Ablauf: Code im Keypad im UI eintippen + bestätigen (oder noch schöner: quick unlock ohne Bestätigen, wenn PIN richtig)-> FHEM macht $irgendwas (z.B. schaltet Alarm scharf/unscharf).

Ausbauvariante: Klick auf Push- oder Button-Widget im UI (z.B. "Alarmanlage ausschalten" oder "AV-Receiver/TV mit Ü18-Programm starten"  ;D)-> Keypad geht auf -> weiter wie oben

Der Homestatus-Button war nur mein Ausgangspunkt, weil er nach meinen Verständnis auch nichts anderes als ein Mehrfach-Schalter ist, der ein Device auf unterschiedliche States setzt (je nach Anwendungsszenario eben auch für jeden Bewohner separat).
FHEM/Z-Wave USB-Dongle + div. Devices

CoolTux

Lösungsansatz FHEM:

4 Dummys. der letzte Dummy wird von einem notify getriggert. Dieses notify holt sich die bereits eingegebenden Zahlen der 3 vorherrigen Dummys plus des vierten Dummys und vergleicht den erhaltenden String mit einem vorhanden. Passt der String wird irgendwas ausgelöst.

Lösungsansatz FTUI: Pro Dummy eine Nummerntastatur (das wird viel).

Das ist jetzt echt nur mal so aus Spaß an der Freude überlegt worden. Das mit den FTUI ist wohl noch mehr wie überdenkenswert     ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

kumue


Stril

Hallo!

Ich habe mir das auch schon überlegt und wollte es über eine Sequenz lösen:

Die Zahlen als einzelne Buttons definieren, die einen Dummy schalten. Wenn der Dummy dann die Sequenz
1234# erkennt, wird ein Dummy geschaltet, der wiederum per Notify nach 60s zurück gesetzt wird.

Ungetestet!

Gruß
Phil

alpha1974

Smartvisu mit auth_switch hatte ich mir auch schon angesehen, aber das übersteigt leider meine Fähigkeiten um ein Vielfaches  :-[

sequence-Device ist ein guter Hinweis. Die Commandref liest sich so, als könnte man das zur PIN-Erkennung zweckentfremden, wobei der richtige PIN (=Abfolge von Zahlen-Dummy-Schaltern) dann wohl hardkodiert in der Sequence definiert werden muss (fände ich aber nicht schlimm). Ich versuche mich mal daran...

Habe übrigens gerade noch einen anderen Thread gefunden, in dem nicht nur über die Sinnhaftigkeit eines PIN-Code-Schutzes sinniert wurde, sondern auch über Lösungsansätze, die dann aber nicht über FHEM, sondern von der Client-(Android)-Seite aus über Tasker angegangen wurden. Müsste dann aber auf allen Clients eingerichtet werden.
FHEM/Z-Wave USB-Dongle + div. Devices

alpha1974

#9
Just for the records: Das Keypad im Tablet-UI nachzubilden, war nicht besonders schwierig. Alle Tasten "schalten" auf dasselbe Dummy und weisen ihm den jeweiligen Zahlen-Wert zu. Ein Notify setzt den Tastendummy nach einem Event wieder auf "NUL" (als Pendant zum Push-Widget, das auch nur einen Tastendruck und kein Gedrückt-Halten suggeriert).

Für die Alarm-Scharfschaltung im UI gibt es ein Switch-Widget, das den Alarm-Status auf scharf schaltet. Da data-set-off leer ist, kann man über das Switch-Widget nur scharf, aber nicht unscharf schalten. Die Unscharf-Schaltung via PIN wird über FHEM geregelt: Ein sequence-Device triggert, wenn der Tastendummy die richtigen Zahlen in der richtigen Reihenfolge liefert (je nach DEF des sequence-Devices entweder mit "Enter"-Bestätigung oder als quick unlock nach der letzten richtigen PIN-Ziffer). Ein weiteres Notify-Device schaltet dann den Alarm-Status unscharf, wenn das sequence-Device triggert. UI- und FHEM-/Code siehe unten....

NOTA BENE: Funktioniert, ist aber vom Sicherheitsaspekt her vermutlich nicht mehr als eine hübsche Verpackung. Zum einen triggert das sequence-Device auch, wenn man zwischen zwei richtigen PIN-Ziffern eine falsche eingibt, solange alle Tasten-Events innerhalb der sequence-Zeitspanne liegen. Das kann man evtl. durch entsprechend kurze Zeitvorgaben etwas abmildern.

Zum anderen ist es eher sportlich, das Switch-Widget zum Scharf-Schalten allein dadurch am Unscharf-Schalten zu hindern, dass data-set-off leer bleibt. Etwas sicherer (aber auch nicht im Sinne von echter Absicherung) dürfte es sein, wenn FHEM den Alarm-Status nur dann auf Unscharf setzt, wenn vorher das sequence-Device getriggert hat. Aber auch das ist natürlich keine echte Hürde. Dazu bräuchte man FHEM-Boardmittel, um ein "set" auf ein beliebiges Device abzusichern. Dazu habe ich aber bislang noch nichts gefunden.

Andererseits reicht mir die bisherige Lösung für das Anwendungsszenario "Tablet im Flur". Der Durchschnittseinbrecher müsste, nachdem er "drin" ist und dabei einen Voralarm ausgelöst hat, innerhalb einer begrenzten Zeitspanne dahinter kommen, wie er das UI hackt und den Alarm-Status mit einem gezielten set auf unscharf setzt. 

Fazit für mich: Sieht hübsch aus und ist besser als nix, aber mehr auch nicht. Die Flexibilität von FHEM ist aber immer wieder faszinierend!

Hier noch der Code (PIN im sequence-Device: 1234 jeweils innerhalb von 5 Sekunden pro Ziffer).

Tablet-UI:
<li data-row="1" data-col="4" data-sizex="2" data-sizey="3">
    <header>ALARM-STATUS</header>

    <div class="cell">Alarm scharf schalten</div>
    <div data-type="switch" data-device="alarm_scharf" data-set-on="on" data-set-off="" data-icon="fa-exclamation-circle fa-lg" data-on-color="red" data-off-color="grey" class="big"></div>

    <div data-type="label" class="cell">Alarm unscharf schalten (PIN-Code)</div>
        <div>
             <div data-type="push" data-icon="" data-device="keypad_key" data-set-on="1">1</div>
             <div data-type="push" data-icon="" data-device="keypad_key" data-set-on="2">2</div>
             <div data-type="push" data-icon="" data-device="keypad_key" data-set-on="3">3</div>
        </div>
        <div>
             <div data-type="push" data-icon="" data-device="keypad_key" data-set-on="4">4</div>
             <div data-type="push" data-icon="" data-device="keypad_key" data-set-on="5">5</div>
             <div data-type="push" data-icon="" data-device="keypad_key" data-set-on="6">6</div>
        </div>
        <div>
             <div data-type="push" data-icon="" data-device="keypad_key" data-set-on="7">7</div>
             <div data-type="push" data-icon="" data-device="keypad_key" data-set-on="8">8</div>
             <div data-type="push" data-icon="" data-device="keypad_key" data-set-on="9">9</div>
        </div>
        <div>
             <div data-type="push" data-icon="" data-device="keypad_key" data-set-on="0">0</div>
             <div data-type="push" data-icon="fa-key" data-device="keypad_key" data-set-on="#"></div>
        </div>
</li>


FHEM:

define alarm_scharf dummy
define keypad_key dummy
define keypad_release notify keypad_key:[0-9|#] sleep 0.5; set keypad_key nul
define alarm_unscharf_pin sequence keypad_key:1 5 keypad_key:2 5 keypad_key:3 5 keypad_key:4
define alarm_unscharf_schalten notify alarm_unscharf_pin:trigger set alarm_scharf off
FHEM/Z-Wave USB-Dongle + div. Devices

setstate

Sehr schön gelöst, danke für dein Post.
Wäre das nicht ein Thema für die Snippet Sammlung im Wiki?

http://www.fhemwiki.de/wiki/Kategorie:Code_Snippets

alpha1974

Zitat von: setstate am 16 Januar 2016, 12:21:30
Sehr schön gelöst

Danke, aber keider nicht schön genug :-\ Das Notify-Device, das ich zum Zurücksetzen des "Tastendrucks" nutze (keypad_release), triggerte sich selbst = nach einer PIN-Eingabe setzte es keypad_key auf "nul", was wiederum als notify-Event erkannt wurde und in einer - geradezu verzweifelten - Endlosschleife mündete, wodurch die CPU-Last für perl auf 100 % hochging... Ich habe den Code in meinem letzten Posting jetzt geändert. Jetzt wird nur auf [0-9|#] reagiert.

Zitat
Wäre das nicht ein Thema für die Snippet Sammlung im Wiki?
http://www.fhemwiki.de/wiki/Kategorie:Code_Snippets
Wenn es denn mal richtig läuft...  :o
FHEM/Z-Wave USB-Dongle + div. Devices

Stril

Hallo!

Lasse doch das notify nur das Set ausführen, wenn der Dummy auf einer Ziffer steht [0-9]

alpha1974

Genau so habe ich es im Code (und im entsprechenden Posting) auch schon geändert (ergänzt um "#" als Enter-Taste)  ;)
define keypad_release notify keypad_key:[0-9|#] sleep 0.5; set keypad_key nul
FHEM/Z-Wave USB-Dongle + div. Devices

Stril

Eigenartig... Wird das notify laut Log zwei mal angestoßen?

alpha1974

Jetzt nicht mehr. Vorher hing es anscheinend in einer Endlosschleife....

So sieht es jetzt aus:
2016-01-17 18:37:08 dummy keypad_key 1
2016-01-17 18:37:09 dummy keypad_key nul
2016-01-17 18:37:10 dummy keypad_key 2
2016-01-17 18:37:10 dummy keypad_key nul
2016-01-17 18:37:11 dummy keypad_key 3
2016-01-17 18:37:12 dummy keypad_key nul
2016-01-17 18:37:13 dummy keypad_key 4
2016-01-17 18:37:13 dummy keypad_key nul
FHEM/Z-Wave USB-Dongle + div. Devices

davedeluxe

Hi,

ich denke das es für deinen Fall nicht in Frage kommt aber ich möchte es einfach mal als Idee hier lassen:

Ich habe nach einer ähnlichen Möglichkeit gesucht mein Tablet zu sperren wenn z.B. die Alarmanlage aktiv ist.
Ich habe das ganze per Tasker gelöst, dieser sperrt das Tablet indem er an oberster Stelle eine PIN-Abfrage stellt. Während diese aktiv ist kann man am Tablet nichts machen.
Ist also ähnlich wie die integrierte Tablet-Sperre, welche aber nicht in Frage kam da ich mein Tablet per Motion wecke und dann nicht immer eine PIN eingeben will.

Tasker lässt sich schön per Push von FHEM steuern.

Grüße

CoolTux

Auch hier noch mal der Hinweis das das AMAD Modul in der derzeitigen Developerversion die Android Pinsperre aktivieren und deaktivieren kann. Hierbei wird ein vorher als Attribut festgelegter Pin genommen.



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

NilsB

Zitat von: alpha1974 am 17 Januar 2016, 10:43:11
define keypad_release notify keypad_key:[0-9|#] sleep 0.5; set keypad_key nul

Hallo alpha,

habe den gesamten Aufbau deiner Keypad-Logik jetzt mehrmals im Kopf durchgespielt (mangels eingerichteter Tablet-UI nicht getestet). Mir ist nicht ganz klar, wofür es den o.g. notify überhaupt braucht?
Ich sehe keinen Nachteil darin, wenn der letztgedrückte Key immer in dem Dummy gespeichert bleibt.

Falls es doch einen Grund dafür gab, freue ich mich über Erleuchtung!

Gruß
Nils

alpha1974

Zitat von: NilsB am 21 Februar 2016, 11:15:39
Mir ist nicht ganz klar, wofür es den o.g. notify überhaupt braucht?
Ich sehe keinen Nachteil darin, wenn der letztgedrückte Key immer in dem Dummy gespeichert bleibt.
Ich meine mich zu erinnern, dass ich zunächst andere Tablet-UI-Funktionen genutzt hatte, um die Tasten darzustellen. Durch den Release-Notify wird letztlich nur simuliert, dass eine "gedrückte" Taste wieder "zurückspringt".  In der Umsetzung, die ich letztlich gepostet habe, ist das aber nicht nötig, weil data-type push quasi von alleine zurückspringt und daher nicht gedrückt hängen bleiben kann.
FHEM/Z-Wave USB-Dongle + div. Devices

NilsB

Zitat von: alpha1974 am 21 Februar 2016, 14:42:31
(...) In der Umsetzung, die ich letztlich gepostet habe, ist das aber nicht nötig, weil data-type push quasi von alleine zurückspringt und daher nicht gedrückt hängen bleiben kann.

Okay, dann hatte ich ja doch den richtigen Überblick. Also eher ein historisch bedingtes notify ;)
Danke für die Info, dann kann ich das bei mir direkt streichen. Schließlich kosten notifys ja auch Systemrressourcen :D

Grüße
Nils

coolice

Hallo, mit einem aktuellem Update hat es mir das Eingabefeld zerrissen. Kann mir jemand sagen wie ich das wieder hin bekomme?

hoods

#22
Hallo coolice,

hatte das gleiche Problem. Welche Ursache es hat konnte ich leider nicht herausfinden aber ich habe mein keypad kurzerhand umgebaut.

Hier der Code:
<li data-row="1" data-col="3" data-sizex="4" data-sizey="5">
<header>ALARMANLAGE</header>

<div class="cell big top-space-2x wider">&nbsp;</div>
<div class="cell big top-space-2x wider">Alarm scharf schalten</div>

<div data-type="switch"
data-device="Enable_alarm"
data-set-on="on"
data-set-off=""
data-get-on="on"
data-get-off="off"
data-states='["on","off"]'
data-icons='["fa-lock","fa-unlock"]'
data-colors='["white", "white"]'
data-background-colors='["red", "blue"]'
class="large wider"></div>

       <div data-type="label" class="cell big top-space-2x wider">Alarm unscharf schalten (PIN-Code)</div>
<div class="inline large top-space">
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="1">1</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="4">4</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="7">7</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="?">?</div>
</div>
<div class="inline large">
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="2">2</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="5">5</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="8">8</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="0">0</div>
</div>
<div class="inline large">
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="3">3</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="6">6</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="9">9</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="#">#</div>
</div>

<div data-type="popup" data-device="Enable_alarm" data-get-on="on" data-height="240px" data-width="240px">
<div class="red bold top-space-2x">Show warnings</div>
<div class="dialog">
<header>WARNUNG</header>
<div data-type="label" data-device="Alarm_warning" data-get="lastWarning" class="top-space-3x red big"></div>
<div data-type="link" class="round top-space-3x left-space-3x"
data-width="150" data-height="50"
data-color="white"
data-background-color="red"
data-icon=""
onclick="$('.dialog-close').trigger('click');">OK</div>
</div>
</div>

</li>


Gruss Sven
Odroid C2, FHEM 5.8, HMUSB, Jeelink, Rademacher DuoFern Stick, Benning WR über HTTPMOD

ChrisW

#23
Zitat von: hoods am 16 Februar 2017, 18:25:21
Hallo coolice,

hatte das gleiche Problem. Welche Ursache es hat konnte ich leider nicht herausfinden aber ich habe mein keypad kurzerhand umgebaut.

Hier der Code:
<li data-row="1" data-col="3" data-sizex="4" data-sizey="5">
<header>ALARMANLAGE</header>

<div class="cell big top-space-2x wider">&nbsp;</div>
<div class="cell big top-space-2x wider">Alarm scharf schalten</div>

<div data-type="switch"
data-device="Enable_alarm"
data-set-on="on"
data-set-off=""
data-get-on="on"
data-get-off="off"
data-states='["on","off"]'
data-icons='["fa-lock","fa-unlock"]'
data-colors='["white", "white"]'
data-background-colors='["red", "blue"]'
class="large wider"></div>

       <div data-type="label" class="cell big top-space-2x wider">Alarm unscharf schalten (PIN-Code)</div>
<div class="inline large top-space">
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="1">1</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="4">4</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="7">7</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="?">?</div>
</div>
<div class="inline large">
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="2">2</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="5">5</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="8">8</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="0">0</div>
</div>
<div class="inline large">
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="3">3</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="6">6</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="9">9</div>
  <div data-type="push" data-icon="" data-device="Keypad_key" data-set-on="#">#</div>
</div>

<div data-type="popup" data-device="Enable_alarm" data-get-on="on" data-height="240px" data-width="240px">
<div class="red bold top-space-2x">Show warnings</div>
<div class="dialog">
<header>WARNUNG</header>
<div data-type="label" data-device="Alarm_warning" data-get="lastWarning" class="top-space-3x red big"></div>
<div data-type="link" class="round top-space-3x left-space-3x"
data-width="150" data-height="50"
data-color="white"
data-background-color="red"
data-icon=""
onclick="$('.dialog-close').trigger('click');">OK</div>
</div>
</div>

</li>


Gruss Sven
Super Danke.
Wie pack ich das Pinpad in ein Popup ?
Raspberry PI3 mit allem möglichen.

Standarduser

Indem du ein Popup einfügst und das Pinpad da hinein packst?

ToM_ToM

Ich hatte es zwar irgendwo schon mal gepostet, aber hier nochmal meine Lösung:

Verwendet wird das Alarm - Modul

FHEM-Config
define AlarmKeypadDummy dummy
attr AlarmKeypadDummy DbLogExclude .*
attr AlarmKeypadDummy alarmDevice Sensor
attr AlarmKeypadDummy alarmSettings alarm0,alarm1,alarm2,alarm3,alarm4,alarm5,alarm6,alarm7,|AlarmKeypadDummy:.unlocked|unlocked|off
attr AlarmKeypadDummy event-on-change-reading state,inputPin
attr AlarmKeypadDummy event-on-update-reading key
attr AlarmKeypadDummy group Alarmanlage
attr AlarmKeypadDummy readingList key,inputPin,fails,unlockPin
attr AlarmKeypadDummy room Allgemein
attr AlarmKeypadDummy setList unlockPin
attr AlarmKeypadDummy 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 "";; }

define notify_AlarmanalageUnlocked notify AlarmKeypadDummy:unlocked set Alarmanlage disarmed 0
attr notify_AlarmanalageUnlocked DbLogExclude .*
attr notify_AlarmanalageUnlocked group Alarmanlage
attr notify_AlarmanalageUnlocked room Allgemein

define alarm0.off.N notify (AlarmKeypadDummy:.unlocked) {main::Alarm_Exec("Alarmanlage",0,"$NAME","$EVENT","off")}
attr alarm0.off.N DbLogExclude .*
attr alarm0.off.N group alarmNotifier
attr alarm0.off.N room Alarm


Tablet-UI


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


Sobald die Alarmanlage scharf geschalten wurde, geht das Keypad auf dem Tablet auf und man kann nichts anderes in der Tablet-UI schalten, bis der Pin korrekt eingegeben wurde und die Alarmanlage somit abgeschalten. Es können Zahlen eingegeben und auch beim Vertippen gelöscht werden. Das Raute-Zeichen dient als Bestätigung der Eingabe.
Nach Eingabe der korrekten Pin wird der Alarm oder das Alarmsystem deaktiviert und das Keypad-Popup geschlossen.

Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

docb

Hi,
vielen Dank für die geniale Lösung, das ist echt top! Ich habe allerdings ein großes Problem, meine Tablet-UI Oberfläche ist wohl so überladen, dass das Pinpad kaum auf Eingaben reagiert, wenn ich nach Hause komme und das Tablet angeht (das Erneuern der ganzen Werte im Hintergrund legt wohl das Tablet lahm, teilweise wird das Pinpad auch gar nicht mehr korrekt angezeigt, sonder einfach die Zahlen nebeneinander).

Gäbe es eine Möglichkeit, sobald das Popup hochkommt, alle Abfragen im Hintergrund zu unterbinden bis es wieder verschwunden ist (durch Eingabe der korrekten PIN -> device AlarmKeypadDummy unlocked)?
Oder kann ich sobald eigentlich das Popup hochkommt (weil device locked) auf eine andere Seite umleiten, die nur das Pinpad enthält?
Die Lösung über AMAD mit der Systempinsperre von Android funktioniert bei mir leider auch nicht, weil Android 7. 
Ansonsten läuft bei mir FTUI auf Fully (falls das was hilft für die Lösung).

Viele Grüße und frohe Weihnachten ;-)
doc
I love FHEM!

speridal

Hallo zusammen,

seit dem letzten Update hat das AlarmKeypadDummy keine Tasten mehr angenommen. Bei mir lag es an der Einstellung

attr AlarmKeypadDummy readingList key,inputPin,fails,unlockPin

Dort musste ich die "," entfernen, seitdem geht es wieder. Falls das jemand von euch auch hat.

attr AlarmKeypadDummy readingList key inputPin fails unlockPin

Gruß,
Bernd