Skip to content

Commit b45b1e1

Browse files
committed
Update / Modification from the production live system: 2026-03-05 00:00
1 parent 7fe62ae commit b45b1e1

1 file changed

Lines changed: 32 additions & 15 deletions

File tree

iobroker/10_System/Sicherheit/klingelsignal_erkennen.js

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* Autor: Sanweb
77
* * -----------------------------------------------------------------------------
88
* Versionshistorie:
9+
* v1.0.1 | 04.03.2026 | Auto-Create für fehlende Datenpunkte hinzugefügt
910
* v1.0.0 | 04.03.2026 | Initiale Version
1011
*******************************************************************************/
1112

@@ -91,7 +92,7 @@ function safeSetState(id, val) {
9192
}
9293

9394
// ==============================================================================
94-
// INITIALISIERUNG
95+
// INITIALISIERUNG & AUTO-CREATE DATENPUNKTE
9596
// ==============================================================================
9697

9798
// Plausibilitätsprüfung der konfigurierten Zeiten
@@ -108,24 +109,40 @@ if (!/^([01]\d|2[0-3]):([0-5]\d)$/.test(ALEXA_START_ZEIT) || !/^([01]\d|2[0-3]):
108109
}
109110
}
110111

111-
// Wir prüfen nur, ob der Zutrittskontroll-Datenpunkt existiert.
112-
// Manuelles Anlegen im ioBroker-Objektbaum wird empfohlen, um asynchrone Fehler durch createState zu vermeiden.
112+
// 1. Datenpunkt für die Zutrittskontrolle prüfen und ggf. anlegen
113113
if (!stateExists(DP_ZUTRITTSKONTROLLE)) {
114-
log(`WICHTIG: Der Datenpunkt ${DP_ZUTRITTSKONTROLLE} existiert nicht. Bitte lege ihn manuell als Logikwert (boolean) an!`, 'error');
114+
log(`Datenpunkt ${DP_ZUTRITTSKONTROLLE} existiert nicht. Wird automatisch angelegt...`, 'info');
115+
await createStateAsync(DP_ZUTRITTSKONTROLLE, false, {
116+
name: 'Zutrittskontrolle Haustür',
117+
desc: 'Status der Zutrittskontrolle',
118+
type: 'boolean',
119+
role: 'indicator',
120+
read: true,
121+
write: true
122+
});
115123
}
116124

117-
// Letzten Klingel-Zeitpunkt laden, falls der Datenpunkt existiert
118-
if (stateExists(DP_LAST_RING)) {
119-
const savedTime = getState(DP_LAST_RING).val;
120-
if (typeof savedTime === 'number' && !isNaN(savedTime)) {
121-
lastRingTime = savedTime;
122-
logDebug(`Letzter Klingelzeitpunkt aus Datenpunkt geladen: ${lastRingTime}`);
123-
} else {
124-
log('WARNUNG: Gespeicherter Klingelzeitpunkt ist ungültig, verwende 0', 'warn');
125-
lastRingTime = 0;
126-
}
125+
// 2. Datenpunkt für den letzten Klingelzeitpunkt prüfen und ggf. anlegen
126+
if (!stateExists(DP_LAST_RING)) {
127+
log(`Datenpunkt ${DP_LAST_RING} existiert nicht. Wird automatisch angelegt...`, 'info');
128+
await createStateAsync(DP_LAST_RING, 0, {
129+
name: 'Letzter Klingelzeitpunkt',
130+
desc: 'Timestamp des letzten Klingelsignals in Millisekunden',
131+
type: 'number',
132+
role: 'value.time',
133+
read: true,
134+
write: true
135+
});
136+
}
137+
138+
// Letzten Klingel-Zeitpunkt laden (Datenpunkt existiert jetzt garantiert)
139+
const savedTime = getState(DP_LAST_RING).val;
140+
if (typeof savedTime === 'number' && !isNaN(savedTime)) {
141+
lastRingTime = savedTime;
142+
logDebug(`Letzter Klingelzeitpunkt aus Datenpunkt geladen: ${lastRingTime}`);
127143
} else {
128-
log(`HINWEIS: Der Datenpunkt ${DP_LAST_RING} existiert nicht. Lege ihn als Zahl (number) an, um die Sturm-Protection über Skript-Neustarts hinweg zu erhalten.`, 'info');
144+
log('WARNUNG: Gespeicherter Klingelzeitpunkt ist ungültig, verwende 0', 'warn');
145+
lastRingTime = 0;
129146
}
130147

131148
// ==============================================================================

0 commit comments

Comments
 (0)