NEWS
PIR und LED Licht: Wo ist mein Fehler
-
Hallo,
ich will eine Badbeleuchtung haben über einen Zigbee LED Streifen, der angeht, wenn Bewegung festgestellt wird.
habe dazu einen IKEA PIR Sensor im Einsatz.
(den Anwesenheitssensor will ich nicht, der geht ja auch durch Wände und hinter dem Bad liegt die Küche und der Flur, deswegen nur PIR).Ich will, das das Licht auch nur bei gewissem LUX Wert angeht.
Der eigene IKEA Sensor hat zwar auch LUX, der spinnt aber manchmal, deswegen habe ich noch eine andere Quelle in das Script aufgenommen.ich habe auch noch eine andere Lampe, die genutzt wird zum Duschen, deswegen der Abgleich mit Lampe 2.
Es klappt jetzt auch alles soweit ganz gut.
Aaaaber:
Irgendwie klappt das nicht. Also es klappt schon, das Erstauslösen funktioniert gut.
Aber wenn man zB Zähne putzt und länger als die Zeit braucht, dann geht es nicht mehr an.
Oder man hampelt rum, manchmal klappt es, manchmal nicht.Jetzt die Frage:
Liegt das an meinem Script?
Oder kommt das vom IKEA Sensor, das er ein gewisses Zeitintervall hat und deswegen nur alle zB 20 Sekunden checkt?
Und mein script überlapt sich dann dann ggf und deswegen keine erneute Aktivierung?on({ id: [].concat(['deconz.0.Sensors.12.presence']), change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if ((getState('deconz.0.Sensors.12.presence').val == true) && (getState('javascript.0.Anwesenheitserkennung.Bad').val == false) && (compareTime('06:00', '07:00', 'between') || compareTime('21:30', '22:45', 'between')) && ((getState('deconz.0.Sensors.13.lux').val <= 30) || (getState('deconz.0.Sensors.3.lux').val <= 30))) { setState('deconz.0.Lights.13.level' /* Ledvance Lichtstreifen Bad level */, 100); setState('deconz.0.Lights.13.on' /* Ledvance Lichtstreifen Bad on */, true); setStateDelayed('deconz.0.Lights.13.on' /* Ledvance Lichtstreifen Bad on */, false, 180000, false); } else if ((getState('deconz.0.Sensors.12.presence').val == true) && (getState('javascript.0.Anwesenheitserkennung.Bad').val == false) && (compareTime('06:00', '07:00', 'not between') || compareTime('21:30', '22:45', 'not between')) && ((getState('deconz.0.Sensors.13.lux').val <= 30) || (getState('deconz.0.Sensors.3.lux').val <= 30))) { setState('deconz.0.Lights.13.level' /* Ledvance Lichtstreifen Bad level */, 100); setState('deconz.0.Lights.13.on' /* Ledvance Lichtstreifen Bad on */, true); setStateDelayed('deconz.0.Lights.13.on' /* Ledvance Lichtstreifen Bad on */, false, 45000, false); } });Das ganze als Blockly:

-
Hallo,
ich will eine Badbeleuchtung haben über einen Zigbee LED Streifen, der angeht, wenn Bewegung festgestellt wird.
habe dazu einen IKEA PIR Sensor im Einsatz.
(den Anwesenheitssensor will ich nicht, der geht ja auch durch Wände und hinter dem Bad liegt die Küche und der Flur, deswegen nur PIR).Ich will, das das Licht auch nur bei gewissem LUX Wert angeht.
Der eigene IKEA Sensor hat zwar auch LUX, der spinnt aber manchmal, deswegen habe ich noch eine andere Quelle in das Script aufgenommen.ich habe auch noch eine andere Lampe, die genutzt wird zum Duschen, deswegen der Abgleich mit Lampe 2.
Es klappt jetzt auch alles soweit ganz gut.
Aaaaber:
Irgendwie klappt das nicht. Also es klappt schon, das Erstauslösen funktioniert gut.
Aber wenn man zB Zähne putzt und länger als die Zeit braucht, dann geht es nicht mehr an.
Oder man hampelt rum, manchmal klappt es, manchmal nicht.Jetzt die Frage:
Liegt das an meinem Script?
Oder kommt das vom IKEA Sensor, das er ein gewisses Zeitintervall hat und deswegen nur alle zB 20 Sekunden checkt?
Und mein script überlapt sich dann dann ggf und deswegen keine erneute Aktivierung?on({ id: [].concat(['deconz.0.Sensors.12.presence']), change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if ((getState('deconz.0.Sensors.12.presence').val == true) && (getState('javascript.0.Anwesenheitserkennung.Bad').val == false) && (compareTime('06:00', '07:00', 'between') || compareTime('21:30', '22:45', 'between')) && ((getState('deconz.0.Sensors.13.lux').val <= 30) || (getState('deconz.0.Sensors.3.lux').val <= 30))) { setState('deconz.0.Lights.13.level' /* Ledvance Lichtstreifen Bad level */, 100); setState('deconz.0.Lights.13.on' /* Ledvance Lichtstreifen Bad on */, true); setStateDelayed('deconz.0.Lights.13.on' /* Ledvance Lichtstreifen Bad on */, false, 180000, false); } else if ((getState('deconz.0.Sensors.12.presence').val == true) && (getState('javascript.0.Anwesenheitserkennung.Bad').val == false) && (compareTime('06:00', '07:00', 'not between') || compareTime('21:30', '22:45', 'not between')) && ((getState('deconz.0.Sensors.13.lux').val <= 30) || (getState('deconz.0.Sensors.3.lux').val <= 30))) { setState('deconz.0.Lights.13.level' /* Ledvance Lichtstreifen Bad level */, 100); setState('deconz.0.Lights.13.on' /* Ledvance Lichtstreifen Bad on */, true); setStateDelayed('deconz.0.Lights.13.on' /* Ledvance Lichtstreifen Bad on */, false, 45000, false); } });Das ganze als Blockly:

