Ich habe das Blockly durch eine KI in ein Javascript umsetzen lassen.
Technische Dokumentation: Automatisches VIS-2 Keypad mit Telegram-Anbindung
Dieses Skript steuert die PIN-Code-Eingabe einer Alarmanlage über das VIS-2-Interface in ioBroker. Es bietet eine automatische Auswertung nach der vierten Ziffer, Maskierung der Eingabe durch Sicherheits-Punkte, einen automatischen Sperrmechanismus bei Falscheingaben sowie eine direkte Alarmierung über Telegram.
Systemvoraussetzungen & Datenpunkte
Das Skript verwendet standardmäßig vier Datenpunkte innerhalb der ioBroker-Objektstruktur. Alle Zustände werden datentyp-konform verarbeitet.
Datenpunkt-ID Datentyp Funktion / Zuordnung
0_userdata.0.vis.Alarmanlage.Keypad.Zahl1 String Empfängt die gedrückte Ziffer aus dem VIS-2 Keypad Widget.
0_userdata.0.vis.Alarmanlage.Keypad.Zahl2 String Das VIS-Display. Zeigt den Text („Code“), Punkte (••••) oder Statusmeldungen.
0_userdata.0.vis.Alarmanlage.Keypad.Zahl3 Number Löschen-Taste (Del). Setzt die aktuelle Eingabe bei Betätigung zurück.
alarm.0.use.list Number Der Status der ioBroker-Alarmanlage (0 = Deaktiviert, 1 = Aktiviert).
telegram.0 Instanz Telegram-Adapter für den Versand der Status- und Alarmnachrichten.
Ablaufdiagramm & Funktionslogik
[ Tastendruck in VIS-2 ] ---> Schreibt Ziffer in .Zahl1
|
v
Is Keypad gesperrt?
/
(Ja) / \ (Nein)
v v
[Eingabe blockiert] [Ziffer im RAM anhängen]
[Display: GESPERRT] [Display: Maskierung ••••]
|
v
PIN-Länge 4 erreicht?
|
(Ja) ----+---- (Nein) ---> [Wartet auf nächste Ziffer]
|
v
[ PIN-Prüfung ]
/
(Korrekt) / \ (Falsch)
v v
[Alarmanlage schalten] [Fehlversuch +1]
[Telegram: Deaktiviert] [Telegram: Warnung]
|
v
Fehlversuche >= 3?
|
(Ja) ----+---- (Nein) -> [Zurück auf Standard]
|
v
[ Keypad 5 Min SPERREN ]
[ Display: GESPERRT ]
[ Telegram: KRITISCHER ALARM ]
Kernfunktionen im Detail
3.1 Sicherheits-Maskierung (Datenschutz)
Die Eingabe der Ziffern erfolgt nicht in einem physischen Datenpunkt. Die Zahlenkette wird ausschließlich im flüchtigen Arbeitsspeicher (RAM) der JavaScript-Variable internerKlartext zwischengespeichert. Für das VIS-Display (Zahl2) wird per .repeat() temporär ein String aus Punkten (•) erzeugt. Ein Ausspähen der PIN über ioBroker-Zustände ist somit unmöglich.
3.2 Automatisches Null-Resetting
Da inventwo-Widgets in VIS-2 den geschriebenen Zustand dauerhaft halten, lauscht das Skript auf jede Aktualisierung (change: "any"). Nach der Ziffern-Registrierung leert das Skript das Eingabefeld Zahl1 sofort wieder aktiv mit einem Leerstring (''). Dadurch wird sichergestellt, dass dieselbe Ziffer (z. B. eine Doppel-3) problemlos direkt hintereinander eingegeben werden kann.
3.3 Automatisches Prüfverfahren
Es ist keine Bestätigungstaste (Enter) erforderlich. Das Skript vergleicht die Länge der Variable internerKlartext mit der vordefinierten PIN-Konstante (ID_WUNSCH_PIN). Sobald die 4. Ziffer registriert ist, wird die Funktion pruefePin() ohne Zeitverzögerung ausgeführt.
3.4 3-Stufen-Sperrmechanismus (Brute-Force-Schutz)
• Versuch 1 & 2: Das Skript lehnt den Code ab, leert den Speicher, zeigt im Display „Falscher Code!“ an und sendet eine Telegram-Warnung mit der aktuellen Versuchsnummer.
• Versuch 3: Das Keypad wechselt in den Zustand istGesperrt = true. Auf dem VIS-Bildschirm erscheint dauerhaft der Text „GESPERRT“. Jegliche weitere Tasteneingabe wird sofort verworfen. Es wird ein kritischer Telegram-Alarm abgesetzt.
• Entsperrung: Ein asynchroner Timeout-Timer (sperrTimer) entsperrt das System nach exakt 5 Minuten (300000 ms) vollautomatisch und setzt den Fehlerzähler zurück. Alternativ hebt ein Skript-Neustart die Sperre sofort auf.
3.5 Manuelles Löschen (Zahl3)
Wird während der Code-Eingabe die Löschen-Taste (Zahl3) betätigt, löscht das Skript die Variable im RAM, zeigt im Display „Eingabe gelöscht“ und springt nach 1,5 Sekunden in den Bereitschaftsmodus („Code“) zurück. Um dem Datentyp gerecht zu werden, wird die Taste danach wieder auf die Zahl 0 gesetzt.
Parameter-Konfiguration im Quellcode
Die Verhaltensweisen des Skripts können im Kopfbereich der JavaScript-Datei über Konstanten angepasst werden:
• ID_WUNSCH_PIN: Ändere den Wert '0000' in deine gewünschte Zahlenkombination.
• MAX_FEHLVERSUCHE: Bestimmt die Anzahl erlaubter Versuche (Standard: 3).
• SPERR_ZEIT_MS: Sperrdauer in Millisekunden. (Rechenbeispiel für 5 Minuten: 5 * 60 * 1000 = 300000).
Skript Pincode.txt