Seite 1 von 1

Rule soll anhand eines Counters nur eimal ausgeführt werden

Verfasst: 30. Aug 2022 14:13
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

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

Verfasst: 30. Aug 2022 17:07
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

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

Verfasst: 30. Aug 2022 20:12
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:

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

Verfasst: 31. Aug 2022 08:44
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.

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

Verfasst: 31. Aug 2022 15:27
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.