@jhuebner1 sagte: Liegt das an meinem Script?
Ja, das Licht wird nach der Verzögerungszeit von 3 min bzw. 45 s zwangsweise ausgeschaltet, da die Timer bei erneuter Bewegungserkennung nicht gestoppt werden.
Vorschlag:
Was hat es mit dem DP "javascript.0.Anwesenheitserkennung.Bad" auf sich?
-
@jhuebner1 sagte: Liegt das an meinem Script?
Ja, das Licht wird nach der Verzögerungszeit von 3 min bzw. 45 s zwangsweise ausgeschaltet, da die Timer bei erneuter Bewegungserkennung nicht gestoppt werden.
Vorschlag:
Was hat es mit dem DP "javascript.0.Anwesenheitserkennung.Bad" auf sich?
@paul53
Danke, schau ich mir an und versuche es nachzubauen.Das javascript.0.Anwesenheitserkennung.Bad ist genau mein "Duschszenario".
Ich weiß, hat mit Anwesenheit nix zu tun, aber so hab ich angefangen und lass das alles im gleichen verzeichnis liegen..... -
@paul53
Danke, schau ich mir an und versuche es nachzubauen.Das javascript.0.Anwesenheitserkennung.Bad ist genau mein "Duschszenario".
Ich weiß, hat mit Anwesenheit nix zu tun, aber so hab ich angefangen und lass das alles im gleichen verzeichnis liegen.....@jhuebner1 sagte: javascript.0.Anwesenheitserkennung.Bad ist genau mein "Duschszenario".
Ich habe es in der Version mit nur einem Timeout als "Duschlicht" bezeichnet:

-
@jhuebner1 sagte: javascript.0.Anwesenheitserkennung.Bad ist genau mein "Duschszenario".
Ich habe es in der Version mit nur einem Timeout als "Duschlicht" bezeichnet:

@paul53
Irgendwas hat da bei mir nicht geklappt.
Mal ging es, mal ging es nicht....Ich hab das jetzt mal durch ChatGPD gejagd und das kam dabei rum:
var timeout, timeout2; function clearPreviousTimeouts() { if (timeout) { clearTimeout(timeout); timeout = null; } if (timeout2) { clearTimeout(timeout2); timeout2 = null; } } on({ id: [].concat(['deconz.0.Sensors.12.presence']), change: 'ne' }, (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; // Prüfen, ob der Sensor auf Anwesenheit schaltet und Lichtsteuerungsbedingungen erfüllt sind if (value && !getState('javascript.0.Anwesenheitserkennung.Bad').val && (getState('deconz.0.Sensors.13.lux').val <= 20 || getState('deconz.0.Sensors.3.lux').val <= 30)) { // Wenn innerhalb der Zeitbereiche if (compareTime('06:00', '07:00', 'between') || compareTime('21:30', '22:45', 'between')) { clearPreviousTimeouts(); setState('deconz.0.Lights.13.level', 100); // Setze Lichtlevel auf 100% setState('deconz.0.Lights.13.on', true); // Schalte das Licht ein // Timeout nach 3 Minuten timeout = setTimeout(() => { timeout = null; setState('deconz.0.Lights.13.on', false); // Schalte das Licht aus }, 180000); } else { clearPreviousTimeouts(); setState('deconz.0.Lights.13.level', 100); setState('deconz.0.Lights.13.on', true); // Timeout nach 1 Minute timeout2 = setTimeout(() => { timeout2 = null; setState('deconz.0.Lights.13.on', false); // Schalte das Licht aus }, 60000); } } });
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden