Script für Lichtschaltung per Timer

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
knorman
Beiträge: 1
Registriert: 17. Dez 2020 22:02
Answers: 0

Script für Lichtschaltung per Timer

Beitrag von knorman »

Hallo Leute,

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']);

Mclupo
Beiträge: 178
Registriert: 6. Jun 2020 20:55
Answers: 2
Wohnort: Kirchheim Teck

Re: Script für Lichtschaltung per Timer

Beitrag von Mclupo »

moin
schau mal hier im englischen Forum.

Code: Alles auswählen

https://community.openhab.org/t/ecmascript-2021-variable-error-on-the-second-time-the-rule-is-run/131959
https://community.openhab.org/t/ecmascr ... run/131959
OH 3.4.2 auf Raspi 4 mit Aeotec z-wave Stick gen 5+ und zigbee conbee II

Antworten