Seite 1 von 1

Tageszeiten in Rule definiern für BWM

Verfasst: 31. Jul 2020 08:44
von Backbe01
Hallo,

zur Anwendung:
Ich habe an meine BJ Komfort BWM einen Shelly dimmer angeschlossen. Dieser verrichtet seine Arbeit hervorragend. Nun möchte ich die Schaltzeiten und Helligkeitswerte unabhängig vom BJ BWM steuern. Auch dieses klappt hervorragend. Lediglich bei der Einstellung in den Rules mit den Schaltzeiten, könnte noch etwas optimiert werden. Daher wäre ich sehr dankbar, wenn ihr einen Blick auf die Rule werfen könntet und mir evtl. ein Beispiel nennen, wie ich die Zeiten eleganter einstellen könnte.

Ich würde gerne zu unterschiedlichen Zeiten drei Helligkeiten integrieren:

Z.B. ab 17Uhr und ab 5 Uhr helles Licht, ab 21 Uhr bis 0 Uhr gedimmtes Licht, und von 0 - 5Uhr ein sehr gedimmtes "Toilettenlicht". :-)

Zur Info: ich habe noch einen Dummyswitch erstellt, damit bei Besuch die Dauer des Schaltintervalls verlängert wird und immer helles Licht angeht.

Vielen Dank im voraus und

VG
Gerhard

Code: Alles auswählen

var Timer tBewegung = null 
var int iSekundenEG = 15
var int iSekundenOG = 15
var int iSekundenOG_Nacht = 10
var int isekunden_besuch = 55                                                
var int ilux = 2000


rule "Bewegungsmelder EG"
when
    Item shellydimmer_Hausgang_EG_Input_1 changed from 0 to 1                             
then
   
    if  ((Sonnensensor.state as DecimalType) <   (ilux) || (now.getHourOfDay > 20 ) || (now.getMinutesOfDay < 300)) {
        
        logInfo("bewegung","Es ist Nacht. Kleines Licht.")
        shelly_Hausgang_EG_Dimmer_bwm.sendCommand(7)  
        tBewegung?.cancel                                                                                             
        tBewegung = createTimer(now.plusSeconds(iSekundenEG), [ |                     
            shellydimmer_Hausgang_EG_Dimmer.sendCommand(3)
            shellydimmer_Hausgang_EG_Dimmer.sendCommand(0) 
        ])
    }
        else  {
        logInfo("bewegung","Es ist Abend. Helles Licht.")
           shelly_Hausgang_EG_Dimmer_bwm.sendCommand(100)  
            tBewegung?.cancel                                                                                             
            tBewegung = createTimer(now.plusSeconds(iSekundenEG), [ |                     
            shellydimmer_Hausgang_EG_Dimmer.sendCommand(66)
            shellydimmer_Hausgang_EG_Dimmer.sendCommand(33)
            shellydimmer_Hausgang_EG_Dimmer.sendCommand(0)                                       
        ]) 
    }
    

    
    if(Besuch_anwesend.state == ON) {                      
        logInfo("bewegung","Es ist dunkel und Besuch, helles Licht.")
        tBewegung?.cancel                                                    
        shellydimmer_Hausgang_EG_Dimmer.sendCommand(100)                                        
        tBewegung = createTimer(now.plusSeconds(isekunden_besuch), [ |                  
            shellydimmer_Hausgang_EG_Dimmer.sendCommand(66)
            shellydimmer_Hausgang_EG_Dimmer.sendCommand(33)
            shellydimmer_Hausgang_EG_Dimmer.sendCommand(0)                                    
        ])
        }

end

Re: Tageszeiten in Rule definiern für BWM

Verfasst: 3. Aug 2020 19:28
von Backbe01
Ich habe jetzt selber nochmal etwas umgestellt. So gefällt mir die Rule schon besser:

Code: Alles auswählen

var Timer tBWM = null                                                       

rule "BWM_EG"
when
    Item shellydimmer_Hausgang_EG_Input_1 changed from 0 to 1
then
    logInfo("SchlummerBWM_EG_NEU", "BWM_EG löst aus")
    if(tBWM !== null) tBWM.cancel
    var Integer iSekunden = 15
    var Integer iHelligkeit = 100
    if(now.getMinuteOfDay >= 21 * 60 && now.getMinuteOfDay < 23 * 60 +59 && Besuch_anwesend.state != ON) iHelligkeit = 7
    if(now.getHourOfDay >= 0 && now.getMinuteOfDay < 5 * 60 +10 && Besuch_anwesend.state != ON) iHelligkeit = 2
    if(now.getMinuteOfDay >= 5 * 60 +11 && now.getMinuteOfDay < 6 * 60 && Besuch_anwesend.state != ON) iHelligkeit = 7
    if(Besuch_anwesend.state == ON) iSekunden = 55 
    shelly_Hausgang_EG_Dimmer_bwm.sendCommand(iHelligkeit)
    tBWM = createTimer(now.plusSeconds(iSekunden), [
        shellydimmer_Hausgang_EG_Dimmer.sendCommand(0)
        //tBWM = null
    ])
end
Eine Frage hätte ich noch: Ist es möglich im "if Teil" eine zweite var einzubauen, wie z.B. iHelligkeit = 7 && iSekunden = 20?

Bei meinen Versuchen wurde hier immer ein Fehler ausgegeben...

Re: Tageszeiten in Rule definiern für BWM

Verfasst: 3. Aug 2020 19:37
von Darkwin101
Setze mal den Definitionteil nach dem if...) in {} Klammern
Also if(....){iHelligkeit =7 iSekunden=20}

Re: Tageszeiten in Rule definiern für BWM

Verfasst: 3. Aug 2020 19:51
von Backbe01
Hey Darkwin, vielen Dank! Hat auf Anhieb geklappt!!