Rule soll anhand eines Counters nur eimal ausgeführt werden

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Marc1985
Beiträge: 2
Registriert: 30. Okt 2020 11:34
Answers: 0

Rule soll anhand eines Counters nur eimal ausgeführt werden

Beitrag von Marc1985 »

Hallo zusammen,

ich habe ein kleines Problem und komme einfach nicht weiter. Ich habe schon einige Einträge darüber gelesen, aber irgendwas mache ich noch falsch. Nun zum Problem.....

Eine Rule schaltet nach Helligkeit X und anderen Faktoren die Dekolichter an. Funktioniert so weit alles gut. Jetzt möchte ich aber einen Counter einbauen, der hochzählt, sobald das Licht einmal geschaltet wurde. Der Counter soll dann am nächsten Morgen um eine Zeit X wieder genullt werden. Die Rule soll also nur einmal ausgeführt werden. Könnt ihr mir hier weiterhelfen?

Hier meine Rule ohne Counter:

Code: Alles auswählen

rule "Wohnzimmer Hue Dekolicht an bei Helligkeit X"

when
      Item HmIPHelligkeitssensorWesten1LOWESTILLUMINATION changed

then                                                                                                      
      var Number nBright = 100							                                                  //default
                                                                                                     
      if (HmIPHelligkeitssensorWesten1LOWESTILLUMINATION.state instanceof Number)                   //Das Item hat einen gültigen Zahlenwert
         nBright = (HmIPHelligkeitssensorWesten1LOWESTILLUMINATION.state as Number).intValue   //Setze die Variable auf den Wert

      //Bedingungen zum schalten....
		if (nBright <= 20 && PhilipsHueSchlafzimmerGruppeSwitch.state == OFF && PhilipsHueSchlafzimmerBettGruppeSwitch.state == OFF) 
      	if (now.getHour >= 18 && now.getHour <= 22)
        		
	{                              
            Stehlampe3Color.sendCommand(60)
            Thread::sleep(2000)
            PhilipsHueWohnbereich2LeuchteE27ColorColor.sendCommand(60)
            Thread::sleep(2000)
            HueLivingColorColor.sendCommand(60)
            Thread::sleep(2000)
            WohnzimmerStripeColor.sendCommand(60)
            Thread::sleep(2000)
            Stehlampe1Color.sendCommand(60)  
	}
end


So habe ich es getestet und komme nicht weiter....erstmal nur zum hochzählen.

Code: Alles auswählen

rule "Wohnzimmer Hue Dekolicht an bei Helligkeit X"

when
      Item HmIPHelligkeitssensorWesten1LOWESTILLUMINATION changed

then  
      var nCount = 1                                                                                                    
      var Number nBright = 100                                                                                                         //default
      if (HmIPHelligkeitssensorWesten1LOWESTILLUMINATION.state instanceof Number)                     //Das Item hat einen gültigen Zahlenwert
         nBright = (HmIPHelligkeitssensorWesten1LOWESTILLUMINATION.state as Number).intValue      //Setze die Variable auf den Wert

    if (nBright <= 20 && PhilipsHueSchlafzimmerGruppeSwitch.state == OFF && PhilipsHueSchlafzimmerBettGruppeSwitch.state == OFF && nCount < 0) 
          if (now.getHour >= 18 && now.getHour <= 22)
                  
	{                              
            Stehlampe3Color.sendCommand(60)
            Thread::sleep(2000)
            PhilipsHueWohnbereich2LeuchteE27ColorColor.sendCommand(60)
            Thread::sleep(2000)
            HueLivingColorColor.sendCommand(60)
            Thread::sleep(2000)
            WohnzimmerStripeColor.sendCommand(60)
            Thread::sleep(2000)
            Stehlampe1Color.sendCommand(60)
	    nCount.postUpdate(+1)  
	}
end


Hoffe, es passt so weit alles, denn dies ist mein erster Beitrag. :)

Grüße

Benutzeravatar
rfu
Beiträge: 24
Registriert: 8. Okt 2021 15:41
Answers: 0

Re: Rule soll anhand eines Counters nur eimal ausgeführt werden

Beitrag von rfu »

Hi,
um den Wert dauerhaft zu halten musst Du dafür ein Item definieren, also nCount nicht als lokale Variable im Script, sondern als eigenes Item. Dieses kannst Du dann in Deiner Rule abfragen und per sendCommand() updaten...
rfu
openHAB 3.3.0 im docker

mad-mike
Beiträge: 491
Registriert: 6. Jan 2021 18:05
Answers: 3

Re: Rule soll anhand eines Counters nur eimal ausgeführt werden

Beitrag von mad-mike »

Moin.

Ich habe dies über ein ""Hilfs" Item als Switch gelöst.

Beim Start der Rule wird gefragt ob "Hilfsschalter ein"" dann abbruch.

Wenn die Rule durchgelaufen ist, wird am ende das Hilfs Item eingeschaltet...

Um 24 uhr wird auf "OFF" gesetzt...

Ob das optimal und elegant gelöst ist, weiss ich nicht, aber es funktioniert... :mrgreen:
Gruss mad-mike

openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB) ;)

Marc1985
Beiträge: 2
Registriert: 30. Okt 2020 11:34
Answers: 0

Re: Rule soll anhand eines Counters nur eimal ausgeführt werden

Beitrag von Marc1985 »

Morgen.

Ja stimmt... mit einem extra Item arbeiten müsste gehen. Daran hatte ich jetzt nicht gedacht. Vielen Dank für die Hilfe. Werde es heute Abend mal testen und Rückmeldung geben.

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Rule soll anhand eines Counters nur eimal ausgeführt werden

Beitrag von udo1toni »

Ansonsten kannst Du auch eine globale Variable nutzen, die behält ihren Wert allerdings nur, solange openHAB nicht neu gestartet oder die rules-Datei neu geladen wird.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten