Neues FTUI Widget PinPad für Alarmanlagen

Begonnen von Syrex-o, 09 November 2017, 20:47:13

Vorheriges Thema - Nächstes Thema

Syrex-o

ZitatDas Popup öffnet sich auch automatisch wie gewünscht.
Leider schließt sich das Popup (trotz Alarm state gleich "on") nach 2-3 Sekunden wieder.
Mache ich in der Anwendung des Popup einen Fehler (dann mache ich einen neuen Thread auf) oder hängt das mit dem Widget/Popup zusammen)
Das Popup widget hat eine class Funktion, damit das nicht mehr passieren sollte:
https://wiki.fhem.de/wiki/FTUI_Widget_Popup

Stichwort interclock

Gunther

Zu Deinen (meinen  :P) Punkten:

Einbau der Option mit 0 und */#:
finde ich super!

ein Widget mit Option vs. 2 widgets
Wenn die Performance nicht extrem darunter leidet, wäre vermutlich ein Widget zukunftssicherer, da bei Optionserweiterungen nicht zwei gepflegt werden müssten.
Da ich kein Entwickler bin, ist das nur die bescheidene Usersicht. Ich beuge mich da den Entscheidungen der Profis.

Seitenzugriff nur nach erfolgreicher Pineingabe
Ich bin nicht sicher, ob ich mich richtig ausgedrückt habe.
Was ich möchte ist, dass wenn ich auf meinen Menüpunkt "Einstellungen Heizung" gehe, das nur möglich ist, wenn der richtige Pin eingegeben wird.
Somit vermeide ich, dass Kiddies hier versehentlich meine Heizkurve anpassen oder die Frostgrenze verstellen.
Das bedeutet, dass ich nicht auf eine Einstellung abhängig vom Dummy gehen möchte, sondern die Seite sich gar nicht erst öffnet.
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

Gunther

Zitat von: Syrex-o am 18 November 2017, 13:49:49
Das Popup widget hat eine class Funktion, damit das nicht mehr passieren sollte:
https://wiki.fhem.de/wiki/FTUI_Widget_Popup

Stichwort interclock

Danke für den Tipp. Das Popup sollte ja auch da bleiben, wenn ich nichts manuell antippe. Trotzdem habe ich es mal probliert mit der Class interlock.
Ändert leider nichts.
Popup schließt sich wieder.
Komisch ist, dass die komplette Seite abgedunkelt bleibt und zwar so, als ob das Popup noch auf ist, nur dass es eben nicht mehr sichtbar ist.
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

Syrex-o

ZitatZu Deinen (meinen  :P) Punkten:

Einbau der Option mit 0 und */#:
finde ich super!

ein Widget mit Option vs. 2 widgets
Wenn die Performance nicht extrem darunter leidet, wäre vermutlich ein Widget zukunftssicherer, da bei Optionserweiterungen nicht zwei gepflegt werden müssten.
Da ich kein Entwickler bin, ist das nur die bescheidene Usersicht. Ich beuge mich da den Entscheidungen der Profis.

Seitenzugriff nur nach erfolgreicher Pineingabe
Ich bin nicht sicher, ob ich mich richtig ausgedrückt habe.
Was ich möchte ist, dass wenn ich auf meinen Menüpunkt "Einstellungen Heizung" gehe, das nur möglich ist, wenn der richtige Pin eingegeben wird.
Somit vermeide ich, dass Kiddies hier versehentlich meine Heizkurve anpassen oder die Frostgrenze verstellen.
Das bedeutet, dass ich nicht auf eine Einstellung abhängig vom Dummy gehen möchte, sondern die Seite sich gar nicht erst öffnet.
1. Dann wird es 1 Widget. Wird etwas deuern.  ;)

2. Setze das doch mit einem Popup um. Sobald sich die Seite öffnet kommt sofort das Popup. Dann gibst du den korrekten pin ein und das Popup schließt sich wegen dem wechsel des States.

ZitatDanke für den Tipp. Das Popup sollte ja auch da bleiben, wenn ich nichts manuell antippe. Trotzdem habe ich es mal probliert mit der Class interlock.
Ändert leider nichts.
Popup schließt sich wieder.
Komisch ist, dass die komplette Seite abgedunkelt bleibt und zwar so, als ob das Popup noch auf ist, nur dass es eben nicht mehr sichtbar ist.
Du musst nicht nur interclock verwenden, sondern auch angeben, wann es wieder geschlossen werden soll. Könnte es sein?.

Schick mir mal deinen aktuellsten HTML Auszug, dann teste ich es.

Gunther

Zitat von: Syrex-o am 18 November 2017, 14:09:33
2. Setze das doch mit einem Popup um. Sobald sich die Seite öffnet kommt sofort das Popup. Dann gibst du den korrekten pin ein und das Popup schließt sich wegen dem wechsel des States.
ok, wenn man den Code nicht kennt, kann man auch wieder abbrechen und kommt nicht weiter?


Zitat von: Syrex-o am 18 November 2017, 14:09:33
Du musst nicht nur interclock verwenden, sondern auch angeben, wann es wieder geschlossen werden soll. Könnte es sein?.

gehe nicht davon aus. Dann sollte das Popup ja stehen bleiben. Es schließt sich ja automatisch nach 3-4 Sekunden.

<header>Alarmanlage</header>
<!-- ============= Alarmanlage  ================== -->
<div data-type="popup"
data-draggable="false"
data-height="510px"
data-width="340px"
data-device="Alarm"
      data-get-on="on"
      data-get-off="off"
      class="interlock">
<!-- ============= Widgetinhalt Start  ================== -->
<div data-type="switch" data-device="Alarm"
      data-states='["on","off"]' 
      data-set-states='["","on"]'
      data-icons='["fa-fire","fa-fire"]'
      data-colors='["#ad3333","#6699FF"]'
      data-background-icon=""
      class="big">
</div>
<!-- ============= Widgetinhalt Ende  ================== -->
<!-- ============= Popupinhalt Start  ================== -->
<div class="dialog">
        <header>Pin Alarmanlage</header>
            <div data-type="pinpad"
            data-device="Alarm"
            data-get="STATE"
            data-get-pin="pin"
            data-text-locked="aktiviert"
        data-text-unlocked="deaktiviert"
        data-locked-time="10"
        data-tries="3">
      </div>
    </div>
<!-- ============= Popupinhalt Ende  ================== -->


</div>
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

ToM_ToM

#20
Zitat1. Dann wird es 1 Widget. Wird etwas deuern.

Cool. Vielleicht kann ich dann meinen Eigenbau dadurch ablösen. :) Auch wenn er tadellos funktioniert. Jedoch ist er nur aus vielen anderen Widgets zusammengebastelt und kommuniziert mit einem Dummy Device in FHEM, welches wiederum mit dem Alarm Modul von PAH verbunden ist. ^^

Da ich dein Widget nicht getestet habe, eine Frage: Gibst du einen Ton zurück wenn du die Tasten betätigst? Also einen Piepton (akustisches Feedback)?
Das hatte ich bei meinem System auf dem Tablet nicht hinbekommen. Der Ton wurde mir leider nur am PC/Notebook abgespielt, aber nicht auf den Tablets.

VG, Thomas

EDIT:
Anbei mein selbstgebauter Aufbau (falls es jemanden interessiert - eventuell für Gunther interessant da es ein funktionierendes Beispiel ist wo sich das Popup erst nach korrekter Pineingabe schließt und man nichts anderes betätigen kann):


<!-- 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-background-icon="fa-square-o" data-icon="" data-device="AlarmKeypadDummy" data-set="key" data-set-on="1" onclick="playTouchSound();">1</div>
  <div data-type="push" data-background-icon="fa-square-o" data-icon="" data-device="AlarmKeypadDummy" data-set="key" data-set-on="4" onclick="playTouchSound();">4</div>
  <div data-type="push" data-background-icon="fa-square-o" data-icon="" data-device="AlarmKeypadDummy" data-set="key" data-set-on="7" onclick="playTouchSound();">7</div>
  <div data-type="push" data-background-icon="fa-square-o" data-icon="fa-long-arrow-left" data-off-background-color="#ff471a" data-off-color="#FFFFFF" data-device="AlarmKeypadDummy" data-set="key" data-set-on="<" onclick="playTouchSound();"></div>
</div>
<div class="inline big">
  <div data-type="push" data-background-icon="fa-square-o" data-icon="" data-device="AlarmKeypadDummy" data-set="key" data-set-on="2" onclick="playTouchSound();">2</div>
  <div data-type="push" data-background-icon="fa-square-o" data-icon="" data-device="AlarmKeypadDummy" data-set="key" data-set-on="5" onclick="playTouchSound();">5</div>
  <div data-type="push" data-background-icon="fa-square-o" data-icon="" data-device="AlarmKeypadDummy" data-set="key" data-set-on="8" onclick="playTouchSound();">8</div>
  <div data-type="push" data-background-icon="fa-square-o" 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-background-icon="fa-square-o" data-icon="" data-device="AlarmKeypadDummy" data-set="key" data-set-on="3" onclick="playTouchSound();">3</div>
  <div data-type="push" data-background-icon="fa-square-o" data-icon="" data-device="AlarmKeypadDummy" data-set="key" data-set-on="6" onclick="playTouchSound();">6</div>
  <div data-type="push" data-background-icon="fa-square-o" data-icon="" data-device="AlarmKeypadDummy" data-set="key" data-set-on="9" onclick="playTouchSound();">9</div>
  <div data-type="push" data-background-icon="fa-square-o" data-icon="" data-off-background-color="#8cd98c" 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>

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

Syrex-o

Zitatgehe nicht davon aus. Dann sollte das Popup ja stehen bleiben. Es schließt sich ja automatisch nach 3-4 Sekunden.
Bei mir schließt es sich nicht automatisch.
Habe die Tablet Ui version 2.6.15
Musst mal gucken ob dir da paar updates fehlen könnten.

So sieht es jetzt bei mir funktionierend aus:
<section>
            <div    data-type="popup"
                    data-draggable="false"
                    data-height="510px"
                    data-width="340px"
                    data-device="Alarm"
                    data-get-on="on"
                    data-get-off="off"
                    class="interlock">
            <!-- ============= Widgetinhalt Start  ================== -->
                <div    data-type="switch" data-device="Alarm"
                        data-states='["on","off"]' 
                        data-set-states='["","on"]'
                        data-icons='["fa-fire","fa-fire"]'
                        data-colors='["#ad3333","#6699FF"]'
                        data-background-icon=""
                        class="big">
                </div>
            <!-- ============= Widgetinhalt Ende  ================== -->
            <!-- ============= Popupinhalt Start  ================== -->
                    <div class="dialog">
                        <header>Pin Alarmanlage</header>
                        <div    data-type="pinpad"
                        data-device="Alarm"
                        data-get="STATE"
                        data-get-pin="pin"
                        data-text-locked="aktiviert"
                        data-text-unlocked="deaktiviert"
                        data-locked-time="10"
                        data-tries="3">
                        </div>
                    </div>
            <!-- ============= Popupinhalt Ende  ================== -->


            </div>
       </section>


ZitatDa ich dein Widget nicht getestet habe, eine Frage: Gibst du einen Ton zurück wenn du die Tasten betätigst? Also einen Piepton (akustisches Feedback)?
Das hatte ich bei meinem System auf dem Tablet nicht hinbekommen. Der Ton wurde mir leider nur am PC/Notebook abgespielt, aber nicht auf den Tablets.

Akustisches feedback kann ich als Option sicherlich einbinden.
Kommt auch auf die Liste  ;)

Gunther

#22
Zitat von: Syrex-o am 18 November 2017, 14:37:36
Habe die Tablet Ui version 2.6.15

Ich habe vorgestern geupdatet.
Wo kann ich die Version nachschauen.
Habe: Version: 2.6.12
(gefunden im Ordner js/fhem-tablet-ui.js)

Ich update mal und prüfe nochmal
hmm:
update check:
fhemtabletui
nothing to do...


ich mache einen neuen Thread auf.
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

setstate

kleines Problem:

Zeile 72: elem.getReading("get-pin").val.length;

Wenn schon beim init Readings benutzt werden, kann es sein, dass diese noch nicht lokal bekannt sind, also 'undefined'
Dann kommt es beim Abfragen der length zu einem Fehler.


pataya

Nette Idee.
Die Realisierung von "data-get-on/off" und "data-set-on/off" wäre noch traumhaft :)
Meine Alarmanlage benötigt nämlich ein "scharfschalten/unscharfschalten" als set, und gibt "scharf/scharfschalten/unscharf/unscharfschalten" als reading aus.

Gunther

Das kannst Du doch über den oben beschriebenen Dummy mit einem notify oder doif erledigen oder verstehe ich Dich gerade falsch?
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

Syrex-o

ZitatDas kannst Du doch über den oben beschriebenen Dummy mit einem notify oder doif erledigen oder verstehe ich Dich gerade falsch?
Jop, da hast du recht.

Werde morgen das Update raus bringen und versuche so viel wie möglich einzubinden.

@setstate wann ist der beste moment um ein reading abzufragen. Da ich auf der Basis des Readings die Punkte erstelle, muss es doch beim initialisieren passieren. Ich könnte es höchstens in eine andere nachgelagerte funktion umlagern.
Reicht das ?
Und wie kann ich das update über Github möglich machen ?

setstate

Zitat von: Syrex-o am 19 November 2017, 22:01:11

@setstate wann ist der beste moment um ein reading abzufragen. Da ich auf der Basis des Readings die Punkte erstelle, muss es doch beim initialisieren passieren. Ich könnte es höchstens in eine andere nachgelagerte funktion umlagern.
Reicht das ?

genau, das Zeichnen in eine Funktion und diese erst in update rufen.

FHEM holt die Updateinfos aus der controls_xxx.txt Datei.

Syrex-o

Update:
Neue Version PinPad.

Leider konnten noch nicht alle Funktionen eingebunden werden und es könnte zu Bugs kommen.
Bitte darüber berichten.
Neue Funktionen:
- class = show-pin (zeigt den pin an, anstatt von Punkten)
- Back Button, um das letzte Zeichen zu löschen.
- 0 in Layout eingefügt.

Beide Datein müssen ersetzt werden.

Grüße

Syrex-o

Kleiner Nachtrag:
class="squared" Eckige statt runge Buttons
Fix: Konsoleneinträge waren noch aktiv
      bei class="show-pin" Verbesserung der Anzeige

Grüße