Hi,
danke für den Quellcode. Ich habe ihn noch etwas erweitert.
Neue Funktion:
- Auswahl Zwischen Pin aus der Variablen oder Quellcode
- Vorschau in der Vis von der eingegebenen Zahl, die dann aber wieder verschwindet nach ein paar Millisekunden
- Reaktion auf Taste "#" und "-" anstelle von "R" und "E"
- Nachricht in der VIS wenn der Pin Richtig oder Falsch war
// -----------------------------------------------------------------------------
// allgemeine Variablen
// -----------------------------------------------------------------------------
var logging = true; // Logging on/off
var instanz = 'javascript.0'; instanz = instanz + '.Alarm'; //
var pfad0 = 'alarm.Pin.'; // Pfad innerhalb der Instanz
// -----------------------------------------------------------------------------
// Variablen für Pin-Abfrage
// -----------------------------------------------------------------------------
var PinTast = ""; // Inhalt der Eingabe
var PinTemp =""; // Puffer für eingegebe Ziffern
var PinLae = 0; // Pin-Länge bei Eingabe
var PinState = false ; // Eingabestatus - Eingabe beginnt nach Taste '#' und wird mit Taste '#' abgeschlossen
var PinFehl = false; // Statusflag für fehlerhafte Eingabe
var PinAnz = ""; // Angezeiger 'Displaytext' z.B. ****
var PinAnzStat = 0; // Status der PinAnzeige im Display (0-Ruhe | 1-Start [grau] | 2-richtig [gruen] | 3-falsch [rot])
var PinShowLastState = true ; // Zeigt die letzte eingegeben Zahl in der Variable VisKeyPad an z.B. ***4 diese Verschwindet automatisch nach einer gewissen zeit
var PinShowLastStateDelay = 400 ; // Zeit in ms (Millisekunden) die die letzte eingebene Zahl angezeigt wird
var PinSoll = getState(pfad0 + 'Pin').val; // Pin die zur Deaktivierung der Alarmanlage benötigt wird
// var PinSoll = String("1111"); // Pin die zur Deaktivierung der Alarmanlage benötigt wird
var PinUnlockMsg = "unlock" // Text der in PinAnz zu sehen ist wenn der Pin i.O. eingegeben wurde
var PinFailureMsg = "failure" // Text der in PinAnz zu sehen ist wenn der Pin i.O. eingegeben wurde
// -----------------------------------------------------------------------------
// Objekte
// -----------------------------------------------------------------------------
// Objekte für Pin-Eingabe
createState(pfad0 + 'disable', false , {name: 'Alarm abschalten'});
createState(pfad0 + 'PinSelect', "" , {name: 'Pin-Eingabe'});
createState(pfad0 + 'Pin', '0000' , {name: 'Pin'});
createState(pfad0 + 'PinFehler', false , {name: 'Pin-Fehler'});
createState(pfad0 + 'PinAnzStat', 1 , {name: 'PinAnzeigeStatus'});
createState(pfad0 + 'PinAnz', '' , {name: 'Pin-Anzeige'});
createState(pfad0 + 'VisKeyPad', '' , {name: 'State für Vis Keypad Sichtbar'}); //State für Vis Keypad Sichtbar wird von Button in Vis beschrieben und bei unscharf zurück gesetzt
// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
// #############################################################################
// # #
// # Pin-Abfrage #
// # #
// #############################################################################
on({id: 'javascript.0.alarm.Pin.PinSelect', change: "any"}, function (dp) {
if (dp.state.val === 0 || dp.state.val === 1 || dp.state.val === 2 || dp.state.val === 3 || dp.state.val === 4 || dp.state.val === 5 || dp.state.val === 6 || dp.state.val === 7 || dp.state.val === 8 || dp.state.val === 9) {
PinTast = dp.state.val;
PinEingabe();
}
if (dp.state.val === '#') {
PinPruef();
}
if (dp.state.val === '-') {
PinReset();
}
});
function PinEingabe () {
PinTemp = (String(PinTemp) + String(PinTast));
setState('javascript.0.alarm.Pin.VisKeyPad', PinAnz + PinTast);
PinAnz = String(PinAnz + '*');
// setState('javascript.0.alarm.Pin.PinAnz', PinAnz);
timeout = setTimeout(async function () {setState('javascript.0.alarm.Pin.VisKeyPad', PinAnz); }, PinShowLastStateDelay);
PinLae = (PinLae +1) ;
}
function unscharf(){
setState('javascript.0.alarm.Pin.PinAnzStat',1);
setState('javascript.0.alarm.Pin.disable', true);
setState('javascript.0.alarm.Pin.VisKeyPad', PinUnlockMsg);
timeout_unscharf = setTimeout(async function () {setState('javascript.0.alarm.Pin.VisKeyPad', ""); }, 2000);
if(logging) log('Deaktivierung / Pineingabe erfolgreich');
///////////////////////////////////////////////////// Hier musst du dann deinen Türöffner auf machen reinschreiben
}
function PinPruef() {
if (PinTemp == PinSoll) {
if(logging) log('PinEingabe erfolgreich');
PinAnzStat = 1;
unscharf();
// Resette den Pin nach 2 Sekunden
setTimeout(function() {
PinReset();
}, 2 * 1000);
} else {
if(logging) log('PinEingabe Fehler');
PinAnzStat = 2;
setState('javascript.0.alarm.Pin.PinAnzStat', 2);
setState('javascript.0.alarm.Pin.PinFehler', true);
setState('javascript.0.alarm.Pin.disable', false);
setState('javascript.0.alarm.Pin.VisKeyPad', PinFailureMsg);
PinReset();
}
}
function PinReset() {
if (PinTemp == PinSoll) {
setState('javascript.0.alarm.Pin.VisKeyPad', "");
} else {
timeout_pinpruef = setTimeout(async function () {setState('javascript.0.alarm.Pin.VisKeyPad', ""); }, 1000);
}
PinLae=0;
PinAnzStat=2;
PinAnz="";
PinTemp="";
setState('javascript.0.alarm.Pin.PinAnzStat', 2);
setState('javascript.0.alarm.Pin.PinAnz', PinAnz);
}
was noch kommt ... Maximale Falscheingabe des PIN, melde Objekt wenn zu oft falsch eingegeben wurde
VG