ich nutze OH 3.3 und stehe vor einem Problem, wo ich nicht weiter komme. Eigentlich ist es ja keine außergewöhnliche Anforderung Licht per Bewegungsmelder an und dann per Timer wieder auszuschalten. Da ich aber mit Javascript auf Kriegsfuß stehe, komme ich einfach nicht weiter... Im OH-Log (frontail) bekomme ich immer folgende Fehlermeldung: "SyntaxError: Variable "LightTimer" has already been declared"
Wer kann mir weiterhlefen?
Kurz zur Erläuterung: Das Script wird von den verschiedenen Rules der einzelnen Bewegungsmelder im Haus aufgerufen und bekommt von denen die jeweiligen Werte (Ort, Lampe, Sensorwert und Leuchtdauer) übermittelt.
Hier noch mein komplettes Script:
Code: Alles auswählen
class LightTimer{
constructor(ort, lampe)
{
this.ort = ort;
this.lampe = lampe;
}
trigger(sensorwert, empfindlichkeit, dauerSec)
{
console.info(this.ort + ': Bewegung erkannt');
if (this.timer === undefined || this.timer.hasTerminated())
{
console.info([this.ort,': aktuelle Helligkeit beträgt ',sensorwert].join(''));
if (empfindlichkeit > sensorwert)
{
console.info(([this.ort,': Es ist dunkler als der Schwellwert (',empfindlichkeit,')'].join('')));
if (items.getItem('Nachtruhe').state == 'ON')
{
console.info(this.ort + ': Licht wird im Nachtmodus angeschaltet.');
this.lampe.sendCommand(items.getItem('Vorgabe_Helligkeit_Nacht').state);
}
else
{
console.info(this.ort + ': Licht wird im Tagmodus angeschaltet.');
this.lampe.sendCommand(items.getItem('Vorgabe_Helligkeit_Tag').state);
}
this.timer = setTimeout(() => {
console.info([this.ort , ': Abschalttimer abgelaufen!'].join(''));
this.lampe.sendCommand('OFF');
}
, this.dauerSec*1000);
console.info([this.ort , ': Abschalttimer auf ', this.dauerSec, 's gesetzt.'].join(''));
}
else
{
console.info(([this.ort,': Licht wird nicht angeschaltet, da es hier hell genug ist. (Schwellwert ',empfindlichkeit,')'].join('')));
}
}
else
{
this.timer.reschedule(time.ZonedDateTime.now().plusSeconds(this.dauerSec));
console.info([this.ort , ': Abschalttimer wird zurückgesetzt auf ', this.dauerSec, 's.'].join(''));
}
}
}
const timers = new Map();
var timerID = ort.replace(" ", "_") + '_TimerLicht';
if(!timers.has(timerID))
{
timers.set(timerID, new LightTimer(ctx['ort'],
items.getItem(ctx['lampe'])));
}
timers.get(timerID).trigger(ctx['sensor'],
items.getItem('Empfindlichkeit_Bewegungsmelder_Licht').state,
ctx['dauerSec']);